首页 > 代码库 > [文件系统]文件系统学习笔记(十一)——mount系统调用(其它)

[文件系统]文件系统学习笔记(十一)——mount系统调用(其它)

1,mount example

Mount (/dev/hdb1 to /home/xpl)
a.要 mount 一个新的设备必须先创造一个superblock。利用要mount的文件系统的file_system_type,调用其get_sb()來创造新的super block
b.创建vfsmountfor /dev/hdb1 and add to current system
c.新的 vfsmount:
-mountpoint 為为“xpl”的dentry
-mnt_root为hdb1 device上root的 dentry
-mnt_parent指向/home/xpl所在的vfsmount

 

2,mount_hashtable表,

主要是根据mountpoint的dentry和mountpoint所属vfsmount结构体共同计算hash值确定该mountpoint目录下挂载的文件系统的vfsmount结构

 

3,linux mount命令

mount命令详细解释
命令格式:
mount [-t vfstype] [-o options] device dir
  1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
  光盘或光盘镜像:iso9660
  Mount Windows文件网络共享:smbfs
  UNIX(LINUX) 文件网络共享:nfs
  2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
  loop:用来把一个文件当成硬盘分区挂接上系统
  ro:采用只读方式挂接设备
  rw:采用读写方式挂接设备
  3.device 要挂接(mount)的设备。
  4.dir设备在系统上的挂接点(mount point)。
补充:
mount -a [-t type] [-O optlist]  将会挂载 /etc/fstab 中所有列出的所有设备(明确标记为"noauto"的除外),如果同时给出了 device(或 LABEL, UUID, PARTUUID, PARTLABEL) 和 dir,那么 mount 将不会读取 /etc/fstab 中的设置
通常只有root用户才可以挂载文件系统,但是如果在 fstab 中包含"user"选项,那么所有用户都可以挂载此文件系统。例如,如果在 fstab 中包含如下的行:
                     /dev/cdrom  /cd  iso9660  ro,user,noauto,unhide
使用了"user"选项的文件系统,只有挂载该文件系统的用户才可以卸载它,若想允许任何其他用户卸载,那么可以使用"users"代替"user"来实现。

 

 

init.rc里的mount命令会在alps/system/core/init/Builtins.c文件里的do_mount()函数里解析,以下截图中mode的含义是/mnt/obb/目录下的所有文件的初始权限是0755,0755是以八进制表示的,gid是设置左右文件所属的组。

 

4,unmount系统调用:
int umount(const char *target);
int umount2(const char *target, int flags);
flags主要有以下:
MNT_FORCE:即使挂载的文件系统处于busy状态,还是强制卸载,这样可能会引起数据丢失
MNT_DETACH:如果函数执行带有此参数,不会立即执行umount操作,而会等挂载点退出忙碌状态时才会去卸载它。不过此函数执行会阻止对该挂载点执行新的访问。之前就在访问此挂载点操作也不会强制其退出,而是会等待其自然退出。
MNT_EXPIRE:将挂载点设置为过时的,若要卸载的文件系统是根文件系统或者同时设置了MNT_FORCE或MNT_DETACH,则返回-EINVAL;
UMOUNT_NOFOLLOW:它指示如果目标是一个符号链接,则不解引用

[文件系统]文件系统学习笔记(十一)——mount系统调用(其它)