systemd - 서비스 완료 후 장치 마운트 해제

systemd - 서비스 완료 후 장치 마운트 해제

udev 규칙과 systemd를 사용하여 자동 백업 메커니즘을 구현하려고 합니다. 아이디어는 특정 저장 장치를 핫 플러그할 때 백업 루틴을 시작하는 것입니다.이 문제, 그건 그렇고, 제가 직접 답변을 제공했지만 여기서는 몇 가지 추가 조정에 대해 논의하고 싶습니다. 즉, 백업 서비스가 완료된 후 장치를 마운트 해제하고 싶습니다.

일부 배경:

지금까지 저는 udev를 사용하여 자체적으로 백업 루틴을 실행하는 systemd 서비스를 시작했습니다. 관련 서류는 다음과 같습니다.

백업 서비스

[Unit]
Description=<DESCRIPTION HERE>
BindsTo=<STORAGE DEVICE UNIT HERE>.device mnt-backup.mount
After=<STORAGE DEVICE UNIT HERE>.device mnt-backup.mount

[Service]
ExecStart=<CALL TO BACKUP SCRIPT HERE>

mnt-backup.mount

[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target

[Mount]
What=/dev/disk/by-uuid/<DEVICE UUID HERE> 
Where=/mnt/backup
Type=<FILESYSTEM HERE>

90-백업.규칙

KERNEL=="sd*", ATTRS{serial}=="<HD SERIAL HERE>", TAG+="systemd", ENV{SYSTEMD_WANTS}+="backup.service" 

질문:

이제 backup.service가 완료되자마자 mnt-backup.mount를 중지하고 싶습니다.

문서에 따르면실행 시작 후 =ExecStart= 명령 다음에 실행될 것이므로 추가를 시도했습니다.

ExecStartPost=/usr/bin/systemctl stop mnt-backup.mount

mnt-backup.mount가 중지된다는 것을 알고 있지만 backup.service에그 자체가 묶여있다, 제가 ​​이해하는 한, 제대로 중지하려면 mnt-backup.mount보다 먼저 backup.service를 중지해야 하므로 순환 종속성이 생성됩니다.

이것을 테스트하는 동안 몇 번 작동했지만 내 컴퓨터에서 처음으로 본 커널 패닉을 경험했기 때문에 이것이 원인인지 궁금했습니다.

어떤 경우 에라도,내 접근 방식이 맞습니까?

답변1

이전 방법이 반드시 효과가 있을지는 확실하지 않지만 더 나은 대안이 있습니다.

이 마법의 속성은필요하지 않을 때 중지. 이는 마운트 파일의 [Unit]에서 true로 설정되어야 하므로 다음과 같습니다.

mnt-backup.mount

[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
StopWhenUnneeded=true

[Mount]
What=/dev/disk/by-uuid/<DEVICE UUID HERE> 
Where=/mnt/backup
Type=<FILESYSTEM HERE>

그렇게 쉽습니다.

이 접근 방식의 가장 큰 장점은 systemd에서 명시적으로 지원되므로 작동이 보장된다는 것입니다.

저도 설정을 적극 추천합니다수동 시작 거부사용자가 서비스를 수동으로 시작하지 못하도록 하려면 서비스 단위에서 true로 설정하세요. 아이디어는 정확히 백업 메커니즘을 자동화하는 것이므로 사용자가 명시적으로 시작할 수 없어야 하므로 이 책임을 전적으로 udev에 맡기는 것이 좋습니다.

관련 정보