文脈は次のとおりです。これは別の質問です私のもの。 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
あなたはそれを使用することができますシステムビルダー;ジェネレータに利用可能なデバイスに基づいて適切な設置単位を作成するようにします。次の例は、一般的なアイデアを示しています。
/dev/disk/by-uuid/7057c04d-e1c8-4b95-8338-ff0c3e5b14f8
ターゲットデバイス()が利用可能であることを確認してください。- もしそうなら、我々はそれを使用します。
- そうでなければ、我々は
/dev/disk/by-uuid/cad0b488-1ac0-4725-806d-1df5aff03391
それを使用します。
これで、どのデバイスを使用するかがわかったので、適切なインストールユニットを作成します。
最後に、デバイスをインストールするためにインストールデバイスを有効にします。
次のスクリプトを作成して名前を付けました/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
システムを再起動すると、接続されているデバイスによっては、どちらか一方がインストールされていることがわかります。