搜索

19.2. 挂载文件系统

download PDF
要附加某个文件系统,请使用以下格式的 mount 命令:
$ mount [option] device directory
该设备 可通过以下方法识别:
  • 块设备 的完整路径:例如 /dev/sda3
  • 通用唯一标识符 (UUID):例如 UUID=34795a28-ca6d-4fd8-a347-73671d0c19cb
  • 卷标签 :例如 LABEL=home
请注意,尽管挂载了文件系统,但无法访问 directory 中的原始内容。
重要:确保目录没有被使用
Linux 不阻止用户将文件系统挂载到已附加到其上的目录。要确定特定目录是否充当挂载点,请使用目录作为其参数运行 findmnt 工具,并验证退出代码:
findmnt directory; echo $?
如果没有将文件系统附加到目录,则给定命令会返回 1
当您运行不带所有所需信息的 mount 命令时,如果没有设备名称、目标目录或文件系统类型,挂载 会读取 /etc/fstab 文件的内容,以检查是否列出了给定的文件系统。/etc/fstab 文件包含设备名称列表、所选文件系统要挂载的目录,以及文件系统类型和挂载选项。因此,当挂载在 /etc/fstab 中指定的文件系统时,您可以选择以下选项之一:
mount [option] directory
mount [option] device
请注意,除非以 root 用户身份运行命令,否则挂载文件系统需要权限(请参阅 第 19.2.2 节 “指定挂载选项”)。
注: 确定 Particular 设备的 UUID 和标签
要确定 UUID 和-如果设备使用特定设备的标签,请使用以下格式的 blkid 命令:
blkid device
例如:要显示 /dev/sda3 的信息:
# blkid /dev/sda3
/dev/sda3: LABEL="home" UUID="34795a28-ca6d-4fd8-a347-73671d0c19cb" TYPE="ext3"

19.2.1. 指定文件系统类型

在大多数情况下,mount 会自动检测文件系统。但是,有一些某些文件系统,如 NFS (网络文件系统)或 CIFS (通用互联网文件系统),它们不能被识别,需要手动指定。要指定文件系统类型,请使用以下格式的 mount 命令:
$ mount -t type device directory
表 19.1 “通用文件系统类型” 提供可与 mount 命令一起使用的常用文件系统类型列表。有关所有可用文件系统类型的完整列表,请参阅 “手册页文档”一节
表 19.1. 通用文件系统类型
Type 描述
ext2 ext2 文件系统。
ext3 ext3 文件系统。
ext4 ext4 文件系统。
btrfs btrfs 文件系统。
xfs xfs 文件系统。
iso9660 ISO 9660 文件系统。它通常由光学介质(通常为 CD)使用。
nfs NFS 文件系统。它通常用于通过网络访问文件。
nfs4 NFSv4 文件系统。它通常用于通过网络访问文件。
udf UDF 文件系统。它通常由光学介质(通常为 DVD)使用。
vfat FAT 文件系统。它通常用于运行 Windows 操作系统的机器,以及某些数字媒体,如 USB 闪存驱动器或软盘。
有关示例用法,请查看 例 19.2 “挂载 USB 闪存驱动器”

例 19.2. 挂载 USB 闪存驱动器

较旧的 USB 闪存驱动器通常使用 FAT 文件系统。假设此类驱动器使用 /dev/sdc1 设备,并且 /media/flashdisk/ 目录存在,请以 root 用户身份在 shell 提示符后输入以下内容来将其挂载到此目录:
~]# mount -t vfat /dev/sdc1 /media/flashdisk

19.2.2. 指定挂载选项

