79·存储管理进阶

/etc/fstab 持久化挂载

fstabauto-mount

第 79 课:/etc/fstab 持久化挂载

所属模块: 存储管理
难度: Intermediate
标签: fstab, auto-mount
上一课: 创建文件系统与挂载
下一课: LVM 逻辑卷管理


学习目标

完成本课后,你将能够:

  1. 理解 /etc/fstab 配置文件的作用和重要性。
  2. 掌握 /etc/fstab 文件中每一列字段的含义和正确配置方法。
  3. 为本地磁盘分区、NFS 网络共享等设备配置开机自动挂载。
  4. 使用 mount -a 命令安全地测试和应用 fstab 配置。
  5. 能够诊断和修复简单的 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
  1. 设备 (Device):要挂载的存储设备或远程文件系统的标识。
    • 最佳实践: 使用 UUID。它是分区全球唯一标识符,不受设备名(如 /dev/sda1)变更影响。可以使用 blkid 命令查看 UUID。
    • 其他选项:设备路径 (/dev/sdb1)、LABEL (LABEL=mydata) 或网络路径 (server:/share)。
  2. 挂载点 (Mount Point):文件系统挂载到目录树中的位置。必须是一个已存在的目录。
  3. 文件系统类型 (Type):如 ext4, xfs, nfs, cifs 等。必须与设备实际格式匹配。
  4. 选项 (Options):以逗号分隔的挂载选项。defaults 是一个常用组合,包含 rw, suid, dev, exec, auto, nouser, async。我们可以通过添加其他选项来定制行为。
  5. 转储频率 (Dump):用于 dump 备份工具。0 表示不备份,1 表示每天备份。通常设为 0
  6. 自检顺序 (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,以防止该目录下的文件被执行,提高安全性。

  1. 备份 /etc/fstab
  2. 找到对应的行,修改选项字段。
  3. 使用 sudo mount -o remount /backup 来重新挂载以测试新选项是否生效(无需重启)。 预期输出mount | grep backup 命令输出中应显示 noexec 选项。

练习 2:中等练习 - 配置 CIFS/SMB 自动挂载

要求:你的公司有一个 Windows 文件服务器 //10.0.0.5/finance,你需要将其自动挂载到 Linux 系统的 /mnt/finance 目录。需要用户名 user 和密码 Pass1234

  1. 安装所需软件包 (cifs-utils)。
  2. 创建挂载点。
  3. 编写正确的 fstab 条目。注意:密码不应明文写在 fstab 中,建议使用 credentials 文件。 提示:CIFS 文件系统的选项示例为 username=user,password=Pass1234,_netdev。更安全的方式是创建 /root/.smbcredentials 文件并设置权限为600。 预期输出:系统重启后,/mnt/finance 目录下能看到服务器的文件。

练习 3:困难练习 - 故障排除

要求:一位同事修改了 /etc/fstab 文件后,服务器重启失败,进入紧急模式。错误信息提示与一个名为 /data 的挂载点有关。请你进行故障排除。

  1. 登录到紧急模式的 shell。
  2. 检查并编辑 /etc/fstab 文件。
  3. 你发现一行配置为:/dev/sdc1 /data ext4 defaults 0 1
  4. 使用 blkid 检查 /dev/sdc1,发现其实际文件系统是 xfs,而非 ext4
  5. 请修正此错误配置。 预期输出:修正后,执行 mount -a 不报错,然后可以正常执行 systemctl defaultexit 重启进入正常系统。

常见错误

  1. 格式错误fstab 文件对格式敏感,列与列之间必须用空格或制表符分隔,而不是逗号或其他符号。
  2. 挂载点不存在fstab 中指定的挂载点目录必须在系统中提前创建。否则,即使配置正确,mount -a 也会失败。
  3. 设备标识不准确
    • 使用 /dev/sdX 设备名可能在重启后因磁盘插入顺序改变而变化,导致挂载错误设备。强烈建议使用 UUID 或 LABEL。
    • UUID 输入错误。
  4. 文件系统类型不匹配:指定的类型与设备实际格式不符(如练习3所示)。
  5. 危险的选项
    • 在关键的根文件系统 / 上使用 nofail 选项要非常谨慎。
    • 对于外部设备(如USB硬盘),不加 _netdevnofail 可能导致系统因等待设备而启动超时。
  6. 忘记测试绝对不要直接编辑 /etc/fstab 后就重启。必须使用 sudo mount -a 进行测试,确保配置无误。

小结

  • /etc/fstab 是控制系统启动时自动挂载文件系统的核心配置文件。
  • 其配置包含 六列:设备、挂载点、文件系统类型、挂载选项、转储频率和自检顺序。
  • 最佳实践:始终使用 UUID 标识本地设备;在编辑前备份原文件。
  • 关键步骤:修改后,务必使用 sudo mount -a 命令来测试配置,这是避免“启动灾难”的安全网。
  • 对于网络文件系统(NFS, CIFS),记得使用 _netdev 选项来确保网络就绪后再挂载。
  • 遇到启动问题时,可以进入紧急模式检查并修复 /etc/fstab 文件。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「LVM 逻辑卷管理」 以巩固所学知识。