initramfs、LUKS 和 dm_mod 升級後無法啟動
我的樹莓派(現在距離我 10,000 公里)的工作原理如下:
- 它正在執行 Raspbian(2016 年 7 月的版本)
- SD卡包含
/boot
- 加密硬碟驅動器(使用 LUKS
cryptsetup
)包含/
- 當 Pi 啟動時,我可以
dropbear
通過 SSH 遠端解鎖硬碟。它要求輸入硬碟的密碼,然後啟動順序正常繼續。有關我如何完成這一切的更多資訊,請閱讀http://blog.romainpellerin.eu/raspberry-pi-the-ultimate-guide.html。
TL;DR這裡是一個縮短的版本:
apt-get install busybox cryptsetup rsync echo "initramfs initramfs.gz 0x00f00000" >> /boot/config.txt sed -e "s|root=/dev/mmcblk0p2|root=/dev/mapper/hddcrypt cryptdevice=/dev/sda1:hddcrypt|" -i /boot/cmdline.txt sed -e "s|/dev/mmcblk0p2|/dev/mapper/hddcrypt|" -i /etc/fstab echo -e "hddcrypt\t/dev/sda1\tnone\tluks" >> /etc/crypttab cryptsetup --verify-passphrase -c aes-xts-plain64 -s 512 -h sha256 luksFormat /dev/sda1 mkinitramfs -o /boot/initramfs.gz $(uname -r) aptitude install dropbear // Configuring the SSH access here... mkinitramfs -o /boot/initramfs.gz $(uname -r) update-initramfs -u
問題
直到昨天,一切正常。我可以重新啟動它並通過 SSH 解鎖硬碟。然而,昨天我做到了
aptitude update && aptitude upgrade
。據我所知,這不會升級核心。無論如何,我重新啟動了它。現在,我被困在解鎖步驟上。即使我輸入了正確的密碼,它也會立即說出Can't change directory to <something/a kernel version>
並Cannot initialize device-mapper. Is dm_mod kernel module loaded?
不斷再次要求輸入密碼。我不能告訴你它執行的是什麼核心,因為我前段時間設置並且沒有使用太多。
抱歉沒有詳細說明,我沒有物理訪問我的樹莓派,昨天我把它關掉了,所以我是從我記得的事情中說出來的。
假設
我很確定我可以通過調整來修復它,
/boot/initramfs.gz
但我不知道如何。你能幫我嗎?非常感謝你。
我不知道是什麼給了您一種
aptitude upgrade
不會影響您的核心的印象,它根本不會。在我的加密 pi 上更新核心後,我遇到了同樣的問題。問題是您的 initramfs 需要重建。這是在外部機器上執行此操作的方法。首先,將帶有加密 raspbian 的 SD 卡插入外部電腦,然後像這樣安裝所有東西:
cryptsetup -v luksOpen /dev/mmcblk0p2 thunderdome mount /dev/mapper/thunderdome /mnt mount /dev/mmcblk0p1 /mnt/boot mount -o bind /dev /mnt/dev mount -t sysfs none /mnt/sys mount -t proc none /mnt/proc
安裝 qemu 以模擬樹莓派二進製文件:
apt-get install qemu qemu-user-static binfmt-support
根據這個要點,最好
/mnt/etc/ld.so.preload
在繼續之前刪除所有行,這就是sed
以下命令的作用:# comment out ld.so.preload sed -i 's/^/#/g' /mnt/etc/ld.so.preload # copy qemu binary cp /usr/bin/qemu-arm-static /mnt/usr/bin/ # chroot to raspbian and rebuild initramfs chroot /mnt /bin/bash mkinitramfs -o /boot/initramfs.gz [NEW RASPBIAN KERNEL VERSION] exit # undo damage sed -i 's/^#//g' /mnt/etc/ld.so.preload umount /mnt/{dev,sys,proc,boot}
您可以通過
/lib/modules
在chroot
.這樣做之後,我的樹莓派又可以正常啟動了。