本文主要根据 mount(8) 手册翻译而来,可能会有部分翻译有误,请指出。
注:我使用的CentOS8,系统描述可能略用不同。

mount属于util-linux软件包中的软件,主要用于挂载各类文件系统。

摘要

mount [-l|-h|-V]
mount -a [-fFnrsvw] [-t fstype] [-O optlist]
mount [-fnrsvw] [-o options] device|dir
mount [-fnrsvw] [-t fstype] [-o options] device dir

描述

如下图,Unix系统中所有文件都排列在类似于树一样的树状图从中,该文件的根目录为/。 这些文件可以分布在多个设备上。 mount命令用于将在某些设备上找到的文件系统附加到树中。 相反, umount(8) 命令会将其分离。 文件系统用于控制数据如何存储在设备上(DAS)或如何通过网络(NAS)或其他服务(SAN)以虚拟方式提供。
Linux 根目录
标准的mount命令使用方法如下:

mount -t type device dir

这会告诉内核将设备device(类型type)上找到的文件系统附加到目录dir。 选项-t type是可选的。 mount命令通常能够自动完成文件系统检测。 通常,root权限是挂载文件系统的必要条件。 (关于非root权限,请参见下面的“无root权限挂载”部分)当前目录中原本的内容将会变得不可见,并且只要此文件系统保持挂载状态,目录dir便是设备device上文件系统的根目录。只有使用 umount(8) 指令卸载目录dir,就能看见先前的文件。

如果只给定目录或设备,如下:

mount /dir

然后 mount 会在 /etc/fstab 文件中查找挂载点(如果找不到则识别为设备)并挂载文件系统。可以使用 --target--source 选项来避免对给定参数的歧义解释。 例如:

mount --target /mountpoint

同一文件系统可能会被挂载了不止一次,在某些情况下(例如网络文件系统),同一文件系统可能会在同一挂载点上被挂载多次。 mount命令并不会检测这一行为。 所有行为都将由内核控制,通常特定于文件系统驱动程序。 除 --all例外,在这种情况下,已挂载的文件系统将被忽略(有关更多详细信息,请参见参options部分中的--all参数)。

列出挂载点

列出模式仅保留用以向后兼容。

更多功能和使用都已移动到 findmnt(8) 命令中了,特别是在脚本中。注意挂载点名称中的控制字母中被替换为了?

下面的命令列出了所有挂载的文件系统(类型为type):

mount [-l] [-t type]

选项-l将添加文件系统标签到列表中。 详情参见options部分中的--all参数。

指定设备和文件系统

大多数设备由(块设备)文件名指示,例如 /dev/sda1,但是还有其他可能。 例如,在NFS挂载的情况下,设备可能看起来像 knuth.cwi.nl:/dir(例:192.168.31.237:/var/nfs)。 也可以使用文件系统标签或UUID(参见-L-U选项)或其分区标签或UUID来标识块设备。 例如,GUID分区表(GPT)支持分区标识符。
当移动磁盘时,磁盘分区的设备名会发生变化;硬件重新配置、添加或删除设备都有可能会导致名称更改。这也就是为什么强烈建议使用文件系统或分区标识符(如UUID或LABEL)来指定设备的原因了。
命令lsblk --fs概述了可用块设备上的文件系统,LABEL和UUID。 命令blkid -p <device>提供有关指定设备上文件系统的详细信息。
注意,,当移动,共享或复制设备时,并不能保证UUID和标签是唯一的。 可以使用lsblk -o + UUID,PARTUUID来验证UUID在您的系统中确实是唯一的。
推荐的设置是使用标签(或 UUID=uuid),而不是 /etc/fstab 文件中的 /dev/disk/by- {label,uuid,partuuid,partlabel} udev符号链接。 标签更具可读性,健壮性和可移植性。 mount(8) 命令在内部使用udev符号链接,因此在 /etc/fstab 中使用符号链接比标记没有优势。 有关更多详细信息,请参见 libblkid(3)。
请注意,mount(8) 使用UUID作为字符串。 命令行或 fstab(5) 中的UUID不会转换为内部二进制表示形式。 UUID的字符串表示应使用小写字符。
proc文件系统不与特殊设备关联,并且在挂载该文件系统时,可以使用任意关键字例如proc代替特殊设备。 (通常的选择都不是那么幸运:mount中的错误消息“ none been mounted”可能会令人感到困惑。)

