如何使用 Systemd 自动挂载文件系统

下面的示例显示了如何创建 systemd 脚本以在重新启动时自动在特定路径下挂载磁盘。

  1. 使用命令“blkid”检查文件系统 UUID。
# blkid /dev/sdb
/dev/sdb: UUID="5813cd72-ff30-44bc-a7a3-27c68fe3e6c7" UUID_SUB="ccd243dc-1481-403f-aa51-1502a95cdf2f" TYPE="btrfs"
  1. 我们需要创建一个新的挂载单元来挂载文件系统。
    挂载单元必须以其控制的挂载点目录命名。
    例如:挂载点 /var/lib/docker 必须配置在单元文件 var-lib-docker.mount 中。
    有关用于将文件系统路径转换为单元名称的转义逻辑的详细信息,请参阅 systemd.unit 的联机帮助页。
# vi /etc/systemd/system/var-lib-docker.mount
[Unit]
Description=Docker mount
[Mount]
What=/dev/disk/by-uuid/5813cd72-ff30-44bc-a7a3-27c68fe3e6c7
Where=/var/lib/docker
Type=btrfs
Options=defaults
[Install]
WantedBy=multi-user.target

“What”选项可以是 UUID、标签、磁盘路径

  1. 使systemd单元在开机后启动。
# systemctl enable var-lib-docker.mount
  1. 修改下面的docker服务脚本,确保服务只在挂载服务被调用后才启动。
# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket var-lib-docker.mount     ### Added mount unit for docker service to wait
Requires=docker.socket
...
  1. 重新启动节点并检查挂载服务单元的状态。
# shutdown -r now
# systemctl status var-lib-docker.mount
● var-lib-docker.mount - Docker mount
Loaded: loaded (/etc/systemd/system/var-lib-docker.mount; enabled; vendor preset: disabled)
Active: active (mounted) since Tue 2016-06-07 02:06:07 IST; 54s ago
Where: /var/lib/docker
What: /dev/sdb
Process: 416 ExecMount=/bin/mount /dev/disk/by-uuid/5813cd72-ff30-44bc-a7a3-27c68fe3e6c7 /var/lib/docker -n -t btrfs -o defaults (code=exited, status=0/SUCCESS)
Jun 07 02:06:07 OL7-docker-TD systemd[1]: Mounting Docker mount...
Jun 07 02:06:07 OL7-docker-TD systemd[1]: Mounted Docker mount.
  1. 在“mount”命令中检查挂载点。
# mount | grep docker
/dev/sdb on /var/lib/docker type btrfs (rw,relatime,seclabel,space_cache)

无法将安装单元添加为其他服务操作的一部分。
可用的 systemd 单元类型:

Unit 类型文件扩展名描述
Service unit.service一个系统服务。
Target unit.target一组 systemd 单元。
Automount unit.automount文件系统自动挂载点。
Device unit.device内核识别的设备文件。
Mount unit.mount文件系统挂载点。
Path unit.path文件系统中的文件或者目录。
Scope unit.scope外部创建的进程。
Slice unit.slice一组分层组织的单元,用于管理系统进程。
Snapshot unit.snapshotsystemd 管理器的保存状态。
Socket unit.socket进程间通信套接字。
Swap unit.swap交换设备或者交换文件。
Timer unit.timer一个系统定时器。
日期:2020-09-17 00:13:08 来源:oir作者:oir