[文件系统]文件系统学习笔记(五)---mount系统调用(1)

1,mount命令各个参数的含义

mount命令各个参数含义


2,mount系统调用中flag参数的含义
#define MS_RDONLY 1  /* Mount read-only */
#define MS_NOSUID 2  /* Ignore suid and sgid bits */
#define MS_NODEV  4  /* 在已经安装文件系统上禁止访问设备文件 */
#define MS_NOEXEC 8  /* 在已经安装文件系统上不允许程序运行 */
#define MS_SYNCHRONOUS   16  /* Writes are synced at once */
#define MS_REMOUNT   32  /* Alter flags of a mounted FS */
/* 允许强制枷锁 */
#define MS_MANDLOCK  64  /* 不允许强制加锁 */
#define MS_DIRSYNC   128 /* 目录上写操作是即时的 */
#define MS_NOATIME   1024   /* 不更新文件访问时间. */
#define MS_NODIRATIME 2048/* Do not update directory access times */
/* 创建一个“绑定挂载”,这就使得一个文件或目录在系统目录树的另外一个点上可以看得见 */
#define MS_BIND      4096
/* 把一个已挂载文件系统移动到另一个挂载点,相当于先执行卸载,然后将文件系统挂载在另外的一个目录下 */
#define MS_MOVE      8192
#define MS_REC       16384 /* 为目录子树递归的创建绑定挂载 */
#define MS_SILENT 32768
#define MS_POSIXACL  (1<<16)    /* VFS does not apply the umask */
#define MS_UNBINDABLE    (1<<17)    /* change to unbindable */
#define MS_PRIVATE   (1<<18)    /* change to private */
#define MS_SLAVE  (1<<19)    /* change to slave */
#define MS_SHARED (1<<20)    /* change to shared */
#define MS_RELATIME (1<<21) /* Update atime relative to mtime/ctime. */
#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
#define MS_I_VERSION (1<<23) /* Update inode I_version field */
#define MS_STRICTATIME   (1<<24) /* Always perform atime updates */
#define MS_ACTIVE (1<<30)
#define MS_NOUSER (1<<31)


绑定挂载(MS_BIND)使得一个文件或目录在系统目录树的另外一个点上可以看得见,而对原目录的操作将实际上应用于绑定的目录,而并不改变原目录。如,
mount --bind /vz/apt/ /var/cache/apt/archives/
上面命令的意思是把 /vz/apt/ 目录绑定挂载到 /var/cache/apt/archives/,以后只要是写到 /var/cache/apt/archives/ 目录中的数据,都会自动写到其绑定目录 /vz/apt/ 中,
真正的 /var/cache/apt/archives/ 中并没有数据。
环回挂载(loopback mount),环回文件系统系统依存於一个储存在别的文件系统系统中的文件,并将这个文件当作是一个外围设备来操作。这个虚拟的设备如同真实设备一样, 可以被格式化或挂载於目录树中。环回文件系统的设备文件通常是 /dev/loop0 或是 /dev/loop1 等等, 这些设备再被指向所依存的文件,如此这个档案便能被视为虚拟设备而被挂载。比如:mount initrd.img /root/initrd -t ext2 -o loop  递归地环回挂载,递归地环回挂载就是将原来目录树中的挂载,同样地都完全地搬到新的目录下。

f2fs文件系统调用主要涉及以下几个组件和函数1. 文件系统类型定义:在f2fs文件系统中,通过定义一个file_system_type结构体来表示文件系统类型。其中包括了文件系统的名称、挂载函数、卸载函数等信息。在f2fs中,文件系统类型定义如下: static struct file_system_type f2fs_fs_type = { .owner = THIS_MODULE, .name = "f2fs", .mount = f2fs_mount, .kill_sb = kill_block_super, .fs_flags = FS_REQUIRES_DEV, }; 2. 挂载函数:f2fs_mount函数是用来将块设备挂载成f2fs文件系统函数。它是通过调用mount_bdev函数来实现的。具体的挂载过程包括了填充f2fs super block信息等操作。在f2fs中,挂载函数定义如下: static struct dentry *f2fs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) { return mount_bdev(fs_type, flags, dev_name, data, f2fs_fill_super); } 3. 填充super block信息:f2fs_fill_super函数用来填充f2fs文件系统的super block信息。它会读取块设备上的super block数据,并将其解析为内存中的数据结构。在f2fs中,填充super block信息的函数定义如下: static int f2fs_fill_super(struct super_block *sb, void *data, int silent) { // 填充super block信息的具体实现 } 通过以上组件和函数,f2fs文件系统可以被调用和使用。当用户在用户空间执行mount操作时,会回调到文件系统类型中定义的mount函数,即f2fs_mount函数。在f2fs_mount函数中,会调用mount_bdev函数来实现具体的挂载过程,包括填充super block信息等操作。最终,f2fs文件系统就可以被成功挂载和使用。 #### 引用[.reference_title] - *1* [f2fs学习笔记 - 4. f2fs文件系统组件说明](https://blog.youkuaiyun.com/jasonactions/article/details/122417105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [f2fs学习四: f2fs文件系统挂载](https://blog.youkuaiyun.com/guozhidixian/article/details/115498708)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值