要指定附加挂载选项,请使用以下格式的命令:
mount -o options device directory
在提供多个选项时,不要在逗号后插入空格,或者 mount 会将以下空格的值错误地解析为额外的参数。
表 19.2 “常用挂载选项” 提供了常用挂载选项的列表.有关所有可用选项的完整列表,请参阅 “手册页文档”一节 中的相关手册页。
表 19.2. 常用挂载选项
选项 描述
async 允许文件系统上的异步输入/输出操作。
auto 允许使用 mount -a 命令自动挂载文件系统。
默认值 async,auto,dev,exec,nouser,rw,suid 提供别名。
exec 允许在特定文件系统中执行二进制文件。
loop 将镜像挂载为 loop 设备。
noauto 默认行为不允许使用 mount -a 命令自动挂载文件系统。
noexec 不允许在特定文件系统中执行二进制文件。
nouser 不允许普通用户(即 root以外的用户)挂载和卸载文件系统。
remount 如果已经挂载文件系统,则会重新挂载文件系统。
ro 仅挂载文件系统以读取。
rw 挂载文件系统以进行读和写操作。
user 允许普通用户(即 root以外的用户)挂载和卸载文件系统。
有关示例用法,请查看 例 19.3 “挂载 ISO 镜像”

例 19.3. 挂载 ISO 镜像

可以使用 loop 设备挂载 ISO 镜像(一般而言是磁盘镜像)。假设 Fedora 14 安装磁盘的 ISO 镜像存在于当前工作目录中,并且 /media/cdrom/ 目录存在,请运行以下命令将镜像挂载到这个目录中:
# mount -o ro,loop Fedora-14-x86_64-Live-Desktop.iso /media/cdrom
请注意,ISO 9660 设计为只读文件系统。

19.2.3. 共享挂载

有时,某些系统管理任务需要从目录树中的多个位置(例如,准备 chroot 环境时)访问同一文件系统。这可以实现,而且 Linux 允许您根据需要将同一文件系统挂载到多个目录。另外,mount 命令实现了 --bind 选项,它提供复制某些挂载的方法。其用法如下:
$ mount --bind old_directory new_directory
虽然此命令允许用户从两个位置访问文件系统,但它不适用于原始目录中挂载的文件系统。要包括这些挂载,请使用以下命令:
$ mount --rbind old_directory new_directory
此外,为了提供尽可能多的灵活性,Red Hat Enterprise Linux 7 实现了称为 共享子树 的功能。此功能允许使用以下四种挂载类型:
共享挂载
共享挂载允许创建给定挂载点的精确副本。当挂载点标记为共享挂载时,原始挂载点中的任何挂载都会反映在其中,反之亦然。要将挂载点类型改为共享挂载,请在 shell 提示符下输入以下内容:
$ mount --make-shared mount_point
或者,要更改所选挂载点的挂载类型,以及其下的所有挂载点:
$ mount --make-rshared mount_point
有关示例用法,请查看 例 19.4 “创建共享挂载点”

例 19.4. 创建共享挂载点

其他文件系统通常挂载在两个位置:可移动介质的 /media/ 目录,以及用于临时挂载的文件系统的 /mnt/ 目录。通过使用共享挂载,您可以使这两个目录共享相同的内容。要做到这一点,以 root 用户身份将 /media/ 目录标记为 shared :
# mount --bind /media /media
# mount --make-shared /media
使用以下命令在 /mnt/ 中创建副本:
# mount --bind /media /mnt
现在,可以验证 /media/ 中的挂载是否也出现在 /mnt/ 中。例如,如果 CD-ROM 驱动器包含非空介质,并且 /media/cdrom/ 目录存在,请运行以下命令:
# mount /dev/cdrom /media/cdrom
# ls /media/cdrom
EFI  GPL  isolinux  LiveOS
# ls /mnt/cdrom
EFI  GPL  isolinux  LiveOS
同样,可以验证 /mnt/ 目录中挂载的任何文件系统是否反映在 /media/ 中。例如,如果插入了使用 /dev/sdc1 设备的非空 USB 闪存驱动器,并且存在 /mnt/flashdisk/ 目录,请输入:
# # mount /dev/sdc1 /mnt/flashdisk
# ls /media/flashdisk
en-US  publican.cfg
# ls /mnt/flashdisk
en-US  publican.cfg
从属挂载
从属挂载允许创建给定挂载点的有限副本。当挂载点标记为从属挂载时,原始挂载点中的任何挂载都会反映在其中,但从属挂载中的挂载不会反映在其原始挂载点中。要将挂载点类型改为从属挂载,在 shell 提示符下输入以下内容:
mount --make-slave mount_point
或者,要更改所选挂载点的挂载类型,以及其下的所有挂载点,请输入:
mount --make-rslave mount_point
有关示例用法,请查看 例 19.5 “创建从属挂载点”

