systemd-boot가 내 루트 디렉터리를 찾을 수 없습니다

systemd-boot가 내 루트 디렉터리를 찾을 수 없습니다

Debian 테스트(Buster)를 실행 중이고 Grub2에서 systemd로 전환 중인데 Grub2를 작동시킬 수 없기 때문에 누군가 systemd-boot를 시도해 보라고 제안했습니다.

부팅/루트 드라이브는 마더보드의 eMMC 드라이브에 있고 데이터 드라이브는 mSATA SSD에 있습니다.

내 systemd-boot가 절반만 작동하고 부팅 시 이 메시지와 함께 충돌이 발생합니다.

Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
done.
Gave up waiting for root file system device. Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT! PARTUUID=2251a5a4-6c18-425c-9264-df971d297b09 does not exist. Dropping to shell!

재부팅하고 SuperGrub USB 디스크를 사용하여 로그인했는데 UUID가 내 루트 파티션과 일치하는 것을 볼 수 있는데 왜 찾을 수 없는지 모르겠습니다.

/proc/cmdline 출력

BOOT_IMAGE=/boot/vmlinuz-4.19.0-5-amd64 root=UUID=2251a5a4-6c18-425c-9264-df971d297b09 ro

/boot 및 /boot/efi 목록

kodi@BB-8:~$ ls /boot
config-4.15.0-3-amd64    grub                         System.map-4.15.0-3-amd64    vmlinuz-4.19.0-5-amd64
config-4.19.0-5-amd64    initrd.img-4.15.0-3-amd64    System.map-4.19.0-5-amd64    vmlinuz-4.9.45-ubilinux+
config-4.9.45-ubilinux+  initrd.img-4.19.0-5-amd64    System.map-4.9.45-ubilinux+
efi                      initrd.img-4.9.45-ubilinux+  vmlinuz-4.15.0-3-amd64

kodi@BB-8:~$ sudo ls /boot/efi
debian  EFI  loader

kodi@BB-8:~$ sudo ls /boot/efi/debian
drwx------ 2 root root     4096 Jul 16 22:31 .
drwx------ 5 root root     4096 Jan  1  1970 ..
-rwx------ 1 root root 31595838 Jul 26 11:09 initrd.img-4.15.0-3-amd64
-rwx------ 1 root root 33228805 Jul 26 11:09 initrd.img-amd64
-rwx------ 1 root root  4933392 Jul 26 11:09 vmlinuz-4.15.0-3-amd64
-rwx------ 1 root root  5217520 Jul 26 11:09 vmlinuz-amd64

드라이브 UUID 및 df 명령

kodi@BB-8:~$ ls -al /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 220 Jul 26 08:59 .
drwxr-xr-x 8 root root 160 Jul 26 08:58 ..
lrwxrwxrwx 1 root root  15 Jul 26 11:10 2251a5a4-6c18-425c-9264-df971d297b09 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root  10 Jul 26 11:10 42a36b04-83f8-4105-aef4-7f24b9ffff66 -> ../../sdb3
lrwxrwxrwx 1 root root  10 Jul 26 11:10 8280cf20-b70e-44f4-b092-6d3f92d54eab -> ../../dm-0
lrwxrwxrwx 1 root root  10 Jul 26 11:10 8A84-E6C0 -> ../../sdb2
lrwxrwxrwx 1 root root  10 Jul 26 11:10 8B91-8099 -> ../../sdb4
lrwxrwxrwx 1 root root  15 Jul 26 11:10 A9CE-4035 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root  10 Jul 26 11:10 b2a67d10-07da-4eb4-bc16-b768084db045 -> ../../sda1
lrwxrwxrwx 1 root root  10 Jul 26 11:10 b618f5b0-2b8a-4e33-b288-407fd4355f83 -> ../../sdb5
lrwxrwxrwx 1 root root  10 Jul 26 11:10 f9a00ae7-07d2-4726-947b-03a4074049dd -> ../../sda2

kodi@BB-8:~$ df -h
Filesystem              Size  Used Avail Use% Mounted on
udev                    3.9G     0  3.9G   0% /dev
tmpfs                   783M   78M  705M  10% /run
/dev/mmcblk0p2           57G   14G   41G  26% /
tmpfs                   3.9G   39M  3.8G   1% /dev/shm
tmpfs                   5.0M  4.0K  5.0M   1% /run/lock
tmpfs                   3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               820G  555G  224G  72% /home
/dev/mmcblk0p1          511M   82M  429M  17% /boot/efi
/dev/sda2                96G   67G   24G  74% /home/hts
10.1.1.1:/media/backup  2.7T  2.3T  178G  93% /media/backup
tmpfs                   783M   44K  783M   1% /run/user/1001
/dev/dm-0               7.8G   36M  7.3G   1% /media/kodi/8280cf20-b70e-44f4-b092-6d3f92d54eab
/dev/sdb4               7.9G  4.8G  3.2G  61% /media/kodi/DATA
/dev/sdb3                14G   12G  1.7G  88% /media/kodi/boot

업데이트: 모듈 추가됨

/etc/initramfs-tools/modules에 추가

mmc_core
mmc_block
sdhci
sdhci-pci

그런 다음 4.19.0-5 커널을 입력하십시오.

sudo update-initramfs -u -k all

다시 시작해도 같은 메시지가 나타납니다.

업데이트: 내 systemd loader.conf

이것은 내 /boot/efi/loader/entries/debian.conf입니다.

title   Debian
linux   /debian/vmlinuz-amd64
initrd  /debian/initrd.img-amd64
options root=PARTUUID=2251a5a4-6c18-425c-9264-df971d297b09 rw

