Linux中文件系统注册及mount过程分析3

mount命令要在应用程序里面做很多

[root@T-bagwell ~]# strace mount -t ext4 /dev/sdc1 /mntexecve("/bin/mount", ["mount", "-t", "ext4", "/dev/sdc1", "/mnt"], [/* 26 vars */]) = 0brk(0) = 0xb894c000……stat64("/sbin/mount.ext4", 0xbf90a8b8) = -1 ENOENT (No such file ordirectory)*********************************关键是这里****************************************mount("/dev/sdc1", "/mnt", "ext4", MS_MGC_VAL, NULL) = 0readlink("/dev", 0xbf90995b, 4096) = -1 EINVAL (Invalid argument)……rt_sigprocmask(SIG_UNBLOCK, ~[TRAP SEGV RTMIN RT_1], NULL, 8) = 0exit_group(0) = ?[root@T-bagwell ~]# strace mount -t ext4 -o remount /dev/sdc1 /mntexecve("/bin/mount", ["mount", "-t", "ext4", "-o", "remount", "/dev/sdc1","/mnt"], [/* 26 vars */]) = 0brk(0) = 0xb7dee000mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =0xb7730000……readlink("/dev", 0xbf9fc3ab, 4096) = -1 EINVAL (Invalid argument)readlink("/dev/sdc1", 0xbf9fc3ab, 4096) = -1 EINVAL (Invalid argument)stat64("/sbin/mount.ext4", 0xbf9fd148) = -1 ENOENT (No such file ordirectory)rt_sigprocmask(SIG_BLOCK, ~[TRAP SEGV RTMIN RT_1], NULL, 8) = 0stat64("/sbin/mount.ext4", 0xbf9fd108) = -1 ENOENT (No such file ordirectory)*********************************关键是这里**********因为是-o remount,所以这里多了一个MS_REMOUNT******************************mount("/dev/sdc1", "/mnt", 0xb7def0d8, MS_MGC_VAL|MS_REMOUNT, NULL) = 0readlink("/dev", 0xbf9fc1ab, 4096) = -1 EINVAL (Invalid argument)……rt_sigprocmask(SIG_UNBLOCK, ~[TRAP SEGV RTMIN RT_1], NULL, 8) = 0exit_group(0)

只说挂载就可以了,remount先忽略,do_new_mount

1669 /*1670 * create a new mount for userspace and request it to be added into the1671 * namespace's tree1672 */1673 static int do_new_mount(struct path *path, char *type, int flags,1674 int mnt_flags, char *name, void *data)1675 {1676 struct vfsmount *mnt;16771678 if (!type)1679 return -EINVAL;16801681 /* we need capabilities... */1682 if (!capable(CAP_SYS_ADMIN))1683 return -EPERM;16841685 lock_kernel();1686 mnt = do_kern_mount(type, flags, name, data);1687 unlock_kernel();1688 if (IS_ERR(mnt))1689 return PTR_ERR(mnt);16901691 return do_add_mount(mnt, path, mnt_flags, NULL);1692 }

里面有两个和mount有关的操作一个是do_kern_mount,一个是 do_add_mount,一个是做mount挂载,一个是将mount挂载的fs添加到mount的列表里

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券