はじめに
これは備忘録として投稿しているものです。悪しからず
必要なもの
- マウントポイント (
/mnt/squashfs-test
)- ディレクトリは先に作っておくこと
- マウント元のファイル (
/home/nao/tmp/file.sqfs
)- 実際のところ中身がrw前提のext4が入ったファイルでも問題はないが、今回はタイトル通りsquashfsのファイルとする
なおloopデバイスは勝手にセットアップしてくれる(-o loop
相当)ため、特に考える必要はない。
やり方
まず、unit名を決定する。これはマウントポイントのフルパスから一意に定まるものなので、好きな名前というのは不可。
$ systemd-escape -p --suffix=mount /mnt/squashfs-test
mnt-squashfs\x2dtest.mount
以上のコマンドから導き出されたunitを編集する。
$ sudo systemctl edit --full --force 'mnt-squashfs\x2dtest.mount'
この時の内容は以下のようになる。
[Unit]
Description=Mount squashfs-test
# 先にマウントされていなければならないファイルシステムがある場合は、fstabを見ながら次の行を必要に応じて変更する
After=home.mount
[Mount]
What=/home/nao/tmp/file.sqfs
Where=/mnt/squashfs-test
Type=squashfs
Options=ro
[Install]
WantedBy=local-fs.target
これは、fstab1またはmountコマンドで次のように書いた場合と等価になる。
/home/nao/tmp/file.sqfs /mnt/squashfs-test squashfs rw 0 0
$ mount /home/nao/tmp/file.sqfs /mnt/squashfs-test -t squashfs -o rw,loop
そして、このunitをserviceでやる時同様"start"すると、loopデバイスをセットアップした上で、マウントができる。
unmountする時は同様にstop
で可能。また起動時にマウントする設定はunitに対してenable
するだけで良い。
# マウント
$ sudo systemctl start 'mnt-squashfs\x2dtest.mount'
# アンマウント
$ sudo systemctl stop 'mnt-squashfs\x2dtest.mount'
# 起動時にマウント
$ sudo systemctl enable 'mnt-squashfs\x2dtest.mount'
豆知識
実はsnapdがやっていることと同じことをしている
参考
- https://www.getto.systems/entry/2019/11/19/203543
- https://unix.stackexchange.com/questions/283442/systemd-mount-fails-where-setting-doesnt-match-unit-name
- https://www.freedesktop.org/software/systemd/man/systemd.mount.html
-
実際にはfstabを使用する場合はloopデバイスを作成してくれないため、完全に等価という訳ではない。あくまでもイメージ ↩