이것은 루트로 설치한 /dev/mmcblk0p2 eMMC 장치의 UUID입니다.

답변1

다시 살펴보면 PARTUUID=...와 UUID=... 사이에 불일치가 있는 것으로 보이며 이것이 문제의 원인입니다.

부트로더가 다음과 같이 구성되었다고 언급하셨습니다.

옵션 루트 =파투 UID=2251a5a4-6c18-425c-9264-df971d297b09 읽기 및 쓰기

그러나 실행하면 실제로 다음 위치에서 이 UUID를 찾을 수 있습니다 /dev/disk/by-uuid.

kodi@BB-8:~$ ls -al /dev/disk/-uuid를 누르세요/
lrwxrwxrwx 1 루트 7월 26일, 15일, 11:10 2251a5a4-6c18-425c-9264-df971d297b09 -> ../../mmcblk0p2

또한 이는 /proc/cmdline성공적인 부팅 목록에도 나열되어 있습니다(SuperGrub USB를 사용한 부팅이라고 가정합니다).

/proc/cmdline산출

BOOT_IMAGE=/boot/vmlinuz-4.19.0-5-amd64 루트=보편적으로 고유한 식별자=2251a5a4-6c18-425c-9264-df971d297b09 루오

두 UUID는 서로 다릅니다. PARTUUID=는 GPT 파티션 테이블에 있는 UUID입니다(파티션 테이블에 기록된 파티션의 속성이므로 "PART"라고 합니다). UUID=는 파일 시스템(ext4) UUID에 기록됩니다. xfs 또는 파티션을 포맷한 파일 시스템), Linux는 디스크를 스캔할 때 이러한 파일 시스템을 읽을 수 있습니다.

따라서 가지고 있는 UUID가 다음과 같으므로 PARTUUID= 대신 UUID=를 사용하도록 부팅 옵션을 수정해야 하는 것 같습니다.파일 시스템대신 UUID분할UUID.

파일을 편집 /boot/efi/loader/entries/debian.conf하고 마지막 줄을 다음으로 바꿉니다.

옵션 루트 =보편적으로 고유한 식별자=2251a5a4-6c18-425c-9264-df971d297b09 읽기 및 쓰기

그러면 문제가 해결될 것입니다!

/etc/fstab시스템의 태그도 올바른지 확인하세요 .

blkid이 명령을 사용하여 파티션과 파일 시스템에 있는 UUID를 확인할 수도 있습니다 . 이는 귀하가 올바른 정보를 갖고 있는지 확인하는 데 도움이 될 수 있습니다.유형UUID.

예를 들어, use는 blkid -o export다음과 같이 표시되어야 합니다.

$ sudo blkid -o export
DEVNAME=/dev/mmcblk0p1
SEC_TYPE=msdos
LABEL=boot
UUID=9A8B-7C6D
TYPE=vfat
PARTUUID=abcd1234-01

DEVNAME=/dev/mmcblk0p2
UUID=2251a5a4-6c18-425c-9264-df971d297b09
TYPE=ext4
PARTUUID=abcd1234-01

...

이는 Linux 식별 태그가 있는 모든 UUID를 보는 데 도움이 됩니다.

답변2

루트 파티션이 있는 장치 /dev/mmcblk0는 SD 카드입니다. 이러한 장치의 모듈은 일반적으로 커널이 아닌 외부 모듈로 컴파일되므로 루트 파일 시스템이 마운트되기 전에 로드될 수 있도록 initramfs(또는 initrd)에 포함되어야 합니다.

데비안에서는 다음 initrd.img을 사용하여 파일을 다시 빌드 할 수 있습니다.update-initramfs주문하다.

하지만 먼저 필요한 모듈이 업데이트된 initramfs에 포함되도록 구성을 업데이트해야 합니다.

MODULESin 지시어를 사용하여 구성하거나 , 로드할 모듈과 로드할 모듈을 /etc/initramfs-tools/initramfs.conf나열할 수 있습니다 . 바라보다/etc/initramfs-tools/modules/usr/share/initramfs-tools/modules.d/*man initramfs.conf자세한 내용은.

필요한 모듈은 mmc_core및 입니다 mmc_block. sdhci및 이 필요할 수도 sdhci-pci있으므로 해당 항목도 나열하는 것이 좋습니다.

구성을 업데이트한 후 다음을 수행하여 부팅하려는 커널 버전에 대한 initramfs를 다시 생성합니다.

$ sudo update-initramfs -u -k 4.19.0-5-amd64

또는 모든 코어에 대해 initramfs 파일을 다시 생성합니다.

$ sudo update-initramfs -u -k all

커널이 부팅 시 루트 파티션을 찾는 데 필요한 전부가 이것이기를 바랍니다.

답변3

지금까지 여기에는 약간의 오해가 있었던 것 같습니다. 출력에 언급된 누락된 모듈은 다음과 같습니다.아니요커널 모듈이지만부트 로더기준 치수. 부트로더가 커널 이미지 자체를 찾는 데 문제가 있는 것으로 나타났습니다. 아마도 부트로더가 탑재된 장치를 처리할 수 없기 때문일 것입니다. 이 단계에서는 커널 모듈은 관련이 없습니다.

저는 systemd-boot에 전혀 익숙하지 않지만, 추가해야 하는 모든 모듈은 /boot/efi/부트로더가 설치된 파티션 어딘가에 있을 것으로 예상합니다. 이는 일반적으로 부팅 장치의 FAT32 파티션입니다.

관련 정보