19.2. 挂载文件系统
要附加某个文件系统,请使用以下格式的 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
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 “常用挂载选项” 提供了常用挂载选项的列表.有关所有可用选项的完整列表,请参阅 “手册页文档”一节 中的相关手册页。
选项 | 描述 |
---|---|
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 “创建共享挂载点”。 - 从属挂载
- 从属挂载允许创建给定挂载点的有限副本。当挂载点标记为从属挂载时,原始挂载点中的任何挂载都会反映在其中,但从属挂载中的挂载不会反映在其原始挂载点中。要将挂载点类型改为从属挂载,在 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
配置为在引导时使用只读权限挂载
- 在
/etc/sysconfig/readonly-root
文件中,将READONLY
更改为yes
:# Set to 'yes' to mount the file systems as read-only. READONLY=yes [output truncated]
- 在
/etc/fstab
文件中的 root 条目(/
)中将默认更改为ro
:/dev/mapper/luks-c376919e... / ext4 ro,x-systemd.device-timeout=0 1 1
- 将
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"
- 重新创建 GRUB2 配置文件:
#
grub2-mkconfig -o /boot/grub2/grub.cfg - 如果您需要在
tmpfs
文件系统中添加需要挂载具有写权限的文件和目录,请在/etc/rwtab.d/
目录中创建一个文本文件,并将配置放在其中。例如,要挂载具有写入权限的/etc/example/file
,请将此行添加到/etc/rwtab.d/示例
文件中:files /etc/example/file
重要对tmpfs
中的文件和目录所做的更改不会在启动后保留。有关此步骤的详情,请查看 第 19.2.5.3 节 “保留写权限的文件和目录”。 - 重启系统。
19.2.5.2. 重新挂载 root
Instantly
如果 root (
/
)在系统引导时以只读权限挂载,您可以使用写入权限重新挂载它:
#
mount -o remount,rw /
当
/
错误地挂载了只读权限时,这特别有用。
要再次以只读权限重新挂载
/
,请运行:
#
mount -o remount,ro /
注意
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/
添加自定义路径时,也适用相同的格式。