fstabのシャドウバインドマウント

fstabのシャドウバインドマウント

他のLinuxディストリビューションのブートマネージャ(rEFInd)を使用するデフォルト以外のカスタムUbuntuインストールがあります。したがって、私はUbuntuが私のEFIパーティションを見たくありません。原則として、それはそこにあるものとは何の関係もありません(rm -rf /*昨夜私がしたことをしたときにすでに私のお尻を救った...)。ただし、btrfsをファイルシステムとして使用しているため、私の/bootディレクトリはEFIパーティションなどのUEFI読み取り可能パーティションに配置する必要があります。したがって、この問題に対する解決策は、esp:\EFI\ubuntu次のコマンドを使用してEFIパーティションのサブディレクトリをシャドウバインドマウントすることでした。/boot

mount /dev/sdb2 /boot
mount --bind /boot/EFI/ubuntu /boot

これは非常にうまく機能します。 Ubuntuは/ bootパーティションにアクセスできるため、vmlinuzとinitramfsを自由に配置でき、ブートマネージャが自動的にインストールを検出します。起動と更新が期待どおりに機能します。これまでの唯一の注意点は、/boot をマウントするにはコマンドを使用する必要があることです。そのため、責任あるシステム管理者と同様に、fstabエントリを作成しました。

UUID=XXXX-XXXX      /boot   vfat    rw,relatime 0 0
/boot/EFI/ubuntu    /boot   none    bind        0 0

上記のコマンドと似ていますが、EFIパーティション全体は起動時にマウントされたままです。 Shadow Bind Mountを実行する2行目は実行されていないようです。 fstabでこれを行う方法はありますか?それ以外の場合は、初期インストール後にできるだけ早くバインドマウントを実行する安定した方法は何ですか?

ベストアンサー1

@RamanSailopalが提案したように、答えは(もちろん)dmesgにあります。問題の根本的な原因は、systemdがfstabエントリから単位ファイルを生成し、何らかの理由でマウントポイントにマップされるファイル名を持つ必要があることです。つまり、マウントポイントごとに複数のマウントは許可されません。

local-fs.targetとにかく、通常のシステムインストールユニットのように依存関係で自分自身を注入するシステムサービスファイルを作成して、この問題を解決しました。

/etc/systemd/system/boot-shadow-mount.service:

# Performs the shadow bind mount to hide the ESP at /boot
# and instead expose the ubuntu subdirectory.

[Unit]
Description=/boot shadow bind mount
Requires=boot.mount
Conflicts=umount.target

[Service]
Type=oneshot
ExecStart=/bin/mount --bind /boot/EFI/ubuntu /boot
ExecStop=/bin/umount /boot
RemainAfterExit=True

[Install]
RequiredBy=local-fs.target unattended-upgrades.service

おすすめ記事