Debian

initramfs、LUKS 和 dm_mod 升級後無法啟動

  • April 23, 2017

我的樹莓派(現在距離我 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/moduleschroot.

這樣做之後,我的樹莓派又可以正常啟動了。

引用自:https://unix.stackexchange.com/questions/327914