例 19.5. 创建从属挂载点

本例演示了如何使 /media/ 目录的内容也出现在 /mnt/ 中,但 /mnt/ 目录中的任何挂载都不会反映在 /media/ 目录中。以 root 用户身份,首先将 /media/ 目录标记为共享:
~]# mount --bind /media /media
~]# mount --make-shared /media
然后,在 /mnt/ 中创建副本,但将其标记为"slave":
~]# mount --bind /media /mnt
~]# mount --make-slave /mnt
现在,验证 /media/ 中的挂载是否也出现在 /mnt/ 中。例如,如果 CD-ROM 驱动器包含非空介质,并且 /media/cdrom/ 目录存在,请运行以下命令:
~]# mount /dev/cdrom /media/cdrom
~]# ls /media/cdrom
EFI  GPL  isolinux  LiveOS
~]# ls /mnt/cdrom
EFI  GPL  isolinux  LiveOS
同时还要验证 /mnt/ 目录中挂载的文件系统没有反映在 /media/ 中。例如,如果插入了使用 /dev/sdc1 设备的非空 USB 闪存驱动器,并且存在 /mnt/flashdisk/ 目录,请输入:
~]# mount /dev/sdc1 /mnt/flashdisk
~]# ls /media/flashdisk
~]# ls /mnt/flashdisk
en-US  publican.cfg
私有挂载
私有挂载是默认挂载类型,与共享或从属挂载不同,它不接收或转发任何传播事件。要将挂载点显式标记为私有挂载,在 shell 提示符下输入以下内容:
mount --make-private mount_point
另外,也可以更改所选挂载点的挂载类型,以及其下的所有挂载点:
mount --make-rprivate mount_point
有关示例用法,请查看 例 19.6 “创建私有挂载点”

例 19.6. 创建私有挂载点

考虑 例 19.4 “创建共享挂载点” 中的场景,假设之前已以 root 用户身份使用以下命令创建了共享挂载点:
~]# mount --bind /media /media
~]# mount --make-shared /media
~]# mount --bind /media /mnt
要将 /mnt/ 目录标记为私有,请输入:
~]# mount --make-private /mnt
现在,可以验证 /media/ 中的挂载没有出现在 /mnt/ 中。例如,如果 CD-ROM 驱动器包含非空介质,并且 /media/cdrom/ 目录存在,请运行以下命令:
~]# mount /dev/cdrom /media/cdrom
~]# ls /media/cdrom
EFI  GPL  isolinux  LiveOS
~]# ls /mnt/cdrom
~]#
也可以验证 /mnt/ 目录中挂载的文件系统没有反映在 /media/ 中。例如,如果插入了使用 /dev/sdc1 设备的非空 USB 闪存驱动器,并且存在 /mnt/flashdisk/ 目录,请输入:
~]# mount /dev/sdc1 /mnt/flashdisk
~]# ls /media/flashdisk
~]# ls /mnt/flashdisk
en-US  publican.cfg
不可绑定挂载
为了防止指定挂载点重复,需要使用不可绑定挂载。要将挂载点类型更改为不可绑定挂载,在 shell 提示符下输入以下内容:
mount --make-unbindable mount_point
另外,也可以更改所选挂载点的挂载类型,以及其下的所有挂载点:
mount --make-runbindable mount_point
有关示例用法,请查看 例 19.7 “创建不可绑定挂载点”

例 19.7. 创建不可绑定挂载点

