mount 命令中的“仅限内部”意味着什么?为什么不调用 /sbin/mount 文件系统?

mount 命令中的“仅限内部”意味着什么?为什么不调用 /sbin/mount 文件系统?

下面的命令,它用于在用户的主目录中生成可执行文件

mount -i -o remount,exec /home/chronos/user
  • 我知道-o争论是为了选择,在这种情况下重新安装和做可执行文件在用户主目录。

来自安装手册:

-i, --internal-only
不调用 /sbin/mount.filesystem 帮助程序,即使它存在。

为什么不调用 sbin/mount 文件系统?

请举例。

答案1

一些文件系统(通常是那些用保险丝)有特殊的挂载程序/sbin,例如 NTFS FUSE 驱动程序 ntfs-3g 有其自己的mount.ntfs-3g。如果不使用该-i选项,该程序将由命令调用mount,而不是调用挂载系统调用挂载文件系统时。

所以对于 NTFS 你可以这样做

$ sudo mount /dev/vdb2 /mnt/test -i

强制内核 NTFS 驱动程序

$ mount | grep vdb2
/dev/vdb2 on /mnt/test type ntfs (ro,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1

看到这里的类型是ntfs,文件系统被挂载为只读(ro),因为内核驱动程序不支持读写。

与默认情况相比,没有-i哪个将使用mount.ntfs-3g哪个使用FUSE驱动程序

$ sudo mount /dev/vdb2 /mnt/test
$ mount | grep vdb2
/dev/vdb2 on /mnt/test type fuseblk (rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096)

现在类型是fuseblk(因为 NTFS-3G 是 FUSE 驱动程序)并且文件系统以读写方式挂载。

您还可以使用LIBMOUNT_DEBUG=all环境变量来获取mount.

如果没有-i它调用/sbin/mount.ntfs助手:

2124: libmount:      CXT: [0x5584880d2a50]: mount: do mount
2124: libmount:      CXT: [0x5584880d2a50]: mount: executing helper /sbin/mount.ntfs
2124: libmount:      CXT: [0x5584880d2a50]: mount: generate helper mount options
2125: libmount:      CXT: [0x5584880d2a50]: argv[0] = "/sbin/mount.ntfs"
2125: libmount:      CXT: [0x5584880d2a50]: argv[1] = "/dev/vdb2"
2125: libmount:      CXT: [0x5584880d2a50]: argv[2] = "/mnt/test"
2125: libmount:      CXT: [0x5584880d2a50]: argv[3] = "-o"
2125: libmount:      CXT: [0x5584880d2a50]: argv[4] = "rw"
2124: libmount:      CXT: [0x5584880d2a50]: /sbin/mount.ntfs executed [status=0, rc=0]

它只-i调用 mount 系统调用:

2119: libmount:      CXT: [0x559aa1a8ba50]: mount: do mount
2119: libmount:      CXT: [0x559aa1a8ba50]: mount(2) [source=/dev/vdb2, target=/mnt/test, type=ntfs,  mountflags=0x00000000, mountdata=<none>]

相关内容