Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2182349
  • 博文数量: 141
  • 博客积分: 3552
  • 博客等级: 中校
  • 技术积分: 4148
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-15 14:39
个人简介

熟悉Linux下程序设计及各种应用程序 熟悉C Language 熟悉Glusterfs、FFmpeg、CDN 系统设计,计算机图形系统设计、分布式程序设计 目前主要研究方向:流媒体

文章分类

全部博文(141)

分类: LINUX

2010-08-13 22:11:55

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

[root@T-bagwell ~]# strace mount -t ext4 /dev/sdc1 /mnt
execve
("/bin/mount", ["mount", "-t", "ext4", "/dev/sdc1", "/mnt"], [/* 26 vars */]) = 0
brk
(0) = 0xb894c000
……
stat64
("/sbin/mount.ext4", 0xbf90a8b8) = -1 ENOENT (No such file ordirectory)
*********************************关键是这里****************************************
mount("/dev/sdc1", "/mnt", "ext4", MS_MGC_VAL, NULL) = 0

readlink
("/dev", 0xbf90995b, 4096) = -1 EINVAL (Invalid argument)
……
rt_sigprocmask
(SIG_UNBLOCK, ~[TRAP SEGV RTMIN RT_1], NULL, 8) = 0
exit_group
(0) = ?






[root@T-bagwell ~]# strace mount -t ext4 -o remount /dev/sdc1 /mnt
execve
("/bin/mount", ["mount", "-t", "ext4", "-o", "remount", "/dev/sdc1","/mnt"], [/* 26 vars */]) = 0
brk
(0) = 0xb7dee000
mmap2
(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) = 0
stat64
("/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) = 0

readlink
("/dev", 0xbf9fc1ab, 4096) = -1 EINVAL (Invalid argument)
……
rt_sigprocmask
(SIG_UNBLOCK, ~[TRAP SEGV RTMIN RT_1], NULL, 8) = 0
exit_group
(0)

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

1669 /*
1670 * create a new mount for userspace and request it to be added into the
1671 * namespace's tree
1672 */

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;
1677
1678 if (!type)
1679 return -EINVAL;
1680
1681 /* we need capabilities... */
1682 if (!capable(CAP_SYS_ADMIN))
1683 return -EPERM;
1684
1685 lock_kernel();
1686 mnt = do_kern_mount(type, flags, name, data);
1687 unlock_kernel();
1688 if (IS_ERR(mnt))
1689 return PTR_ERR(mnt);
1690
1691 return do_add_mount(mnt, path, mnt_flags, NULL);
1692 }

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

阅读(4185) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~