갑자기 내 Ubuntu 16.04에 initramfs
다음 메시지가 나타났습니다.
BusyBox v.1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for list of built-in commands.
(initramfs)
입력하면 exit
다음과 같은 결과가 나타납니다.
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/mapper/ubuntu--vg-root does not exist. Dropping to a shell!
BusyBox v.1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for list of built-in commands.
(initramfs)
지금까지 성공하지 못한 채 시도한 것:
- USB 부팅 디스크를 사용하여 슈퍼블록 백업을 복원해 보면 여전히 부팅할 수 있습니다.
SHIFT
grub을 누르는 동안 고급 옵션에서 하나의 커널만 볼 수 있기 때문에 다른 커널로 부팅할 수 없습니다 .
grub 화면에 도달했을 때 다음을 누르면 e
내 설정이 표시됩니다.
setparams 'Ubuntu'
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 7ec61194-f216-4f1b-b684-5b2e2d643c25
else
search --no-floppy --fs-uuid --set=root 7ec61194-f216-4f1b-b684-5b2e2d643c25
fi
linux /vmlinux-4.4.0-24-generic root=/dev/mapper/ubuntu--vg-root ro quiet splash $vt_handoff
initrd /initrd.img-4.4.0-24-generic
부팅 가능한 LIVE USB 디스크로 부팅하면 sudo fdisk -l
다음이 반환됩니다.
Disk /dev/sda: 480.1 GB, 480103981056 bytes
255 heads, 63 sectors/track, 58369 cylinders, total 937703088 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x60229a0a
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 999423 498688 83 Linux
/dev/sda2 1001470 937701375 468349953 5 Extended
/dev/sda5 1001472 937701375 468349952 83 Linux
Disk /dev/sdb: (skipping since I think this is the USB disk...)
노틸러스를 통해 파티션을 마운트하면(암호화된 파티션에서 비밀번호를 묻는 메시지가 표시됨) 다음 sudo lsblk
이 반환됩니다.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 447.1G 0 disk
├─sda1 8:1 0 487M 0 part /media/ubuntu/7ec61194-f216-4f1b-b684-5b2e2d643c
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 446.7G 0 part
└─luks-11613ca4-65f2-4079-a750-6f71b6318903 (dm-0) 252:0 0 446.7G 0 crypt
└─ubuntu--vg-root (dm-1) 252:1 0 439.2G 0 lvm
└─ubuntu--vg-swap_1 (dm-2) 252:2 0 7.5G 0 lvm
sdb 8:16 1 1.9G 0 disk
└─sdb1 8:17 1 1.9G 0 part /cdrom
sr0 11:0 1 1024M 0 rom
loop0 7:0 0 938.7M 1 loop
뭐가 문제 야? 시스템 부팅이 중단되고 평소처럼 암호화 비밀번호를 묻는 이유는 무엇입니까? 감사해요!
답변1
LiveCD(링크의 최신 버전일 수 있음)에서 아래 스크립트를 실행해 볼 수 있습니다. 이 스크립트는 프로세스를 부분적으로 자동화하려고 시도합니다. NVMe 드라이브용으로 작성되고 테스트되었으므로 경로가 있는 SATA/IDE 드라이브를 사용하는 경우 약간 변경해야 할 수도 있습니다 /dev/sd*
. EFI를 사용하지 않는 경우에는 또는 스크립트를 컴퓨터에 저장한 후 스크립트를 실행하여 efi
포함된 줄을 제거할 수 있습니다. 결국 이를 위해 일부 감지 논리를 추가해야 합니다.EFI
sed -i -e '/efi/d' -e '/EFI/d' crypt-fix.sh
https://gist.github.com/dragon788/e777ba64d373210e4f6306ad40ee0e80
암호화 수리.sh
#!/bin/bash
# Call with `sudo bash DEBUG=1 ./crypt-fix.sh` for verbose output
[ -n "$DEBUG"] && set -x
# Prompt user for device from /dev/sd* /dev/nvme* /dev/mmc* prefixes?
# For /dev/sda probably sda1 is EFI and sda2 is boot and sda3 is encrypted
DEVICE=/dev/nvme0n1
EFIPATH="${DEVICE}p1"
BOOTPATH="${DEVICE}p2"
CRYPTPATH="${DEVICE}p3"
TARGETPATH=/mnt
# Need root for mounting stuff
if ! (( $EUID == 0 )); then echo "Please run with `sudo $0`"; fi
clear_mounts () {
# Clears mounts in case of interrupt or upon exit to allow running script multiple times
umount $TARGETPATH/boot/efi
umount $TARGETPATH/boot
umount $TARGETPATH/proc
umount $TARGETPATH/dev
umount $TARGETPATH
vgchange -an
cryptsetup close temp_name
cryptsetup close $CRYPTNAME
set +x
}
trap clear_mounts INT EXIT
cryptsetup open $CRYPTPATH temp_name
vgchange -ay
# Can't get this until LVM devices are scanned above
ROOTPATH=$(ls /dev/mapper/* | grep root)
# Make sure nothing else is mounted on our $TARGETPATH
umount $TARGETPATH
wait
mount $ROOTPATH $TARGETPATH
# Find the name that is required for `update-initramfs` to properly update things
CRYPTNAME=$(cat $TARGETPATH/etc/crypttab | awk '/^[ ]*[^#]/ { print $1; exit }')
umount $TARGETPATH
vgchange -an
cryptsetup close temp_name
# This proper name is required for `update-initramfs` to properly update things
cryptsetup open $CRYPTPATH $CRYPTNAME
wait
vgchange -ay
ROOTPATH=$(ls /dev/mapper/* | grep root)
mount $ROOTPATH $TARGETPATH
mount $BOOTPATH $TARGETPATH/boot
mount $EFIPATH $TARGETPATH/boot/efi
mount -t proc proc $TARGETPATH/proc
mount -o bind /dev $TARGETPATH/dev
# Have also seen people mounting dev/pts and run and sys, they don't appear to be necessary
chroot $TARGETPATH update-initramfs -c -k all
echo "Completed crypt-fix, try rebooting and you should get prompted for your passphrase after grub"