fstab의 섀도우 바인드 마운트

fstab의 섀도우 바인드 마운트

다른 Linux 배포판의 부팅 관리자(rEFInd)를 사용하는 기본이 아닌 사용자 지정 Ubuntu 설치가 있습니다. 따라서 나는 Ubuntu가 내 EFI 파티션을 보는 것을 원하지 않습니다. 원칙적으로 그것은 거기에 있는 것과 아무 관련이 없습니다( rm -rf /*어젯밤에 내가 한 일을 할 때 이미 내 엉덩이를 구했습니다...). 그러나 btrfs를 파일 시스템으로 사용하고 있으므로 내 /boot디렉터리는 EFI 파티션과 같은 UEFI 읽기 가능한 파티션에 있어야 합니다. 따라서 이 문제에 대한 해결책은 esp:\EFI\ubuntu다음 명령을 사용하여 EFI 파티션의 하위 디렉터리를 섀도우 바인드 마운트하는 것이었습니다./boot

mount /dev/sdb2 /boot
mount --bind /boot/EFI/ubuntu /boot

이것은 매우 잘 작동합니다. Ubuntu는 /boot 파티션에 액세스할 수 있으므로 vmlinuz 및 initramfs를 자유롭게 넣을 수 있으며 부팅 관리자가 자동으로 설치를 감지합니다. 부팅 및 업데이트가 예상대로 작동합니다. 지금까지 유일한 주의 사항은 /boot를 마운트하려면 명령을 사용해야 한다는 것입니다. 그래서 책임 있는 시스템 관리자와 마찬가지로 fstab 항목을 만들었습니다.

UUID=XXXX-XXXX      /boot   vfat    rw,relatime 0 0
/boot/EFI/ubuntu    /boot   none    bind        0 0

위 명령과 유사하지만 전체 EFI 파티션은 부팅 시 마운트된 상태로 유지됩니다. Shadow Bind Mount를 실행하는 두 번째 라인은 실행되지 않는 것 같습니다. fstab에서 이 작업을 수행할 수 있는 방법이 있습니까? 그렇지 않은 경우 초기 설치 후 가능한 한 빨리 바인드 마운트를 수행하는 안정적인 방법은 무엇입니까?

답변1

@RamanSailopal이 제안했듯이 대답은 (물론) dmesg에 있습니다. 문제의 근본 원인은 systemd가 fstab 항목에서 단위 파일을 생성하고 어떤 이유로든 마운트 지점에 매핑되는 파일 이름을 가져야 한다는 것입니다. 즉, 마운트 지점당 여러 마운트가 허용되지 않습니다.

local-fs.target어쨌든 일반 시스템 설치 단위처럼 종속성으로 자신을 주입하는 시스템 서비스 파일을 만들어 이 문제를 해결했습니다 .

/etc/systemd/system/boot-shadow-mount.service:

# Performs the shadow bind mount to hide the ESP at /boot
# and instead expose the ubuntu subdirectory.

[Unit]
Description=/boot shadow bind mount
Requires=boot.mount
Conflicts=umount.target

[Service]
Type=oneshot
ExecStart=/bin/mount --bind /boot/EFI/ubuntu /boot
ExecStop=/bin/umount /boot
RemainAfterExit=True

[Install]
RequiredBy=local-fs.target unattended-upgrades.service

관련 정보