Keep on going, never give up.

Linux /etc/fstab和etc/mtab有什么区别

在设计Android程序时,常遇到外部SD卡驱动器路径问题,尽管Android系统上也有现成的函数读取外部存储器路径,但似乎兼容性不太好,因为一些Andorid厂家系统定制时,常会随意修改SD挂载设置,影响路径信息准确度。

不过我们还有办法,那就是使用Linux的/etc/fstab和etc/mtab文件。

一、/etc/fstab文件是什么

/etc/fstab文件记录静态文件系统信息,按照维基百科/etc/fstab上的介绍,该文件记录计算机硬盘分区相关信息,启动Linux、mount挂载分区等命令执行都,都会用到fstab信息,看页面示例也是带有:

<file system> <mount point>   <type>  <options>       <dump>  <pass>
文件系统 挂载点 分区类型 挂载选项 dump选项

这样的格式内容,但天缘自己从Ubuntu 11.04上抓到却是这么个内容(难道用途修改了?),其它细节没看,至少直接打开来查询外部SD卡驱动器路径有点问题。

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda8 during installation
UUID=f600226f-cc64-4b40-b9a8-8888888888888 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda7 during installation
UUID=3b67dd55-b0ef-4940-a4f1-8888888888888 none            swap    sw              0       0

如果需要解析/etc/fstab,只需参照/etc/fstab的字段定义进行解析即可,具体可参考上文维基百科链接。

二、/etc/mtab文件是什么

/etc/mtab该文件也是记载当前系统已经装载的文件系统,包括一些操作系统虚拟文件,这跟/etc/fstab有些不同。/etc/mtab文件在mount挂载、umount卸载时都会被更新,时刻跟踪当前系统中的分区挂载情况。下图我台式机上的/etc/mtab中的内容:

/dev/sda8 / ext4 rw,errors=remount-ro 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
none /sys/fs/cgroup tmpfs rw 0 0
none /sys/fs/fuse/connections fusectl rw 0 0
none /sys/kernel/debug debugfs rw 0 0
none /sys/kernel/security securityfs rw 0 0
udev /dev devtmpfs rw,mode=0755 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=0620 0 0
tmpfs /run tmpfs rw,noexec,nosuid,size=10%,mode=0755 0 0
none /run/lock tmpfs rw,noexec,nosuid,nodev,size=5242880 0 0
none /run/shm tmpfs rw,nosuid,nodev 0 0
none /run/user tmpfs rw,noexec,nosuid,nodev,size=104857600,mode=0755 0 0
none /sys/fs/pstore pstore rw 0 0
systemd /sys/fs/cgroup/systemd cgroup rw,noexec,nosuid,nodev,none,name=systemd 0 0
gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,user=john 0 0
/dev/sda6 /media/john/BKUP fuseblk rw,nosuid,nodev,allow_other,default_permissions,blksize=4096 0 0

需要解析/etc/mtab,方法同上,只需了解各个字段的定义即可,/etc/mtab定义如下:

驱动器 挂载点 文件系统 读写权限 

三、/proc/mounts

其实还有个/proc/mounts,这个文件也记录当前系统挂载信息,通过比较,/etc/mtab有的内容,/proc/mounts也有,只是序有所不同,另外还多了一条根文件系统信息:

rootfs / rootfs rw 0 0

所以,我们也是可以通过读取/proc/mount也可以来获取当前挂载信息。

综上所述,我们可通过读取/etc/mstab,然后分行判断驱动器及文件系统类型,即可找到外置SD驱动器的路径,因为目前Android普遍都有两个外部SD驱动器(集成、外接),所以还需要通过其它方式分离它们之间关系,比如通过查找文件、程序包名等方式均可。

[注:本文主要目的是程序查找驱动器方法,其它文件细节、字段定义细节,后续用到时再做完善,欢迎指教。]

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.