단일 하드 드라이브에서 RAID1(mdraid)로 루트 파티션을 마이그레이션한 Debian 8 시스템을 부팅하는 데 문제가 있습니다.
부팅할 때마다 다음과 같은 grub 오류가 발생합니다.
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/disk/by-uuid/2ab18cb4-a23d-4e5c-b37d-cbd3077b878c does not exist.
Dropping to a shell!
modprobe: module ehci-orion not found in modules.dep
(initramfs)
/dev/md0시작되지 않았으므로 루트 파티션을 찾을 수 없습니다.
(initramfs) ls /dev/md*
ls: /dev/md*: No such file or directory
(initramfs)
하지만 수동으로 공격대를 시작할 수 있습니다.
(initramfs) mdadm --assemble --scan
mdadm: /dev/md0 has been started with 2 drives.
(initramfs) ls /dev/md*
/dev/md0
디렉토리를 수동으로 생성한 경우에만 시스템이 시작됩니다./dev/disk/by-uuid및 링크MD0:
(initramfs) mkdir /dev/disk/by-uuid
(initramfs) ln -s /dev/md0 /dev/disk/by-uuid/2ab18cb4-a23d-4e5c-b37d-cbd3077b878c
grub이 자체적으로 md 장치를 부팅하지 않는 이유를 알아내는 데 누군가 도움을 줄 수 있기를 바랍니다. 나는 인터넷에서 검색하고 찾을 수 있는 모든 것을 시도했지만 성공하지 못했습니다. 나는 지금 정말로 길을 잃었습니다.
나는부터 시작하고 싶다BIOS 레거시, 아니요UEFI.
연결된 하드 드라이브(SSD!) 2개만 다음과 같이 포맷됩니다.GPT파티션 테이블은 다음 파티션과 동일합니다.
1 1049kB 2097kB 1049kB bios_grub
2 2150MB 12,9GB 10,7GB ext4 raid
(그럽 컴퓨터첫 번째 파티션에서 부팅해야 함GPT운전사)
Raid1(v0.90 메타데이터)은 다음과 같이 직접 형식화됩니다.외부 4.
라이브 시스템 chroot를 통해 설치했습니다.그럽 컴퓨터도착하다/dev/sda그리고/dev/sdb, 내 것을 변경했습니다시스템 테이블, 실행 update-grub
및 update-initramfs -u -k all
.
blkid
:
/dev/sda2: UUID="b59d3baf-346b-568d-03a2-8b26060640c5" TYPE="linux_raid_member" PARTUUID="0609ba5b-9065-41f8-80ed-6832e3236ec9"
/dev/sdb2: UUID="b59d3baf-346b-568d-03a2-8b26060640c5" TYPE="linux_raid_member" PARTUUID="24ee1040-02dd-4867-b4da-5be11d59bdcd"
/dev/md0: UUID="2ab18cb4-a23d-4e5c-b37d-cbd3077b878c" TYPE="ext4"
/dev/sda1: PARTUUID="df5161cf-b5b3-422c-9ed2-90a7750ac265"
/dev/sdb1: PARTUUID="7d20b55b-ba50-4187-b05e-ae1f18b21de3"
mdadm.conf다음을 포함합니다(만!) mdadm --detail --scan
:
ARRAY /dev/md0 metadata=0.90 UUID=b59d3baf:346b568d:03a28b26:060640c5
이건 내 발췌문이야/boot/grub/grub.cfg:
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod part_gpt
insmod diskfilter
insmod mdraid09
insmod ext2
set root='mduuid/b59d3baf346b568d03a28b26060640c5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='mduuid/b59d3baf346b568d03a28b26060640c5' 2ab18cb4-a23d-4e5c-b37d-cbd3077b878c
else
search --no-floppy --fs-uuid --set=root 2ab18cb4-a23d-4e5c-b37d-cbd3077b878c
fi
echo 'Linux 3.16.0-4-amd64 wird geladen …'
linux /boot/vmlinuz-3.16.0-4-amd64 root=UUID=2ab18cb4-a23d-4e5c-b37d-cbd3077b878c ro rootdelay=20
echo 'Initiale Ramdisk wird geladen …'
initrd /boot/initrd.img-3.16.0-4-amd64
답변1
실제로 이 작업을 수행하는 것은 grub이 아니라 initramfs입니다. 데비안에서 기본 initramfs 구현은 다음과 같습니다.initramfs-tools
팩. initramfs가 루트 파일 시스템을 얼마나 잘 마운트할 수 있는지는 initramfs
마지막 호출 시 설치된 패키지(패키지는 기능 확장을 위해 후크 스크립트를 추가할 수 있음) update-initramfs
및 구성 방법을 포함한 여러 요소에 따라 달라집니다.
문제는 mdraid 장치가 재구축되지 않은 것 같으므로 mdadm
패키지가 올바르게 구성되지 않은 것 같습니다. 먼저 이 문제를 해결해 보세요.
sudo dpkg-reconfigure mdadm
그 후에는 initramfs가 자동으로 업데이트되어야 합니다.
이렇게 해도 문제가 해결되지 않고 소프트웨어 RAID로 마이그레이션하는 과정에서 새 파일 시스템을 생성한 경우 fstab
이전 파일 시스템의 UUID가 더 이상 새 파일 시스템과 일치하지 않을 수 있습니다. 확인하다:
grep $(blkid /dev/md0) /etc/fstab
출력이 생성되지 않으면 /etc/fstab
출력을 편집하여 루트 장치에서 지정한 UUID를 바꾸고 blkid /dev/md0
다시 실행합니다 update-initramfs
.