强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

systemd 教程 / Mount 与 Automount

Mount 与 Automount

一、systemd 挂载管理概述

systemd 通过 .mount Unit 管理文件系统挂载,替代传统的 mount 命令和 /etc/fstab

特性/etc/fstabsystemd Mount Unit
配置格式空格分隔文本行INI 风格
依赖管理有限完整 Unit 依赖
按需挂载✅ Automount
日志集成✅ journalctl
超时控制✅ TimeoutSec

💡 提示/etc/fstab 中的挂载项仍由 systemd-fstab-generator 自动转换为 Mount Unit,因此传统 fstab 配置与 systemd 并不冲突,两者可以共存。

# 查看所有挂载 Unit
systemctl list-units --type=mount

# 查看由 fstab 生成的 Unit
ls /run/systemd/generator/*.mount

二、Mount Unit 文件

2.1 手动创建

/etc/systemd/system/mnt-data.mount

[Unit]
Description=Data Partition
After=blockdev@dev-disk-by\x2duuid-abc123.target

[Mount]
What=/dev/disk/by-uuid/abc123-def456
Where=/mnt/data
Type=ext4
Options=defaults,noatime

[Install]
WantedBy=multi-user.target

2.2 [Mount] 段参数

参数说明示例
What要挂载的设备/路径/dev/sdb1UUID=...
Where挂载点/mnt/data
Type文件系统类型ext4nfs4cifs
Options挂载选项defaults,noatime
TimeoutSec挂载超时90s
DirectoryMode挂载点目录权限0755

⚠️ 注意:Mount Unit 文件名必须与挂载点路径一致。/mnt/datamnt-data.mount/ 替换为 -)。

# 使用 systemd-escape 转义路径
systemd-escape --suffix=mount "/mnt/my data"
# 输出: mnt-my\x20data.mount

三、/etc/fstab 与 systemd

3.1 fstab 特殊选项

systemd 识别 fstab 中以 x-systemd. 开头的选项:

fstab 选项说明
_netdev等待网络就绪
noauto不在启动时自动挂载
nofail挂载失败不阻止启动
x-systemd.automount使用 Automount 按需挂载
x-systemd.idle-timeout=300空闲 300 秒后自动卸载
x-systemd.requires=xxx指定依赖 Unit
x-systemd.after=xxx指定启动顺序
x-systemd.device-timeout=10设备等待超时

3.2 fstab 示例

# /etc/fstab

# 使用 UUID(推荐,设备名可能变化)
UUID=a1b2c3d4-e5f6-7890  /data  ext4  defaults,noatime  0  2

# NFS 挂载
nas:/volume1/backup  /mnt/nfs/backup  nfs4  defaults,_netdev,x-systemd.automount,x-systemd.idle-timeout=300  0  0

# CIFS/SMB 挂载
//192.168.1.100/share  /mnt/smb  cifs  credentials=/etc/samba/creds,uid=1000,_netdev  0  0
# 查看 UUID
blkid
lsblk -f

四、Automount 按需挂载

4.1 什么是 Automount

Automount 在首次访问挂载点时才触发实际挂载,适用于:

  • 网络驱动器(NFS/CIFS)
  • 移动存储设备
  • 不常用的大分区

4.2 Automount Unit 文件

Automount 文件 (/etc/systemd/system/mnt-nas.automount):

[Unit]
Description=NAS Automount

[Automount]
Where=/mnt/nas
TimeoutIdleSec=300
DirectoryMode=0755

[Install]
WantedBy=multi-user.target

Mount 文件 (/etc/systemd/system/mnt-nas.mount):

[Unit]
Description=NAS Mount
After=network-online.target
Requires=network-online.target

[Mount]
What=192.168.1.100:/volume1/shared
Where=/mnt/nas
Type=nfs4
Options=defaults,rsize=1048576,wsize=1048576

[Install]
WantedBy=multi-user.target

4.3 [Automount] 段参数

参数说明默认值
Where挂载点(必须与 .mount 一致)
TimeoutIdleSec空闲超时后自动卸载0(不卸载)
DirectoryMode自动创建的目录权限0755

4.4 工作流程

系统启动
    ▼
mnt-nas.automount 激活(挂载点就绪,未实际挂载)
    ▼
用户访问 /mnt/nas/
    ▼
mnt-nas.mount 激活 → NFS 挂载完成
    ▼
300 秒无访问 → 自动卸载(回到等待状态)
# 启用 Automount
systemctl enable --now mnt-nas.automount

# 首次访问触发挂载
ls /mnt/nas/

# 查看状态
systemctl status mnt-nas.automount
systemctl status mnt-nas.mount

五、NFS 挂载

5.1 安装

# Debian/Ubuntu
sudo apt install nfs-common

# CentOS/RHEL
sudo yum install nfs-utils

5.2 Mount Unit 方式

# /etc/systemd/system/mnt-nfs-backup.mount
[Unit]
Description=NFS Backup Mount
After=network-online.target
Requires=network-online.target

[Mount]
What=192.168.1.100:/volume1/backup
Where=/mnt/nfs/backup
Type=nfs4
Options=defaults,hard,timeo=600,retrans=2,rsize=1048576,wsize=1048576

[Install]
WantedBy=multi-user.target
NFS 选项说明
hard硬挂载,持续重试(推荐,防数据损坏)
soft软挂载,超时返回错误
timeo=600超时时间(0.1 秒为单位)
retrans=2重试次数
rsize/wsize读/写缓冲区大小

⚠️ 注意:生产环境 NFS 必须使用 hard 选项。soft 可能导致数据损坏。务必添加 After=network-online.target


六、CIFS/SMB 挂载

6.1 安装与凭据

# 安装
sudo apt install cifs-utils

# 创建凭据文件
cat > /etc/samba/creds << 'EOF'
username=myuser
password=mypassword
domain=WORKGROUP
EOF
sudo chmod 600 /etc/samba/creds

6.2 Mount Unit

# /etc/systemd/system/mnt-smb.mount
[Unit]
Description=SMB Share Mount
After=network-online.target
Requires=network-online.target

[Mount]
What=//192.168.1.100/share
Where=/mnt/smb
Type=cifs
Options=credentials=/etc/samba/creds,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,vers=3.0

[Install]
WantedBy=multi-user.target
CIFS 选项说明
credentials=凭据文件(推荐)
uid=/gid=文件所有者
file_mode=/dir_mode=权限
vers=SMB 版本(2.0/3.0/3.1.1)
iocharset=utf8字符编码

七、加密卷挂载

7.1 LUKS 加密卷

# 首次加密
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup luksOpen /dev/sdb1 mydata
sudo mkfs.ext4 /dev/mapper/mydata

# 配置 crypttab(/etc/crypttab)
echo "mydata /dev/sdb1 none luks" | sudo tee -a /etc/crypttab

# 配置 fstab
echo "/dev/mapper/mydata /data ext4 defaults 0 2" | sudo tee -a /etc/fstab
# 查看加密设备
lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT

# 查看 crypttab 生成的 Unit
systemctl list-units 'systemd-cryptsetup*'

八、交换分区管理

# 查看 Swap 状态
swapon --show
systemctl list-units --type=swap

# 创建 swap 文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 配置 fstab
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

zram 压缩 Swap

# /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
swap-priority = 100
fs-type = swap
sudo systemctl daemon-reload
sudo systemctl restart [email protected]

九、生产场景

场景 1:NAS 自动挂载

# /etc/systemd/system/mnt-nas-media.automount
[Unit]
Description=NAS Media Automount
[Automount]
Where=/mnt/nas-media
TimeoutIdleSec=300
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/mnt-nas-media.mount
[Unit]
Description=NAS Media Mount
After=network-online.target
Requires=network-online.target
[Mount]
What=192.168.1.100:/volume1/media
Where=/mnt/nas-media
Type=nfs4
Options=defaults,hard,timeo=600,retrans=2
[Install]
WantedBy=multi-user.target

场景 2:开发环境共享目录

# /etc/systemd/system/mnt-dev-share.automount
[Automount]
Where=/mnt/dev-share
TimeoutIdleSec=120
# /etc/systemd/system/mnt-dev-share.mount
[Mount]
What=//devserver/projects
Where=/mnt/dev-share
Type=cifs
Options=credentials=/etc/samba/dev-creds,uid=1000,gid=1000,vers=3.0

十、常用命令速查表

操作命令
列出所有挂载systemctl list-units --type=mount
列出所有 Automountsystemctl list-units --type=automount
启动挂载systemctl start mnt-data.mount
卸载systemctl stop mnt-data.mount
查看 UUIDblkid
查看文件系统lsblk -f
转义路径systemd-escape --suffix=mount "/mnt/data"
查看挂载信息findmnt
NFS 共享列表showmount -e <server>

十一、扩展阅读