起動時にXの場合はAをマウントし、それ以外の場合はBをマウントします。

起動時にXの場合はAをマウントし、それ以外の場合はBをマウントします。

文脈は次のとおりです。これは別の質問です私のもの。 TL、DR:ほとんどのホームフォルダは、私が持ち歩いてさまざまな職場や家にマウントする外付けドライブにあります。

unionfs /HomeLocal=RW:/mnt/external_drive/HomeRoaming=RW /home次の行を使用してインストールを完了しますfstab

/HomeLocal=RW:/mnt/external_drive/HomeRoaming=RW /home fuse.unionfs auto,suid,exec,nonempty,max_files=32768,allow_other,x-systemd.requires=/mnt/external_drive

(/HomeLocal は私のローカルプロファイルとローカルユーザーの家を持っています.)

これは非常にうまく機能しますしかし、external_driveが存在しない場合、Unionfsは失敗するため、ローカルユーザーは私が空席中にマシンを使用することはできません。したがって、これを達成するためにSystemDマウントデバイスを作成したいと思います。

  • external_driveが存在する場合は、マウントしてから指示に従ってUnionfsをインストールしてください。
  • そうでない場合は、/homeに/HomeLocalをマウント(バインド)してください。

SystemD自体にそのような分岐を作成するために必要な機能があるかどうかはわかりません。そうでなければ、ユニットから呼び出されるスクリプトをインストールする方法を選ぶことができるようですが、これを達成するには、正しいユニットファイルを作成する方法についてのアドバイスが必要です。

答え1

あなたはそれを使用することができますシステムビルダー;ジェネレータに利用可能なデバイスに基づいて適切な設置単位を作成するようにします。次の例は、一般的なアイデアを示しています。

  1. /dev/disk/by-uuid/7057c04d-e1c8-4b95-8338-ff0c3e5b14f8ターゲットデバイス()が利用可能であることを確認してください。

    • もしそうなら、我々はそれを使用します。
    • そうでなければ、我々は/dev/disk/by-uuid/cad0b488-1ac0-4725-806d-1df5aff03391それを使用します。
  2. これで、どのデバイスを使用するかがわかったので、適切なインストールユニットを作成します。

  3. 最後に、デバイスをインストールするためにインストールデバイスを有効にします。

次のスクリプトを作成して名前を付けました/etc/systemd/system-generators/home-mount-generator

#!/bin/bash

DISK1=/dev/disk/by-uuid/7057c04d-e1c8-4b95-8338-ff0c3e5b14f8
DISK2=/dev/disk/by-uuid/cad0b488-1ac0-4725-806d-1df5aff03391

normal_dir=$1
early_dir=${2:-$normal_dir}
late_dir=${3:-$normal_dir}

if [[ -b $DISK1 ]]; then
        DEVICE=$DISK1
else
        DEVICE=$DISK2
fi

cat > $normal_dir/home.mount <<EOF
# Created by $0

[Unit]
Description=Home directories

[Mount]
What=$DEVICE
Where=/home
Type=ext4

[Install]
WantedBy=local-fs.target
EOF

mkdir -p $normal_dir/local-fs.target.requires
ln -sf ../home.mount $normal_dir/local-fs.target.requires

ファイルが実行可能であることを確認してください。

chmod 755 /etc/systemd/system-generators/home-mount-generator

システムを再起動すると、接続されているデバイスによっては、どちらか一方がインストールされていることがわかります。

関連情報