文件 /etc/fstab, /etc/mtab 和 /proc/mounts

文件 /etc/fstab(请参阅fstab(5))可能包含描述通常使用哪些选项将哪些设备安装在何处的行。 fstab(5) 文件的默认位置可以使用--fstab path命令行选项覆盖(有关更多详细信息,请参见下文)。
命令:

mount -a [-t type] [-O optlist]

(通常在引导脚本中给出)此命令将会把 fstab 中提到的所有文件系统(具有正确的类型和/或具有或不具有正确的选项)均按内容进行挂载,但其中包含noauto关键字的文件系统除外。 添加-F选项将并行挂载分区,以便同时加快挂载速度。
当挂载 fstab 或 mtab 中提到的文件系统时,只需在命令行上指定设备或挂载点就足够了。
mountumount程序通常会在 /etc/mtab 文件中维护当前已挂载文件系统的列表。 虽然现在任然支持 mtab,但是在当前的Linux系统上,都已经使用符号链接指向 /etc/self/mounts 或 /proc/mounts,因为在用户空间中维护的 mtab 文件不能可靠地运行在命名空间,容器和其他高级Linux功能一起使用。
如果没有给mount指定参数,则显示已挂载的文件系统列表。
如果要忽略 /etc/fstab 中的挂载选项,则必须使用-o选项:

mount device|dir -o options

然后其他的 moount 挂载参数将从 /etc/fstab 中继承。 通常情况下,如果有冲突,则使用最后一个选项,也就是命令行中的参数优先使用。
如果mount命令同时指定了设备device(或LABEL,UUID,PARTUUID或PARTLABEL)和目录dir,将不会读取 /etc/fstab 文件。 例如,要将设备foo挂载到/dir

mount /dev/foo /dir

无root权限挂载

通常,只有超级用户才能挂载文件系统。 但是,当 fstab 中有一行包含user选项时,任何用户都可以挂载相应的文件系统。
首先需要在 /etc/fstab 中添加如下行:

/dev/sdb1 /home/somata/mount xfs ro,user,noauto

现在使用任何用户都可以挂载指定的文件系统了,使用如下命令即可:

mount /home/somata/mount

注:心细的人应该会发现 mount 命令位于 /bin/mount,也就是说,这个命令任何用户都可以使用。同时 /bin/mount 命令具有 suid 位,也就是说,mount 指令运行时的用户还是 root 权限,这一点非常重要!!!
注意,对于非root用户,mount指令将会变得十分严格,在解析 fstab 或执行帮助程序之前,会验证命令行上指定的所有路径。 强烈建议使用有效的,合法的挂载点来指定文件系统,否则挂载可能会失败。 例如,在命令行上使用NFS或CIFS源是个非常不好的选择。
有关更多详细信息,请参见fstab(5)。 只有挂载文件系统的用户才能再次卸载它。 如果需要任何用户都可以能够卸载它,则必须把fstab行中使用的user替换为usersowner选项类似于user选项,但限制是用户必须是特殊文件的所有者。 这可能是有用的,例如 /dev/fd(如果登录脚本使该设备的控制台用户拥有者)。 group选项类似,但限制是用户必须是特殊文件组的成员。
注:如果在 /etc/fstab 中使用的是user,那么在普通用户挂载文件系统后,挂载选项中的user参数的值会赋值为用户名,也就是挂载用户。可以通过 mount(8) 和 findmnt(8) 命令查看。

绑定挂载操作

在其他位置同时挂载文件系统,命令如下:

mount --bind olddir newdir

或者在 fstab 中使用:

/olddir /newdir none bind

执行完命令后,两个挂载点都将同时挂载同一个磁盘。
重要的是要了解“bind”不会在内核VFS中创建任何第二类节点或特殊节点。 “bind”只是附加文件系统的另一种操作。 在任何地方都没有存储文件系统已通过“bind”操作附加的信息。 olddir和newdir是独立的,卸载olddir并不会影响newdir。
也可以重新挂载单个文件(在一个单独的文件)。 使用绑定安装从常规目录创建安装点,例如:

mount --bind foo foo

