시작할 때 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

이제 시스템을 다시 시작하면 연결된 장치에 따라 둘 중 하나가 설치된 것을 볼 수 있습니다.

관련 정보