LoginSignup
4
1

More than 1 year has passed since last update.

squashfsをsystemdで起動時にマウントする

Last updated at Posted at 2021-12-04

はじめに

これは備忘録として投稿しているものです。悪しからず

必要なもの

  • マウントポイント (/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がやっていることと同じことをしている

参考


  1. 実際にはfstabを使用する場合はloopデバイスを作成してくれないため、完全に等価という訳ではない。あくまでもイメージ 

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1