今天在技术群里,有个小伙子吐槽说跟他在对接的一个同事在删 linux 文件,其中有个文件就是/etc/fstab,着急问我们怎么恢复?我打趣地回了句,事已至此,先重启看看吧。

那今天我们来深入了解一下这个文件是干嘛用的

1 /etc/fstab 简介

/etc/fstab 是 Linux 系统启动时自动挂载文件系统的配置表。它的全称是 File Systems Table,系统在启动时会参考它来自动执行 mount 操作。

在生产环境中,fstab 影响着:

  • 系统能否成功启动(挂载失败会进入 emergency 模式)

  • 分区是否以正确方式挂载(只读?缓存策略?用户挂载?)

  • 是否自动挂载 swap、RAID、NFS 等资源

  • 性能和安全策略的预设(如 noatimenosuid

2 /etc/fstab内容详解

格式如下,每行一个挂载配置,共六个字段:

<设备>    <挂载点>     <文件系统类型>  <挂载选项>     <dump> <fsck顺序>

第1列:设备

可以是:

  • /dev/sdX:传统设备名,不稳定【容易留坑】

  • UUID=xxxx:推荐,唯一标识设备【推荐使用】

  • LABEL=label:标签,更易识别【我很少用】

  • 网络路径:如 10.0.0.110:/data/nfs/share【NFS挂载常用】

查 UUID:

blkid

更改标签:

e2label /dev/sdb1 DATA_DISK

第2列:挂载点

挂载点必须存在,没有的话需要提前创建目录,否则系统启动会失败,这个根据需求自定义就行。

创建目录:

# 多级目录就加`-p`,表示递归创建
mkdir /data

第3列:文件系统类型

常见类型:

类型

场景

ext3/ext4

通用 Linux 文件系统

xfs

大量数据写入、高性能

btrfs

支持快照、压缩等

nfs

网络挂载

swap

虚拟内存分区

tmpfs

内存文件系统

使用 lsblk -f 查看类型。

第4列 挂载选项

这是重中之重,常见选项如下:

选项

含义

defaults

rw, suid, dev, exec, auto, nouser, async

noatime

访问文件时不更新 atime,提升性能

nodiratime

同上,但仅目录

ro/ rw

只读 / 读写挂载【默认读写挂载】

nosuid

禁用 SUID 程序,增强安全性

nodev

禁用设备文件

noexec

禁止执行文件

relatime

折中方案,默认选项

discard

启用 SSD 的 TRIM 操作

user/ users

允许普通用户挂载

我大多数情况只用defaults选项。

性能建议

对于大多数数据盘,推荐:

defaults,noatime,nodiratime

对于 SSD:

defaults,noatime,discard

第5列:dump

是否启用 dump 命令进行备份,大多数情况设为 0,1就是启用。

第6列:fsck 顺序

控制开机时的文件系统检查顺序:

  • 0:不检查

  • 1:通常是根分区 /

  • 2:其它分区(如 /home/data

切记不要多个设置为 1,否则引发 fsck 混乱!

3 注意事项

配置完 fstab 后,永远不要直接 reboot

先执行:

mount -a

它会按 /etc/fstab 模拟一次挂载,能否成功挂载全凭这条命令的反馈。如果这里挂载有问题,就会出现我开始放那个截图一样,会让你进入紧急模式。

4 系统挂载失败的应急方案

要是上面一个步骤你修改完/etc/fstab,没有检查并且配置错误,还reboot了服务器,大概率进去下面的界面

怎么办,也很简单,直接输入密码后,将/etc/fstab文件配置修改正确就行,也是执行mount -a没问题后重启。

5 运维实战用法

5.1 自动挂载 NFS 文件系统

192.168.1.100:/data  /mnt/nfs  nfs  defaults,_netdev  0  0
  • _netdev 确保网络就绪后挂载,防止开机挂载失败

5.2 使用UUID挂载

比如你新增一个/dev/sdb,你需要先找出/dev/sdb的UUID,然后第一列就使用UUID,不要使用设备名称

blkid /dev/sdb

5.3 tmpfs 内存盘

这个主要用于加速临时目录读写,不过我比较少用

tmpfs  /mnt/tmpfs  tmpfs  defaults,size=512M  0  0

适用于缓存、构建临时文件存储等。

5.4 挂载 ISO 镜像

# 第一列iso路径根据实际来填写。
/mnt/image.iso  /mnt/iso  iso9660  loop  0  0

再次强调,配置完要记得mount -a检查一下。