绑定挂载调用附加一个文件系统,而不附加子挂载点。包括安装的整个文件层次结构通过以下内容附加到第二位:

mount --rbind olddir newdir

注意,文件系统挂载选项将保持与原始挂载点相同的选项。

mount(8),自 v2.27 允许通过传递相关选项和--bind来更改挂载选项。 例如:

mount -o bind,ro foo foo

注意:Linux内核不支持此功能。 它是通过在用户空间中通过附加的mount (2) 重新安装系统调用来实现的。 该解决方案不是原子的。

创建只读绑定挂载的另一种方法是使用重新挂载操作,如下:

mount --bind olddir newdir
mount -o remount,bind,ro olddir newdir

请注意,只读绑定将创建只读安装点(VFS条目),但是原始文件系统超级块仍将是可写的,这意味着olddir将是可写的,而newdir将是只读的。
也可以通过“remount,bind”操作来更改nosuid,nodev,noexec,noatime,nodiratime和relatime VFS入口标志。 不能更改递归安装选项(例如,使用-o rbind,ro)。
mount(8),自v2.31在执行重新挂载操作时会忽略 /etc/fstab 中的bind标志(如果在命令行上指定了“ -o remount”)。 这是完全控制通过命令行重新安装的安装选项所必需的。 在以前的版本中,始终会应用bind标志,并且如果不与bind语义进行交互就无法重新定义安装选项。 当在 /etc/fstab 文件中指定“remount,bind”时,这种 mount(8) 行为不会影响情况。

移动操作

将一个挂载点移动到另一个位置下(原子性的),如下:

mount --move olddir newdir

这将导致以前出现在olddir下的内容现在可以在newdir下访问。 文件的物理位置不会更改。 注意,olddir必须是一个挂载点。
另请注意,移动驻留在共享挂载下的挂载是无效的,不受支持。 使用findmnt -o TARGET,PROPAGATION查看当前传播标志。

共享子树操作

从Linux 2.6.15开始,可以将挂载及其子安装标记为共享(shared),私有(private),从属(slave)或不可绑定(unbindable)。 共享挂载提供了创建该挂载的镜像的功能,以便任何一个镜像中的挂载和卸载都传播到另一个镜像。 从属挂载从其主接收传播,但反之则不然。 专用挂载没有传播功能。 不可绑定挂载是无法通过绑定操作克隆的专用挂载。 详细的介绍记录在内核源 Documentation/filesystems/sharedsubtree.txt 文件中。
支持以下操作:

mount --make-shared mountpoint
mount --make-slave mountpoint
mount --make-private mountpoint
mount --make-unbindable mountpoint

以下命令允许递归更改指定挂载点下的所有挂载类型:

mount --make-rshared mountpoint
mount --make-rslave mountpoint
mount --make-rprivate mountpoint
mount --make-runbindable mountpoint

当使用--make-*指令时并不会读取 fstab,挂载所必须的参数都必须在命令行给出。
请注意,Linux内核不允许通过单个 mount(2) 系统调用来更改多个传播标志,并且这些标志不能与其他安装选项和操作混合使用。
从 util-linux 2.23 开始,mount 命令允许通过一个 mount(8) 调用进行更多的传播(拓扑)更改,并且还可以与其他安装操作一起进行。 此功能是实验性的。 当前面的安装操作成功时,传播标志由其他mount(2)系统调用应用。 注意,该用例不是原子的。 可以在fstab(5)中将传播标志指定为安装选项(private, slave, shared, unbindable, rprivate, rslave, rshared, runbindable)。
例如:

mount --make-private --make-unbindable /dev/sda1 /foo

等同于:

mount /dev/sda1 /foo
mount --make-private /foo
mount --make-unbindable /foo

命令行参数

