맥락은 다음과 같다이것은 또 다른 질문입니다내 거. 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
이제 시스템을 다시 시작하면 연결된 장치에 따라 둘 중 하나가 설치된 것을 볼 수 있습니다.