Aufsを使用していくつかのディスクを結合したいのですが、コマンドラインからmountコマンドを使用してaufsファイルシステムをマウントできます。
ただし、fstabエントリを介して同じものをマウントしようとすると、失敗します。 Googleによると、fstabは指定された順序でファイルシステムをマウントしないため、この問題が発生します。また、マウントコマンドをrc.localに追加して、fstabの後にaufsがマウントされるようにするための推奨事項も見つけました。
Systemdを使用するarchlinuxを使用していますが、systemdの起動時にmountコマンドを実行するにはどうすればよいですか?
Systemdはマウントをネイティブでサポートしています(man systemd.mount
)。実際、systemdは/etc/fstab
を読み取り、それを使用してマウントユニットを生成し、ファイルシステム自体をマウントします。
fstab
に依存するのではなく、手動でマウントユニットを作成することもできます。これは、/dev
、/sys
、/proc
などのシステムマウントの処理方法です(/usr/lib/systemd/system/*.mount
)。この方法では、systemdの依存関係を使用して、正しい順序でマウントできるようにします。
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
次に、systemdに対してsystemctl daemon-reload
を実行して、ユニットをロードします。 systemctl start mnt-backup.mount
を実行してディスクをマウントしたり、systemctl enable mnt-backup.mount
を実行して起動時に開始したりできます。
依存関係については、Requires = some-other-mnt-point.mount
セクションの下に[Unit]
を追加します。オプションで、BindTo
ではなくRequires
を使用できます。これにより、依存関係の1つがなくなると、マウントが解除されます。ただし、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
私のような他の人のために、ステップバイステップの説明を投稿すると思いました。ここに到達するのを手伝ってくれたDavid Baggermanに感謝します。
次の内容で/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
次に、systemdに対してsystemctl daemon-reload
を実行して、ユニットをロードしました。 systemctl start mnt-aufs.mount
を実行してディスクをマウントするか、systemctl enable mnt-aufs.mount
を実行して起動時に開始します。
これは、以下を/etc/rc.local
initスクリプトにコピーして貼り付けるのと同じであり、はるかに簡単でした。 systemdに同等のファイルがないのはなぜだろうか。
mount -t aufs -o br:/mnt/disk01=rw:/mnt/disk02=rw: /mnt/disk03=rw,sum,create=mfs none /mnt/aufs
Fstabを使い続けたい場合は、オプションに_netdevを追加してみてください。
none /mnt/aufs aufs sum,create=mfs,dirs=.....,_netdev 0 0
これにより、ネットワークが起動するまでマウントが遅延します。
/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
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