通过首先从fstab表中提取文件系统的挂载选项,然后应用-o参数指定的任何选项,最后应用-r或-w来确定调用mount所使用的所有挂载选项。 当选项如果存在时。
mount命令不会将所有命令行选项传递给 /sbin/mount.suffix挂载帮助程序。 mount和挂载帮助程序之间的接口在下面的“ 扩展挂载帮助程序”部分中进行了描述。
mount命令可以用的命令选项有:

  • -a,--all:挂载fstab中提到的所有文件系统(指定类型的文件系统除外,其中包含noauto关键字的文件系统除外)。文件系统是按照fstab中的顺序挂载的。mount命令比较文件系统源、目标(以及用于绑定挂载或btrfs的fs根),以检测已经挂载的文件系统。已经挂载了文件系统的内核表在mount --all期间被缓存。这意味着将挂载所有重复的 fstab 条目。
    注意,使用mount -a进行 fstab 检查是一种不好的做法。 推荐的解决方案是findmnt --verify
  • -B,--bind:在其他地方重新安装子树(以便在两个地方都可以使用它的内容)。 参见上文“绑定挂载操作”的内容。
  • -c,--no-canonicalize:不要规范化路径。 默认情况下,mount命令会规范化所有路径(从命令行或fstab)。 该选项可以与-f标志一起用于已经规范化的绝对路径。 该选项是为调用mount -i的挂载帮助完成。 强烈建议不要对常规安装操作使用此命令行选项。
    注:mount不会将参数传递给 /sbin/mount.type 帮助中。
  • -F,--fork:(与-a结合使用。)为每个挂载fork(复制当前进程)出新的mount进程。 这将并行安装在不同的设备或不同的NFS服务器上。 这具有更快的优点。 NFS超时也会并行进行。 缺点是安装的顺序不确定。 因此,如果要同时挂载/ usr和/ usr / spool,则不能使用此选项。
  • -f,--fake:执行除系统调用外的所有操作; 如果不理解,这会其实是就是不挂载文件系统。 该选项与-v标志一起使用,可以确定mount命令将要执行的操作。 它也可以用来为使用-n选项安装的设备添加条目。 -f选项检查 /etc/mtab 中的现有记录,并在记录已经存在的失败(对于常规的非伪挂载,检查将由内核完成)。
  • -i --internal-only:即使存在 /sbin/mount.filesystem 帮助器,也不调用它。
  • -L,--label label:挂载具有指定标签的分区
  • -l,--show-labels:在挂载输出中添加标签。挂载必须具有读取磁盘设备的权限(例如,是set-user-ID根目录)才能工作。您可以使用e2label(8)实用程序为ext2、ext3或ext4设置这样的标签,或者使用xfs_admin(8)为XFS设置这样的标签,或者使用reiserfstune(8)为reiserfs设置这样的标签。
  • -M,--move:将子树移动到其他位置。详情查看"移动操作"。
  • -n,--no-mtab:挂载而不在 /etc/mtab中编写。 例如,当 /etc 为只读文件系统上时,此时 /etc/mtab 就无法编写。
  • -O,--test-opts opts:限制-a选项适用的文件系统集合。 在这方面,它与-t选项类似,不同之处在于,如果没有-a,则-O无用。 例如,命令:
mount -a -O no_netdev

挂载所有文件系统,但在 /etc/fstab 文件的options字段中具有选项_netdev的文件系统除外。
与-t的不同之处在于,每个选项都完全匹配; 在一个选项的开头加“no”并不等于否。
-t和-O选项都有效。 命令:

mount -a -t ext2 -O _netdev

使用_netdev选项安装所有ext2文件系统,而不是所有ext2或指定了_netdev选项的文件系统。

  • o,--options opts:使用指定的安装选项。 opts参数是一个逗号分隔的列表。 例如:
mount LABEL=mudisk -o noatime,nodev,nosuid

