我想使用 aufs 来组合几个磁盘。我可以使用命令行中的 mount 命令来挂载 aufs 文件系统。
但是,当尝试通过 fstab 条目安装相同的文件时,它会失败。 Google 告诉我 fstab 没有按照指定的顺序挂载文件系统,从而产生了这个问题。我还发现了在 rc.local 中添加 mount 命令的建议,以便 aufs 在 fstab 之后挂载。
我使用的是archlinux,它使用systemd,那么如何在systemd中启动时运行mount命令?
答案1
我想我会为像我这样的人发布一步一步的说明。感谢大卫·巴格曼帮助我到达这里。
我创建了/etc/systemd/system/mnt-aufs.mount
,包含以下内容:
[Unit]
Description = AUFS disk
Requires = mnt-data01.mount
Requires = mnt-data02.mount
Requires = mnt-data03.mount
After = mnt-data01.mount
After = mnt-data02.mount
After = mnt-data03.mount
[Mount]
What = none
Where = /mnt/aufs
Type = aufs
Options = br:/mnt/data01/=rw:/mnt/data02/=rw:/mnt/data03/=rw,sum,create=mfs
[Install]
WantedBy = multi-user.target
然后我运行systemctl daemon-reload
systemd 来加载该单元。运行systemctl start mnt-aufs.mount
以安装磁盘,和/或systemctl enable mnt-aufs.mount
使其在引导时启动。
这相当于将以下内容复制粘贴到/etc/rc.local
初始化脚本中,并且会容易得多。我想知道为什么 systemd 没有等效的文件。
mount -t aufs -o br:/mnt/disk01=rw:/mnt/disk02=rw: /mnt/disk03=rw,sum,create=mfs none /mnt/aufs
答案2
Systemd 对挂载 ( ) 具有本机支持man systemd.mount
。事实上,systemd 读取/etc/fstab
,使用它来生成安装单元,并安装文件系统本身。
fstab
也可以手动创建安装单元,而不是依赖。这就是处理/dev
、/sys
、等系统安装的方式 ( )。此方法允许您使用 systemd 依赖项来确保以正确的顺序安装事物。/proc
/usr/lib/systemd/system/*.mount
systemd 挂载单元文件必须以其控制的挂载点命名 ( man systemd.unit
)。例如,我创建了一个单元文件来将我的 USB 备份驱动器安装到/mnt/backup
.按照命名约定,我创建了/etc/systemd/system/mnt-backup.mount
,其内容如下:
[Unit]
Description = USB backup disk
[Mount]
What = LABEL=david-usb-backup
Where = /mnt/backup
Type = ext4
[Install]
WantedBy = multi-user.target
然后我运行systemctl daemon-reload
systemd 来加载该单元。我可以运行systemctl start mnt-backup.mount
来安装磁盘,和/或systemctl enable mnt-backup.mount
在启动时启动它。
对于依赖项,请Requires = some-other-mnt-point.mount
在该[Unit]
部分下添加。或者,您可以使用BindTo
而不是Requires
;如果依赖项之一消失,这将导致它被卸载。但Requires
不影响磁盘的安装顺序。因此,为了确保磁盘在 aufs 之前挂载,请使用After
。
Requires
编辑:为了扩展和的使用After
,单位部分可能如下所示:
[Unit]
Description = USB backup disk
Requires = mnt-data01.mount
Requires = mnt-data02.mount
Requires = mnt-data03.mount
After = mnt-data01.mount
After = mnt-data02.mount
After = mnt-data03.mount
答案3
较新版本的 systemd 支持 fstab 中的 x-systemd.requires 选项,因此如果您不想使用 systemd.mount 单位并希望坚持使用 fstab,请尝试以下操作:
aufs /mnt/storage aufs ro,nobootwait,dirs=/mnt/storage2=ro:/mnt/storage1=ro:/mnt/storage3=ro:/mnt/storage4=ro:/mnt/storage0=ro:/mnt/storage5=ro:/mnt/storage6=ro:/mnt/storage7=ro:/mnt/storage8,xino=/dev/shm/aufs.xino,x-systemd.requires=mnt-storage0,x-systemd.requires=mnt-storage1,x-systemd.requires=mnt-storage2,x-systemd.requires=mnt-storage3,x-systemd.requires=mnt-storage4,x-systemd.requires=mnt-storage5,x-systemd.requires=mnt-storage6,x-systemd.requires=mnt-storage7,x-systemd.requires=mnt-storage8 0 0
答案4
你最好使用/etc/rc.local
试试这个例子:
# cat > /etc/rc.local << EOF
mount -t squashfs -o loop /usr/src/system_packages.squashfs /var/mount_point/
mount -t aufs -o remount,append:/var/mount_point/ none /
EOF