SW 개발

[systemd] fstab 을 이용한 파일 마운트 서비스

. . . 2021. 3. 30. 15:27
반응형

systemd 에서 fstab 을 파싱하고 마운트하는 곳은 어디일까?

local-fs.target 동작

그냥 결론적으로 말하면, local-fs.target 에서 동작을 시킨다.

위의 공식매뉴얼을 살펴보면 다음과같이 나온다. (by 구글 번역)

local-fs.target : systemd-fstab-generator(3) 이 대상 장치의 로컬 마운트 포인트를 참조하는 모든 마운트 장치에 Type의 종속성을 자동으로 추가합니다.또한 Auto Mount 옵션이 설정된 /etc/fstab 에 나열된 마운트에 대해이 대상 장치에 대한 유형의 종속성을 추가합니다.

동작관련하여 요약하면 다음과같다.

  1. local-fs.target 서비스? 에서 systemd-fstab-generator(3) 를 통해서 fstab 을 파싱한다.
  2. fstab 의 내용대로, /run/systemd/generatorxxx.mount 와 같은 임시 서비스를 만든다.
  3. /run/systemd/generator 의 내용대로 파일시스템을 마운트 한다.

systemd 에 의해 마운트 관리되는 마운트 포인트들

systemd 에 의해서 mount 관리 되는 목록은 다음의 명령어를 사용한다.

systemctl -t mount

fstab 말고, 마운트 하도록 동작 하는방법은?

fstab 의 내용대로, 생성된 /run/systemd/generator 하위 폴더의 내용을 약간 수정하여 xxx.mount 서비스로 만들어서 직접 서비스를 enable 해준다.

고급 동작이 필요하면 다음의 링크를 참고하기바란다. - 참고링크 : https://www.golinuxcloud.com/mount-filesystem-without-fstab-systemd-rhel-8/ - 참고링크 : https://www.golinuxcloud.com/mount-filesystem-in-certain-order-systemd/

예제) 마운트하기 서비스

[Unit]
Description=Test Directory (/tmp_dir)
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=/dev/disk/by-uuid/cea0757d-6329-4bf8-abbf-03f9c313b07f
Where=/tmp_dir
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

예제) 마운트 순서 맞추기

만약, 마운트간 order 를 맞추고 싶으면 다음과같이 RequiresMountsFor, requires-mounts-for=/first_part 지시자를 이용해도된다.

#  This file is part of systemd.

[Unit]
Description=Test Directory (/second_part)
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
RequiresMountsFor=/first_part

[Mount]
What=/dev/disk/by-uuid/3f46ad95-0d39-4f56-975d-2e61fc26230b
Where=/second_part
Type=ext4
Options=defaults,x-systemd.requires-mounts-for=/first_part

[Install]
WantedBy=multi-user.target

마운트 이후에 동작시키기

마운트 이후에 동작해야할 서비스가이 있다면 다음과 같이 After=local-fs.target 를 사용한다.

[Unit]
Description=kksworks sample service
After=local-fs.target
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/usr/bin/kksworks-test.sh start
RemainAfterExit=true
ExecStop=/usr/bin/kksworks-test.sh stop
StandardOutput=journal
TimeoutSec=10
TimeoutStopSec=2

[Install]
WantedBy=basic.target
  • fstab 이후에 나온데로 파일시스템이 마운트 된 이후에 서비스를 실행하게된다.
반응형