정전 후 파일 시스템 마운트 전에 Systemd 서비스가 시작됩니다.

정전 후 파일 시스템 마운트 전에 Systemd 서비스가 시작됩니다.

문제가 발생했습니다.체계서비스는 로컬 파티션이 마운트되기 전에, 특히 정전 이벤트 후에 시작됩니다. 조사한 결과 시스템 재부팅 및 후속 조치로 인해 문제가 발생한 것으로 확인되었습니다.FSCK작업.

문제를 쉽게 재현하기 위해 최소한의 개념 증명을 만들었습니다. 자세한 내용은 다음과 같습니다.

test.service다음과 같이 구성된 systemd라는 서비스가 있습니다 .

[Unit]
Description=fsck order POC
After=network-online.target local-fs.target remote-fs.target swap.target

[Service]
ExecStart=/bin/bash -c "date > /mnt/storage/hello"

[Install]
WantedBy=multi-user.target

내에서는 /etc/fstab다음과 같이 마운트 지점을 구성했습니다.

/dev/sda1 /mnt/storage auto nosuid,nodev,nofail 0 2

실행 sudo tune2fs -l /dev/sda1 | grep -i "mount count"결과:

Mount count: 1
Maximum mount count: 1

이는 /dev/sda1부팅할 때마다 fsck가 발생함을 보여줍니다. 그러나 파일은 예상한 디렉토리 대신 hello루트 파일 시스템의 디렉토리에 생성됩니다./mnt/storagesda1마운트 지점.

결과적으로 /mnt/storage부팅 후 아무것도 볼 수 없습니다. 하지만 hello파일을 볼 수 있다면 umount /mnt/storage.

test.service제 질문은: 모든 파일 시스템이 마운트되고 검사된 후 스크립트가 실행되도록 하려면 어떤 변경을 해야 합니까 ? (참고: 마운트 지점의 이름은 클라이언트 사이트에 배포할 때 제어할 수 없으므로 다를 수 있습니다.)

시스템이 Ubuntu를 실행 중입니다. Debian에서는 이 문제가 발생하지 않습니다.

이 문제를 해결하는 방법에 대한 통찰력이나 제안을 주시면 감사하겠습니다. 도움을 주셔서 미리 감사드립니다!

답변1

내 의견에 해결책

systemd.mount 맨페이지에서:

nofail
            With nofail, this mount will be only wanted, not required,
 by local-fs.target or remote-fs.target. Moreover the mount unit is not ordered
 before these target units. This means that the boot will continue without
 waiting for the mount unit and regardless whether the mount point can be 
 mounted successfully.

해당 플래그 없이 시도하면 local-fs.target

먼저 도와주세요(이 경우 해결책이 없습니다)

달리기:

systemctl list-units --type=mount

마운트 장치를 식별하고 systemd 파일의 After=에 추가하십시오.

어쩌면 올바른 단위를 식별하는 데 도움이 될 수도 있습니다.

systemctl status <unit>

관련 정보