다른 작업을 수행하기 전에 ZFS 마운트 스크립트를 시작하도록 시스템화하려면 어떻게 해야 합니까?

다른 작업을 수행하기 전에 ZFS 마운트 스크립트를 시작하도록 시스템화하려면 어떻게 해야 합니까?

이제 저는 Fedora 19에서 zfsonlinux를 사용하고 있으며 매우 잘 실행됩니다. 계획에 따르면 systemd(zfs에 포함됨)가 호출하는 initscript는 시작 시 마운트하는 데 사용되지만 매우 명백한 결함이 있습니다. ZFS 마운트 방식이 시작 시 너무 늦어서 /zfs 다운스트림 전송이 없습니다. 다른 서비스의 설치 중 많은 부분이 손실되어 복원할 수 없으므로 실패하게 됩니다.

내가 추구하는 것은 다른 작업을 수행하기 전에 시스템에서 스크립트를 시작하도록 하는 방법입니다. 나는 initscripts를 사용하여 이 작업을 수행하는 방법을 알고 있지만(2와 같이 더 낮은 실행 수준으로 설정하기만 하면 됩니다), systemd를 사용하여 대상 시스템에서 이 작업을 수행하는 것에 관해서는 아직 가장 모호하지 않습니다.

zfs를 시작해야 하는 서비스에서 설정을 시도했지만 Type=idle을 제외하고는 작동하지 않습니다(그러나 더 나은 방법이 있어야 합니다).

Requires=network.target
After=zfs
Type=idle

그리고 참고로,Fedora에서 제공하는 initscript입니다.. Linux에서 ZFS를 마운트하는 방식의 특성상(?) fstab에 항목을 넣고 완료할 수는 없으며 명령을 사용하여 마운트해야 합니다.

답변1

systemd이 상황에 대한 구체적인 지침 이 있습니다 RequiredMountsFor.man systemd.directives

RequiresMountsFor=[mountpoint]예를 들어 사용법은 입니다 RequiresMountsFor=/zfs.

핵심 질문은 아마도 Q 상태와 같은 "다른" 조건을 실제로 반영해야 하는지 여부일 것입니다. 나는 이러한 종속성을 최대한 선택적으로 사용하여 최상의 시퀀스와 최대 병렬화를 찾는 것을 지원하는 것이 아이디어라고 생각합니다.

답변2

대답하려고 노력하지만 systemd에 익숙하지 않습니다.

제공되는 스크립트는 표준 스크립트이므로 언제든지 script_name start.

systemd 매뉴얼 페이지에서 본 것에서 종속성을 정의할 수 있으며 가장 좋은 방법은 특정 대상 이전 및 이후를 사용하는 것입니다. 파일을 살펴보면 항상 multiuser.target인 런레벨 2, 3, 4의 별칭이 있습니다.

systemctl list-dependent basic.target을 수행하면 서비스를 시작할 위치를 쉽게 찾을 수 있습니다.

[Unit]
Description=my Service
Before=basic.target 
After=local-fs.target

[Service]
Type=simple
ExecStart=/path/to/script start
ExecStop=/path/to/script stop

파일 예제 /usr/lib/systemd/myservice.service를 저장합니다. systemctl은 myservice.service를 활성화합니다.

관련 정보