小易说IT 小易说IT

/etc/fstab 生产环境标准模板

前置重要提醒

  1. 修改前先备份:cp /etc/fstab /etc/fstab.$(date +%Y%m%d).bak

  2. 写完必须校验:mount -a,无报错才代表语法正常,避免开机卡死

  3. 优先使用 UUID,不要用 /dev/sdb1,磁盘顺序变化会炸

  4. 生产禁止随意使用 noatime、barrier=0 这类高危参数,下面区分【通用稳妥】【高性能】【特殊场景】

  5. 列顺序:UUID | 挂载点 | fs类型 | 挂载参数 | dump | fsck

获取 UUID 命令:

blkid
# 过滤只看分区UUID
blkid | grep PARTUUID

模板总说明

字段

说明

第 1 列

UUID(推荐)/ LABEL //dev/disk/by-path 物理路径(存储阵列环境可选)

第 2 列

挂载点,目录提前 mkdir -p 创建

第 3 列

文件系统:ext4 / xfs(生产两大主流)

第 4 列

挂载选项,逗号分隔,核心重点

第 5 列 dump

0 = 不 dump 备份;生产几乎全部写 0

第 6 列 fsck

/根分区 = 1;其他数据盘 = 2;不需要自检 = 0(xfs、网络盘、tmpfs 写 0)

✅ 规则:XFS 文件系统不支持 fsck,第六列必须是 0!

一、标准稳妥版(绝大多数业务服务器,推荐默认)

兼顾数据安全、稳定性,数据库、业务数据盘首选,不激进调参

# 根分区 ext4
UUID=ROOT-UUID-HERE        /               ext4    defaults,errors=remount-ro       0 1

# 独立 /boot 分区 ext4
UUID=BOOT-UUID-HERE        /boot           ext4    defaults,errors=remount-ro       0 2

# 数据盘 ext4(业务、日志、文件存储)
UUID=DATA-EXT4-UUID-HERE   /data           ext4    defaults,errors=remount-ro       0 2

# 数据盘 XFS(大数据、容器、对象存储,xfs不能fsck,第6列0)
UUID=DATA-XFS-UUID-HERE    /data/xfs       xfs     defaults                         0 0

# swap分区
UUID=SWAP-UUID-HERE        swap            swap    defaults                         0 0

参数解释:

  • defaults:rw,suid,dev,exec,auto,nouser,async

  • errors=remount-ro:ext4 检测到文件系统异常 → 自动重新只读挂载,防止进一步损坏(生产 ext4 必加)

二、高性能优化版(数据库、高 IO 业务,SSD/NVMe)

适合 MySQL / Redis / 消息队列、NVMe SSD,在数据安全可接受前提下优化 ⚠️ 注意:relatime 替代 atime;不要随便加 barrier=0(掉电丢数据风险,有 UPS+RAID 卡带电容才考虑)

# ext4 SSD 高性能
UUID=EXT4-SSD-UUID         /data/db        ext4    defaults,errors=remount-ro,relatime,commit=60  0 2

# XFS SSD 高性能(数据库常用)
UUID=XFS-SSD-UUID          /data/xfsdb     xfs     defaults,relatime,logbufs=8,logbsize=256k       0 0

参数说明:

  • relatime:仅文件内容修改时更新访问时间,替代默认 atime,减少 IO(通用安全,推荐)

  • commit=60:ext4 每 60 秒刷一次日志(默认 5 秒,降低刷盘压力;数据库业务建议保留 5,不要改大)

  • xfs logbufs=8,logbsize=256k:提升 xfs 日志吞吐,SSD 常用

❌ 不推荐直接上 noatime:审计场景会丢失访问时间日志;如果无审计需求可以替换 relatime。

三、容器 / 日志专用分区模板

隔离容器数据、日志,加安全限制,防止溢出、提权

# Docker数据盘 ext4
UUID=DOCKER-UUID           /var/lib/docker ext4    defaults,errors=remount-ro,relatime,noexec,nosuid,nodev 0 2

# 日志分区 /var/log
UUID=LOG-UUID              /var/log        ext4    defaults,errors=remount-ro,relatime,noexec,nosuid,nodev 0 2

安全参数:

  • noexec:分区内程序不能直接执行(日志、容器盘很适合)

  • nosuid:禁用 suid 权限位,防止提权

  • nodev:不识别该分区上的设备文件

四、网络文件系统模板(NFS,生产共享存储)

网络文件系统 fsck 无效,第 6 列固定 0,增加软挂载超时,避免系统卡死

# NFS v4 标准生产模板
10.0.0.10:/srv/share       /mnt/nfs        nfs4    defaults,soft,timeo=600,retrans=2,rsize=1048576,wsize=1048576 0 0

参数:

  • soft:软挂载,超时返回错误;hard 是硬挂载(服务断了进程会 hang 住,生产谨慎 hard)

  • timeo=600,retrans=2:超时重试控制

  • rsize/wsize:读写块大小,千兆 / 万兆网络优化

重要:NFS 服务端宕机时 hard 挂载会导致进程 D 状态卡死,业务服务器优先 soft

五、tmpfs 内存盘模板(缓存、临时文件)

# tmpfs /tmp 内存临时目录,限制大小
tmpfs                      /tmp            tmpfs   defaults,size=4G,mode=1777,noexec,nosuid,nodev 0 0
# 应用缓存内存盘
tmpfs                      /data/cache     tmpfs   defaults,size=8G,uid=1001,gid=1001             0 0
  • size:最大占用内存上限,不要超过物理内存 50%

  • mode=1777:和系统默认 /tmp 权限一致

六、LVM 逻辑卷(很多生产环境是 LVM)

LVM 同样用 UUID,和普通分区写法完全一致,blkid 一样可以拿到 LV 的 UUID:

UUID=LVM-DATA-UUID         /data/lv        ext4    defaults,errors=remount-ro       0 2

✅ 生产 fstab 落地操作步骤

#1 备份
cp /etc/fstab /etc/fstab.$(date +%Y%m%d).bak

#2 blkid 复制UUID
blkid

#3 编辑
vi /etc/fstab

#4 校验(最重要!)
mount -a
# 没有任何输出=成功;有报错立刻回滚备份

#5 查看挂载确认
df -h

❌ 生产黑名单(不要随便加)

  1. barrier=0 / nobarrier:ext4 关闭屏障,掉电极易丢数据,只有带 BBU RAID 卡才评估使用

  2. discard:线上 SSD 不建议线上实时 discard,改用定时 fstrim 任务更稳

  3. _netdev:网络盘才需要加,本地盘不要加;_netdev 告诉 systemd 等网络就绪再挂载

  4. 不要写 /dev/sda1 /dev/sdb2 这种设备名,扩容、换盘、云主机换控制器都会变盘符


本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。

原文链接 https://www.yijunzhao.cc/archives/linux-mount-unmount-file-system-guide

欢迎访问 https://www.yijunzhao.cc/

https://www.yijunzhao.cc/