긴 이야기 짧게: 예측 가능한 파티션 이름을 사용하여 initramfs에서 squashfs 파티션을 부팅하는 방법은 무엇입니까? /dev/sda2
장치 이름이 무작위로 재정렬되고 때로는 잘못된 파티션에서 부팅되기 때문에 작동하지 않습니다.
우리는 다음과 같이 젠투의 사용자 정의 설치를 사용합니다:
/dev/sda1: /boot ext4 (unencrypted)
/dev/sda2: / squashfs (unencrypted)
/dev/sda3: /home ext4 (dm-crypt)
/dev/sda4: - swap
우리는 루트 파티션과 tmpfs를 오버레이 파일 시스템으로 마운트하는 사용자 정의 initramfs 스크립트를 만들었습니다. 우리는 사용했었다이 가이드다음과 같습니다.
#!/bin/busybox sh
mount -t proc none /proc
mount -t sysfs none /sys
# Mount the root filesystem.
mount -t squashfs -o ro /dev/sda2 /mnt/overlay
# (some stuff to set up the overlay with tmpfs is done here)
# Clean up.
umount /proc
umount /sys
# Boot the real thing.
exec switch_root /mnt/overlay /sbin/init
이 디스크가 시스템의 유일한 디스크인 한, /dev/sda2
디스크가 하나만 있는 시스템에서는 항상 루트 파티션이기 때문에 제대로 부팅되고 모든 것이 잘 작동합니다.
이 사용자 지정 설치는 다른 도시로 배송될 예정이므로 자동 업데이트 시스템을 개발 중입니다. 이상적으로는 고객이 USB 스틱을 삽입하고 업데이트가 완료될 때까지 기다리기만 하면 시스템을 업데이트할 수 있어야 합니다. 인터넷을 통한 업데이트는 선택 사항이 아닙니다. 데이터를 안전하게 유지하는 것이 최우선 과제이며, 우리가 선택한 파티셔닝 방식이 우리의 요구 사항에 충분히 안전하다고 믿습니다. 하지만 문제 해결을 의미한다면 새로운 아이디어에 열려 있습니다.
USB 플래시 드라이브 업데이트 시스템은 원본 젠투 설치의 복사본이며 정확히 동일한 파티션 구성표를 사용합니다. 그러나 USB 스틱의 initramfs 스크립트가 엉망이 되어 USB 업데이트 프로그램의 루트가 아닌 원래 설치의 루트를 선택하는 경우가 많습니다. 분명히 업데이트 프로그램(USB 드라이브의 루트 디렉터리에 위치)은 이와 같이 실행되지 않습니다.
/dev/sda2
USB 스틱의 initramfs 스크립트를 다음으로 교체해 보았습니다 .
/dev/disk/by-id/usb*part2
, GRUB2 메뉴에서는 이미 작동하지만/dev/disk
현재 존재하지 않기 때문에 initramfs 스크립트에서는 작동하지 않습니다. (그런데 왜 GRUB에 존재합니까?)$(findfs PARTUUID="partid-of-usb-squashfs-root")
, 쓸모 없는$(findfs UUID="x")
, 이것은 squashfs 파티션에 파일 시스템 UUID가 있는 경우 작동합니다(ext4 및 기타 파일 시스템에서 작동함).
가이드에서는 devtmpfs 또는 mdev를 사용하여 초기화 시 데이터를 채울 것을 권장 하지만 이것이 udev의 작업인 것처럼 보이고 initramfs 스크립트에서 부팅하는 것이 도움이 되지 않는 것 같기 때문에 /dev
이것이 어떻게 도움이 되는지 알 수 없습니다 ./dev/disk
devtmpfs
루트 파티션에 파일 시스템 UUID가 없을 때 initramfs 스크립트에서 예측 가능/영구 파티션 이름을 얻으려면 어떻게 해야 합니까?
파티션 구성표를 변경하는 것은 약간 어렵고 일반 Windows 사용자가 squashfs 루트 또는 /home 파티션을 보는 것을 원하지 않습니다. 하지만 매번 동일한 파티션에서 안정적으로 부팅할 수 있는 다른 방법이 있다면 시도해 보겠습니다. LVM이나 우리가 생각하지 못한 다른 일을 해보세요.
답변1
이를 위해 특별한 도구에 의존할 필요는 없습니다.
squashfs 파티션은 항상 파티션 구성표의 두 번째 파티션이라는 것을 아는 것으로 충분합니다. pendrive의 첫 번째 파티션의 UUID를 설정하고 $(findfs UUID=first-pendrive-partition)
결과를 사용하고 실행하기만 하면 됩니다.sed s/1/2/
이제 시스템은 항상 올바른 파티션을 감지합니다.
답변2
이 경우 LVM이 후보이지만 부트로더/initramfs에 복잡성을 추가합니다.
squashfs
블록 장치로 하나의 파일 시스템만 존재한다고 보장할 수 있습니까 ? 그렇다면 이것이 findfs TYPE=squashfs
올바른 루트 파일 시스템을 찾는 데 사용할 수 있는 방법입니다.
그러나 USB 키가 거의 동일하므로 squashfs
파일 시스템도 포함되어 있습니다. 따라서 추적 정보를 넣을 대체 장소를 찾기 시작해야 합니다. 귀하의 /boot
볼륨은 USB 키에 이동식 장치로 표시되는 항목이 있을 수 있고, 하드 드라이브에 실제 마운트로 표시되는 항목이 있을 수 있습니다.