有关更多详细信息,请参见“独立文件系统挂载选项”部分。

  • -R,--rbind:在其他位置重新挂载一个子树和所有可能的子安装(以便在两个地方都可以使用其内容)。 请参见上面的“绑定挂载”小节。
  • -r,--read-only:以只读方式挂载操作系统,等同于-o ro
    请注意,根据文件系统类型,状态和内核行为,系统可能仍会写入设备。 例如,如果文件系统污染了,则ext3和ext4将重写日志。 为了防止这种写访问,您可能需要使用ro,noload挂载选项挂载ext3或ext4文件系统,或者将块设备本身设置为只读模式,请参见blockdev(8)命令。
  • -s:容忍草率的挂载选项而不是失败。 这将忽略文件系统类型不支持的安装选项。 并非所有文件系统都支持此选项。 当前,仅mount.nfs挂载帮助程序支持它。
  • --source device:如果仅给出mount命令的一个参数,则该参数可能被解释为目标(安装点)或源(设备)。 该选项允许显式定义该参数是装入源。
  • --target directory:如果仅给出mount命令的一个参数,则该参数可能被解释为目标(安装点)或源(设备)。 此选项允许显式定义参数为装载目标。
  • -T,--fstab path:指定备用fstab文件。 如果path是目录,则目录中的文件由strverscmp(3)排序; 以“.”开头的文件。 或没有以 .fstab 扩展名的文件都将被忽略。 可以多次指定该选项。 此选项主要是为initramfs或chroot脚本设计的,在这些脚本中,除标准系统配置外还指定了其他配置。
    请注意,mount(8) 不会将选项--fstab传递给/sbin/mount.type帮助器,这意味着替代fstab文件对于帮助器将是不可见的。 对于普通的挂载来说这没问题,但是用户(非root)挂载始终需要fstab来验证用户的权限。
  • -t,--types fstype:-t之后的参数用于指示文件系统类型。 当前支持的文件系统类型取决于正在运行的内核。 有关文件系统的完整列表,请参见 /proc/filesystems 和 /lib/modules/$(uname -r)/kernel/fs。 最常见的是ext2,ext3,ext4,xfs,btrfs,vfat,sysfs,proc,nfs和cifs。
    程序mountumount支持的文件系统子类型。 子类型由“ .subtype”后缀定义。 例如“ fuse.sshfs”。 建议使用子类型表示法,而不要在安装源中添加任何前缀(例如,不建议使用“ sshfs#example.com”)。
    如果未给出-t选项,或者如果指定了auto类型,则mount将尝试猜测所需的类型。 Mount使用blkid库来猜测文件系统类型。 如果没有发现任何看起来熟悉的东西,mount将尝试读取文件 /etc/filesystems,或者还不存在,则将尝试读取 /proc/filesystems。 除了标记为“ nodev”的文件系统类型(例如devpts,proc和nfs)外,此处列出的所有文件系统类型都将尝试。 如果 /etc/filesystems以单个*结尾,则mount将随后读取 /proc/filesystems。 尝试时,所有文件系统类型都将在silent选项的情况下挂载。
    自动类型对于用户安装的软盘可能很有用。创建文件/etc/文件系统可用于更改探测顺序(例如,在 ext2 之前尝试 vfat 或 ext3),或者如果您使用内核模块自动加载器。
    可以在逗号分隔列表中指定多个类型,用于选项-t以及/etc/fstab条目。选项-t的文件系统类型列表可以预固定,但可以指定不应对其执行任何操作的文件系统类型。在/etc/fstab条目中指定前缀no时不起作用。
    前缀no对-a选项有意义。例如,命令:
mount -a -t nomsdos,smbfs

挂载除msdos和smbfs类型的文件系统以外的所有文件系统。
对于大多数类型,所有挂载程序要做的就是发出一个简单的mount(2)系统调用,并且不需要详细了解文件系统类型。 但是,对于某些类型(例如nfs,nfs4,cif,smbfs,ncpfs),需要一个临时代码。 nfs,nfs4,cif,smbfs和ncpfs文件系统具有单独的装入程序。 为了能够以统一的方式处理所有类型,当用type type调用时,mount将执行程序/sbin/mount.type(如果存在)。 由于不同版本的smbmount程序具有不同的调用约定,因此/sbin/mount.smbfs可能必须是用于设置所需调用的Shell脚本。

  • -U,--uuid uuid:挂载具有指定UUID的分区。
  • -v,--verbose:显示详细模式
  • -w,--rw,--read-write:以读写方式挂载文件系统,读写时内核默认设置,等同于:-o rw。
    请注意,在命令行上指定-w会强制mount命令从不尝试在受写保护的设备上进行只读安装。 如果先前的带有读写标志的挂载系统调用失败,则默认值为只读。
  • -V,--version:显示版本信息并推出
  • -h,--help:显示帮助信息并推出

独立文件系统挂载选项

其中一部分选项可以使用在 /etc/fstab 文件当中。
其中的某些选项可以在系统内核中默认启用或禁用。 要检查当前设置,请参阅 /proc/mounts中的选项。 请注意,文件系统还具有特定于每个文件系统的默认挂载选项(例如,对于extN文件系统,请参阅tune2fs -l输出)。
以下选项适用于正在挂载的任何文件系统(但并非每个文件系统实际上都支持它们-例如,sync选项仅对ext2,ext3,ext4,fat,vfat和ufs有效):

  • async:文件系统的所有I / O应该异步完成。 (另请参见同步选项。)
  • atime:不要使用noatime功能,因此inode的访问时间由内核默认值控制。 另请参见relatime和strictatime挂载选项的描述。
  • noatime:不要更新此文件系统上的索引节点访问时间(例如,用于更快地访问新池以加速新服务器)。 这适用于所有inode类型(也适用于目录),同时包含nodiratime
  • auto:可以用-a选项挂载。
  • noauto:只能显式挂载(即-a选项不会导致挂载文件系统)。
    context=context,fscontext=context,defcontext=context和rootcontext=context当挂载不支持扩展属性的文件系统(例如,用VFAT格式化的软盘或硬盘,或通常运行不正常的系统)时,context =选项非常有用。 在SELinux下,例如非SELinux工作站上的ext3或ext4格式化磁盘。 您也可以在不信任的文件系统(例如软盘)上使用context =。 它还有助于与早期2.4.<x>内核版本上支持xattr的文件系统兼容。 即使支持xattrs,也可以通过为整个磁盘分配一个安全上下文来节省不必为每个文件加上标签的时间。
    可移动媒体的常用选项是context = system_u:object_r:removable_t。
    另外两个选项是fscontext=和defcontext=,这两个选项互斥于context选项。 这意味着您可以将fscontext和defcontext相互使用,但不能与上下文一起使用。
    fscontext=选项适用于所有文件系统,无论其对xattr的支持如何。 fscontext选项将总体文件系统标签设置为特定的安全上下文。 该文件系统标签与文件上的各个标签是分开的。 它代表用于某些类型的权限检查的整个文件系统,例如在安装或创建文件期间。 仍然可以从文件本身的xattrs获取单个文件标签。 除了为单个文件提供相同的标签之外,context选项实际上还设置了fscontext提供的聚合上下文。
    您可以使用defcontext=选项为未标记的文件设置默认的安全上下文。 这将覆盖策略中为未标记文件设置的值,并且需要支持xattr标记的文件系统。
    rootcontext=选项允许您在用户空间可见FS或inode之前,显式标记正在安装的FS的根inode。 人们发现这对于诸如无状态linux之类的事情很有用。
    请注意,即使当前上下文未更改,内核也会拒绝任何包含context选项的重新安装请求。
    警告:上下文值可能包含逗号,在这种情况下,必须正确引用该值,否则mount(8)会将逗号解释为安装选项之间的分隔符。 不要忘记,外壳会去除引号,因此需要双引号。 例如:
mount -t tmpfs none /mnt -o 'context=system_u:object_r:tmp_t:s0:c127,c456,noexec'

详情请查见 selinux(8)!!!

  • defaults:默认配置,等同于: rw, suid, dev, exec, auto, nouser和async.
    请注意,所有默认安装选项的实际设置取决于内核和文件系统类型。 有关更多详细信息,请参见本节的开头。
  • dev:允许使用文件系统上的特殊设备或字符设备。
  • nodev:注释使用文件系统上的字符设备或块设备。
  • diratime:更新此文件系统上目录inode的访问时间。 这是默认值。 (设置noatime时,将忽略此选项。)
  • nodirtime:不要在此文件系统上更新目录inode的访问时间。 (设置noatime时隐含此选项。)
  • dirsync:文件系统中的所有目录更新应同步进行。 这会影响以下系统调用:创建,链接,取消链接,符号链接,mkdir,rmdir,mknod和重命名。
  • exec:允许执行二进制文件。
  • noexec:不允许在已挂载的文件系统上直接执行任何二进制文件。
  • group:如果该用户的组之一与设备的组匹配,则允许该普通用户安装文件系统。 此选项暗含选项nosuidnodev(除非被后续选项覆盖,如选项行group,dev,suid中所示)。
  • iversion:每次修改inode时,i version字段都会增加。
  • noiversion:不要增加i_version索引节点字段。
  • mand:在此文件系统上允许强制锁定。 参见 fcntl(2)。
  • nomand:在这个文件系统上不允许强制锁。
  • _netdev:文件系统驻留在需要网络访问的设备上(用于防止系统尝试在系统上启用网络之前挂载这些文件系统)。
  • nofail:如果该设备不存在,请不要报告错误。
  • relatime:更新与修改或更改时间有关的索引节点访问时间。 仅当先前的访问时间早于当前的修改或更改时间时,才更新访问时间。 (类似于noatime,但它不会破坏mutt或其他需要知道自上次修改文件以来是否已读取文件的应用程序。)
    从Linux 2.6.30开始,内核默认使用此选项提供的行为(除非指定了noatime),并且strictatime选项是获取传统语义所必需的。 另外,从Linux 2.6.30开始,如果文件的存在时间超过1天,则文件的最后访问时间将始终更新。
  • norelatime:不使用relatime功能。 详情参见strictatime挂载选项。
  • stricatime:允许显式请求全时更新。 这使内核可以默认为relatimenoatime,但仍允许用户空间覆盖它。 有关默认系统安装选项的更多详细信息,请参见 /proc/mounts。
  • nostricatime:使用内核的默认行为进行inode访问时间更新。
  • lazytime:仅在文件inode的内存版本上更新时间(atime、mtime、ctime)。
    对于经常对预先分配的文件执行随机写操作的工作负载,此挂载选项可以显著减少对inode表的写操作。
    仅在以下情况下才更新磁盘时间戳:

    • inode需要进行一些与文件时间戳无关的更改
    • 应用程序使用fsync(2)、syncfs(2)或sync(2)
    • 未删除的inode从内存中逐出
    • 从i-node被写到磁盘已经过去了24个多小时。
  • nolazytime:不使用延迟时间功能。
  • suid:允许set-user-ID或set-group-ID位生效。
  • nosuid:不允许set-user-ID或set-group-ID位生效。
  • silent:打开silent标志位
  • loud:关闭silent标志位
  • owner:如果该普通用户是设备的所有者,则允许该普通用户挂载文件系统。 此选项暗含选项nosuid和nodev(除非被后续选项覆盖,如选项行owner,dev,suid中所示)。
  • remount:尝试重新挂载已安装的文件系统。这通常用于更改文件系统的挂载标志,特别是使只读文件系统可写。它不改变设备或安装点。
    与绑定标志一起的重新挂载操作具有特殊的语义。见上文“绑定挂载草尊”。
    重新挂载功能遵循mount命令与fstab中的选项一起使用的标准方式。 这意味着仅当同时指定了设备和目录时,mount才读取fstab(或mtab)。
mount -o remount,rw /dev/foo /dir

在此调用之后,所有旧的挂载选项都将被替换,并且fstab(或mtab)中的任意内容都将被忽略,除了loop=选项是由mount命令内部生成和维护的。

mount -o remount,rw /dir

调用之后,mount读取fstab并将这些选项与命令行(-o)中的选项合并。 如果在fstab中找不到安装点,则允许使用未指定的源重新安装。

  • ro:以只读方式挂载文件系统。
  • rw:以读写方式挂载文件系统。
  • sync:文件系统的所有 I/O 应该同步完成。 对于写入周期数量有限的介质(例如某些闪存驱动器),同步可能会缩短生命周期。
  • user:允许普通用户挂载文件系统。 挂载用户的名称将写入mtab文件(或在没有常规mtab的系统上的 /run/mount 中写入私有libmount文件),以便该同一用户可以再次卸载文件系统。 此选项包含选项noexecnosuidnodev(除非被后续选项覆盖,如选项行userexecdevsuid中所示)。
  • nouser:禁止普通用户挂载文件系统。 这是默认值。 它并不意味着任何其他选择。
  • users:即使任何其他普通用户安装了文件系统,也允许任何用户安装和卸载文件系统。 此选项包含选项noexecnosuidnodev(除非被后续选项覆盖,如选项行usersexecdevsuid中所示)。
  • X-*:所有带“ X-”前缀的选项均被解释为注释或用户空间应用程序特定的选项。 这些选项不存储在用户空间(例如mtab文件)中,也不发送给 mount.type 帮助程序或mount(2)系统调用。 建议的格式为“X-应用名称.参数”
  • x-*:与X-*选项相同,但永久存储在用户空间中。 这意味着这些选项也可用于卸载或其他操作。 请注意,在用户空间中维护安装选项非常棘手,因为必须使用基于libmount的工具,并且不能保证这些选项将始终可用(例如,在移动安装操作之后或在非共享名称空间中)。
    请注意,在util-linux v2.30之前,x- 选项尚未由libmount维护并存储在用户空间中(功能与现在的X- 相同),但是由于用例数量的增加(在initrd中) ,systemd等)功能进行了扩展,以保持现有的fstab配置可用而无需进行更改。
  • X-mount.mkdir:允许创建目标目录(挂载点)。 可选参数模式以八进制表示法指定用于mkdir(2)的文件系统访问模式。 默认模式是0755。仅root用户支持此功能。 该选项也作为x-mount.mkdir支持,自v2.30开始,不再对mount.mkdir使用此符号。