要防止 /media/ 目录被共享,以 root 用户身份:
# mount --bind /media /media
# mount --make-unbindable /media
这样,任何后续尝试重复此挂载都会失败,并显示错误:
# mount --bind /media /mnt
mount: wrong fs type, bad option, bad superblock on /media,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail  or so

19.2.4. 移动挂载点

要更改挂载文件系统的目录,请使用以下命令:
# mount --move old_directory new_directory
有关示例用法,请查看 例 19.8 “移动现有的 NFS 挂载点”

例 19.8. 移动现有的 NFS 挂载点

NFS 存储包含用户目录,并且已挂载到 /mnt/userdirs/ 中。以 root 用户身份,使用以下命令将此挂载点移到 /home
# mount --move /mnt/userdirs /home
要验证挂载点是否已移动,请列出两个目录中的内容:
# ls /mnt/userdirs
# ls /home
jill  joe

19.2.5. 为 root设置只读权限

有时,您需要使用只读权限挂载 root 文件系统。示例用例包括在系统意外断电后增强安全性或确保数据完整性。

19.2.5.1. 将 root 配置为在引导时使用只读权限挂载

  1. /etc/sysconfig/readonly-root 文件中,将 READONLY 更改为 yes
    # Set to 'yes' to mount the file systems as read-only.
    READONLY=yes
    [output truncated]
  2. /etc/fstab 文件中的 root 条目(/)中将默认更改为 ro
    /dev/mapper/luks-c376919e... / ext4 ro,x-systemd.device-timeout=0 1 1
  3. ro 添加到 /etc/default/grub 文件中的 GRUB_CMDLINE_LINUX 指令中,并确保它不包含 rw
    GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ro"
  4. 重新创建 GRUB2 配置文件:
    # grub2-mkconfig -o /boot/grub2/grub.cfg
  5. 如果您需要在 tmpfs 文件系统中添加需要挂载具有写权限的文件和目录,请在 /etc/rwtab.d/ 目录中创建一个文本文件,并将配置放在其中。例如,要挂载具有写入权限的 /etc/example/file,请将此行添加到 /etc/rwtab.d/示例 文件中:
    files /etc/example/file
    重要
    tmpfs 中的文件和目录所做的更改不会在启动后保留。
    有关此步骤的详情,请查看 第 19.2.5.3 节 “保留写权限的文件和目录”
  6. 重启系统。

19.2.5.2. 重新挂载 root Instantly

如果 root (/)在系统引导时以只读权限挂载,您可以使用写入权限重新挂载它:
# mount -o remount,rw /
/ 错误地挂载了只读权限时,这特别有用。
要再次以只读权限重新挂载 /,请运行:
# mount -o remount,ro /
注意
此命令使用只读权限挂载 整个 /。更好的方法是将特定文件和目录的写入权限复制到 RAM 中,如 第 19.2.5.1 节 “将 root 配置为在引导时使用只读权限挂载” 所述。

19.2.5.3. 保留写权限的文件和目录

要使系统正常工作,一些文件和目录需要保留写权限。使用只读模式的 root 时,它们将挂载到 tmpfs 临时文件系统的 RAM 中。这些文件和目录的默认集合是从 /etc/rwtab 文件中读取的,该文件包含:
dirs	/var/cache/man
dirs	/var/gdm
[output truncated]
empty	/tmp
empty	/var/cache/foomatic
[output truncated]
files	/etc/adjtime
files	/etc/ntp.conf
[output truncated]
/etc/rwtab 文件中的条目遵循以下格式:
how the file or directory is copied to tmpfs       	path to the file or directory
文件或目录可以通过以下三种方式复制到 tmpfs
  • 路径 :空路径复制到 tmpfs。示例: 空 /tmp
  • 目录路径 :目录树被复制到 tmpfs,空。示例: dirs /var/run
  • 文件路径 :将文件或目录树复制到 tmpfs。示例: 文件 /etc/resolv.conf
在向 /etc/rwtab.d/ 添加自定义路径时,也适用相同的格式。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.