第 79 课:/etc/fstab 持久化挂载
所属模块: 存储管理
难度: Intermediate
标签: fstab, auto-mount
上一课: 创建文件系统与挂载
下一课: LVM 逻辑卷管理
学习目标
完成本课后,你将能够:
- 理解
/etc/fstab配置文件的作用和重要性。 - 掌握
/etc/fstab文件中每一列字段的含义和正确配置方法。 - 为本地磁盘分区、NFS 网络共享等设备配置开机自动挂载。
- 使用
mount -a命令安全地测试和应用fstab配置。 - 能够诊断和修复简单的
fstab配置错误。
核心概念
什么是 /etc/fstab?
在前面的课程中,我们学会了使用 mount 命令手动挂载文件系统。然而,每次重启后,这些挂载点都会消失。为了实现设备的持久化挂载(即开机或需要时自动挂载),我们需要编辑一个关键的系统配置文件:/etc/fstab。
/etc/fstab(File System Table)是 Linux 系统中记录静态文件系统信息的核心文件。内核在启动过程中,系统初始化脚本(如 systemd)会读取这个文件,并根据其中的配置自动挂载所列的文件系统。
解析 /etc/fstab 文件的结构
/etc/fstab 文件是一个以空格或制表符分隔的纯文本文件。每一行定义一个文件系统,通常包含 6 个字段:
<设备> <挂载点> <文件系统类型> <选项> <转储频率> <自检顺序>
让我们用一个实际例子来详细说明每一列:
示例行:
UUID=6b4a3f3e-8f2a-4b0c-9d1e-2a5c8d7f6b0e /data ext4 defaults 0 2
- 设备 (Device):要挂载的存储设备或远程文件系统的标识。
- 最佳实践: 使用
UUID。它是分区全球唯一标识符,不受设备名(如/dev/sda1)变更影响。可以使用blkid命令查看 UUID。 - 其他选项:设备路径 (
/dev/sdb1)、LABEL (LABEL=mydata) 或网络路径 (server:/share)。
- 最佳实践: 使用
- 挂载点 (Mount Point):文件系统挂载到目录树中的位置。必须是一个已存在的目录。
- 文件系统类型 (Type):如
ext4,xfs,nfs,cifs等。必须与设备实际格式匹配。 - 选项 (Options):以逗号分隔的挂载选项。
defaults是一个常用组合,包含rw, suid, dev, exec, auto, nouser, async。我们可以通过添加其他选项来定制行为。 - 转储频率 (Dump):用于
dump备份工具。0表示不备份,1表示每天备份。通常设为0。 - 自检顺序 (Pass):
fsck文件系统检查工具在启动时的检查顺序。0表示不检查。1表示根文件系统/需要第一个检查。2表示其他所有需要检查的文件系统(在根文件系统之后检查)。
代码示例
1. 查看当前系统的 fstab 文件
# 查看当前的 fstab 配置
cat /etc/fstab
# 输出示例(可能与你系统的不同):
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=6b4a3f3e-8f2a-4b0c-9d1e-2a5c8d7f6b0e / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=A1B2-C3D4 /boot/efi vfat umask=0077 0 1
# swap was on /dev/sda3 during installation
UUID=9f8e7d6c-5b4a-3c2d-1e0f-9a8b7c6d5e4f none swap sw 0 0
2. 为本地新分区添加自动挂载
假设我们有一个新分区 /dev/sdb1,已经格式化为 ext4 文件系统,我们希望将其自动挂载到 /mnt/project 目录。
第一步:准备挂载点并获取设备信息
# 创建挂载点目录
sudo mkdir -p /mnt/project
# 查找新分区的UUID (比使用 /dev/sdb1 更可靠)
sudo blkid /dev/sdb1
# 输出示例: /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
第二步:备份并编辑 /etc/fstab
# 务必先备份!这是一个关键系统文件。
sudo cp /etc/fstab /etc/fstab.bak
# 使用你喜欢的编辑器编辑 fstab (如 nano, vi)
sudo nano /etc/fstab
第三步:在文件末尾添加新行
# 在 /etc/fstab 文件最后添加以下一行:
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/project ext4 defaults 0 2
第四步:安全测试并应用配置
# 使用 mount -a 命令来测试 fstab 配置,它会挂载所有在 fstab 中配置但未挂载的文件系统。
# 这是避免重启后系统无法启动的关键步骤!
sudo mount -a
# 检查挂载是否成功
df -h | grep project
# 预期输出: /dev/sdb1 20G 45M 19G 1% /mnt/project
注意: 如果 mount -a 命令没有报错,那么下次系统重启时,该分区就会自动挂载到 /mnt/project。
3. 配置 NFS 网络文件系统自动挂载
假设我们需要在启动时自动挂载 NFS 服务器 192.168.1.100 上的 /shared 目录到客户端的 /nfs_share 目录。
# 1. 确保客户端安装了NFS工具
sudo apt update && sudo apt install nfs-common # Debian/Ubuntu
# 或
sudo yum install nfs-utils # CentOS/RHEL
# 2. 创建本地挂载点
sudo mkdir -p /nfs_share
# 3. 在 /etc/fstab 中添加以下行:
# 192.168.1.100:/shared /nfs_share nfs defaults,_netdev 0 0
_netdev选项非常重要,它告诉系统此设备需要网络,在网络服务启动后再尝试挂载,避免因网络未就绪导致启动挂起。
实践练习
练习 1:基础练习 - 修改现有分区的挂载选项
要求:系统中有一个已挂载在 /backup 的分区 (UUID 为 5678-abcd-1234-efgh)。请修改其 /etc/fstab 配置,将挂载选项从 defaults 改为 defaults,noexec,以防止该目录下的文件被执行,提高安全性。
- 备份
/etc/fstab。 - 找到对应的行,修改选项字段。
- 使用
sudo mount -o remount /backup来重新挂载以测试新选项是否生效(无需重启)。 预期输出:mount | grep backup命令输出中应显示noexec选项。
练习 2:中等练习 - 配置 CIFS/SMB 自动挂载
要求:你的公司有一个 Windows 文件服务器 //10.0.0.5/finance,你需要将其自动挂载到 Linux 系统的 /mnt/finance 目录。需要用户名 user 和密码 Pass1234。
- 安装所需软件包 (
cifs-utils)。 - 创建挂载点。
- 编写正确的
fstab条目。注意:密码不应明文写在 fstab 中,建议使用credentials文件。 提示:CIFS 文件系统的选项示例为username=user,password=Pass1234,_netdev。更安全的方式是创建/root/.smbcredentials文件并设置权限为600。 预期输出:系统重启后,/mnt/finance目录下能看到服务器的文件。
练习 3:困难练习 - 故障排除
要求:一位同事修改了 /etc/fstab 文件后,服务器重启失败,进入紧急模式。错误信息提示与一个名为 /data 的挂载点有关。请你进行故障排除。
- 登录到紧急模式的 shell。
- 检查并编辑
/etc/fstab文件。 - 你发现一行配置为:
/dev/sdc1 /data ext4 defaults 0 1。 - 使用
blkid检查/dev/sdc1,发现其实际文件系统是xfs,而非ext4。 - 请修正此错误配置。
预期输出:修正后,执行
mount -a不报错,然后可以正常执行systemctl default或exit重启进入正常系统。
常见错误
- 格式错误:
fstab文件对格式敏感,列与列之间必须用空格或制表符分隔,而不是逗号或其他符号。 - 挂载点不存在:
fstab中指定的挂载点目录必须在系统中提前创建。否则,即使配置正确,mount -a也会失败。 - 设备标识不准确:
- 使用
/dev/sdX设备名可能在重启后因磁盘插入顺序改变而变化,导致挂载错误设备。强烈建议使用 UUID 或 LABEL。 - UUID 输入错误。
- 使用
- 文件系统类型不匹配:指定的类型与设备实际格式不符(如练习3所示)。
- 危险的选项:
- 在关键的根文件系统
/上使用nofail选项要非常谨慎。 - 对于外部设备(如USB硬盘),不加
_netdev或nofail可能导致系统因等待设备而启动超时。
- 在关键的根文件系统
- 忘记测试:绝对不要直接编辑
/etc/fstab后就重启。必须使用sudo mount -a进行测试,确保配置无误。
小结
/etc/fstab是控制系统启动时自动挂载文件系统的核心配置文件。- 其配置包含 六列:设备、挂载点、文件系统类型、挂载选项、转储频率和自检顺序。
- 最佳实践:始终使用 UUID 标识本地设备;在编辑前备份原文件。
- 关键步骤:修改后,务必使用
sudo mount -a命令来测试配置,这是避免“启动灾难”的安全网。 - 对于网络文件系统(NFS, CIFS),记得使用
_netdev选项来确保网络就绪后再挂载。 - 遇到启动问题时,可以进入紧急模式检查并修复
/etc/fstab文件。