注:还有一些特殊文件系统中有大量的独特用法,这里就不过多解释了。详情查看 mount(8)。

回环设备

另一种可能的类型是通过回路设备。 例如,命令:

mount /tmp/disk.img /mnt -t vfat -o loop=/dev/loop3

会将回环设备 /dev/loop3 设置为与文件 /tmp/disk.img 对应,然后将该设备安装在 /mnt上。
如果没有提到显式的循环设备(但是只给出了一个选项‘-o loop’),那么mount将尝试查找一些未使用的循环设备并使用它,例如:

mount /tmp/disk.img /mnt -o loop

如果未指定文件系统类型或libblkid已知文件系统,那么mount命令会从常规文件自动创建循环设备,例如:

mount /tmp/disk.img /mnt
mount -t ext4 /tmp/disk.img /mnt

这种类型的安装知道三个选项,即循环(loop),偏移量(offset)和大小限制(sizelimit),它们实际上是lostup(8)的选项。 (除了特定于文件系统类型的那些选项之外,还可以使用这些选项。)
由于支持Linux 2.6.25循环设备的自动销毁,这意味着umount将释放与mount分配的任何循环设备,而与 /etc/mtab 无关。
您也可以使用lostup -d或umount -d手动释放循环设备。
因为util-linux v2.29 mount命令重新使用了循环设备,而不是初始化一个新设备,如果对于具有相同偏移量和大小限制的某些循环设备已经使用了相同的备份文件。 为避免文件系统损坏,这是必需的。

