mount(8)이 systemd MountFlags를 무시할 수 있습니까?

mount(8)이 systemd MountFlags를 무시할 수 있습니까?

나는 Debian stretch/4.14.75수년간 나만의 자동 설치 프로그램( )을 개발하고 사용해 왔습니다.udev-hook + shell-script

.automounter-script

하지만

# sed -i "/^MountFlags/s/=.*$/=shared/" \
    /lib/systemd/system/systemd-udevd.service

다시 좋게 만들기 위해 네임스페이스를 다시 네임스페이스로 한 번에 전파하는 것이 가능한지 mount(8)또는 다른 작업이 가능한지 궁금합니다.root

MountFlags=slave내 생각엔 그들이 채무불이행을 한 데에는 타당한 이유가 있을 것 같아요, 아니면?

답변1

아니요. 분리된 마운트 네임스페이스에서 실행되면 실제로 마운트를 루트 네임스페이스로 다시 전파할 수 없습니다.

마운트 네임스페이스 샌드박스를 비활성화하는 것 외에도 다음을 사용할 수 있습니다.systemd-mount이 문제를 해결하세요.

샌드박싱의 기본 원리

systemd는 파일 시스템을 직접 마운트하지 않고 udev 규칙에서 udev 규칙에서 단위(즉, 마운트 단위)를 시작하도록 지시하는 것을 선호합니다. 이것이 udevd가 MountFlags=slave호스트 마운트를 오염시키기 위해 파일 시스템을 일시적으로 마운트하려는 규칙 오류나 규칙을 방지하기 위해 별도의 마운트 네임스페이스( )에서 실행되는 이유입니다.

그러나 물론 귀하의 경우 자동화된 설치 프로그램 스크립트를 통해 수행하려는 작업입니다.

시스템 마운트

호출을 다음으로 대체하여 udevd에 대한 별도의 마운트 네임스페이스 내에서 작동하도록 자동 마운트 스크립트를 조정할 수 있습니다 mount.systemd-mount는 와 동일한 매개변수를 가진 도구 mount입니다 .설치단위그리고자동 설치 장치이를 위해 두 장치는 /run/systemd/system재부팅 후에도 지속되지 않는 임시 디렉터리 아래에 생성됩니다. )

재정의하여 마운트 샌드박스를 비활성화합니다.

udevd 마운트 네임스페이스의 샌드박싱을 비활성화하려면 /libsystemd 패키지와 함께 제공되는 구성 파일을 수정하는 대신 재정의 구성 파일을 사용하십시오(다음에 apt가 패키지를 업그레이드할 때 깨질 수 있음). )

다음 명령을 사용하여 편집기에서 오버레이 파일을 열 수 있습니다.

$ sudo systemctl edit systemd-udevd

MountFlags다음 두 줄을 사용하여 기본값("공유")으로 재설정할 수 있습니다.

[Service]
MountFlags=

변수를 빈 문자열로 설정하면 일반적으로 systemd의 기본값으로 재설정됩니다.

최신 버전의 systemd에서는 이제 이것이 구성에 사용됩니다 PrivateMounts=.범죄udevd 서비스 파일을 변환하여 사용하세요.

이는 오버레이 문제 중 하나를 강조합니다. 즉, 표준 systemd 구성에서 벗어나므로 최신 systemd로 업그레이드할 때 계속 작동하려면 추가 또는 대체 구성이 필요하기 때문에 때때로 오버레이를 조정해야 할 수도 있습니다.

또한, 우선 udevd를 자체 마운트 네임스페이스에 샌드박싱하는 이점을 잃게 됩니다.

따라서 사용된 솔루션이 systemd-mount귀하에게 적합하다면 재정의하는 것보다 해당 솔루션을 권장합니다.

답변2

시스템 단위는 다음 위치에 저장됩니다.

   /etc/systemd/system/* - local configuration
   /run/systemd/system/* - runtime units
   /usr/lib/systemd/system/* - units of installed packages

뭔가를 수정하고 싶을 때는 /usr/lib/systemd/system/디렉터리에 있는 파일을 수정하지 말고 디렉터리에 같은 이름의 새 유닛 파일을 생성해야 합니다 /etc/systemd/system/.

에서 man systemd.unit:

유닛 파일의 공급업체 설정을 재정의하는 방법에는 두 가지가 있습니다./usr/lib/systemd/시스템도착하다/etc/systemd/시스템선택한 설정을 수정합니다. 또는 다음과 같은 디렉터리를 만들 수 있습니다.단위.d/이내에/etc/systemd/시스템삽입된 파일을 배치합니다.name.conf사람들이 관심을 갖는 특정 설정만 그곳에서 변경됩니다. 이러한 삽입 파일이 여러 개 있으면 해당 파일을 읽습니다.

첫 번째 접근 방식의 장점은 전체 단위를 쉽게 다룰 수 있고 더 이상 공급업체 단위를 구문 분석할 필요가 없다는 것입니다. 단점은 공급업체의 단위 파일 개선 사항이 업데이트에 자동으로 통합되지 않는다는 것입니다.

두 번째 접근 방식은 원하는 특정 설정만 재정의하여 장치에 대한 공급업체 업데이트가 자동으로 적용된다는 장점이 있습니다. 단점은 공급업체의 일부 향후 업데이트가 로컬 변경 사항과 호환되지 않을 수 있다는 것입니다.

systemd위에서 설명한 대로 볼륨을 마운트하기 위한 자체 메커니즘이 있습니다.여기:

systemd는 /etc/fstab에 지정된 파티션과 파일 시스템을 마운트하는 일을 담당합니다. systemd-fstab-generator(8) /etc/fstab의 모든 항목을 systemd 단위로 변환합니다. 이는 시작 시 및 시스템 관리자 구성이 다시 로드될 때마다 수행됩니다.

systemd에서 자체 자동 설치 프로그램을 사용하면 불필요한 문제가 발생할 것이라고 생각합니다.

관련 정보