退出码

mount有以下返回代码(比特可以被赋值):

  • 0:成功
  • 1:调用或权限不正确
  • 2:系统错误(内存不足,不能fork,没有更多的循环设备)
  • 4:内部mount错误
  • 8:用户中断
  • 16:编写或锁定 /etc/mtab 时出现问题
  • 32:挂载失败
  • 64:部分挂载成功
    命令mount -a返回0(全部成功),32(全部失败)或64(某些失败,有些成功)。

扩展挂载帮助程序

外部挂载帮助程序的语法是:

sbin/mount.suffix spec dir [-sfnv] [-o options] [-t type.subtype]

后缀是文件系统类型,而-sfnvo选项的含义与普通安装选项的含义相同。 -t选项用于支持子类型的文件系统(例如/sbin/mount.fuse -t fuse.sshfs)。
该命令挂载不会将挂载选项unbindable,runbindable,private,rprivate,slave,rslave,shared,rshared,auto,noauto,comment,x-*,loop,offset和sizelimit传递给mount。 所有其他选项在逗号分隔的列表中用作-o选项的参数。

文件

  • /etc/fstab:文件系统表格
  • /etc/mtab:已安装的文件系统表
  • /etc/mtab~:锁文件
  • /etc/mtab.tmp:临时文件(一般为旧版的mtab文件)
  • /etc/filesystems:尝试的文件系统类型列表

环境变量

  • LIBMOUNT_FSTAB:覆盖fstab文件的默认位置(suid忽略)
  • LIBMOUNT_MTAB:覆盖mtab文件的默认位置(对于suid忽略)
  • LIBMOUNT_DEBUG=all:启用libmount调试输出
  • LIBBLKID_DEBUG=all:启用libblkid调试输出
  • LOOPDEV_DEBUG=all:启用环路设备设置调试输出

本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【48V5FOPT】获取授权信息。

最后修改:2020 年 04 月 23 日 04 : 11 PM
如果觉得我的文章对你有用,请随意赞赏