问题

问题

我的Raspberry Pi(现在距离我10,000公里)的工作原理如下:

  • 它运行的是 Raspbian(2016 年 7 月的版本)
  • SD 卡包含/boot
  • 加密的硬盘驱动器(使用 LUKS cryptsetup)包含/
  • 当 Pi 启动时,我可以通过 SSH 远程解锁 HDD dropbear。它要求输入 HDD 的密码,然后启动顺序将正常继续。

有关我如何完成这一切的更多信息,请阅读http://blog.romainpellerin.eu/raspberry-pi-the-ultimate-guide.html
长话短说这是一个缩短的版本:

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 解锁 HDD。然而,昨天我做到了aptitude update && aptitude upgrade。据我所知,这不会升级内核。无论如何,我重新启动了它。现在,我陷入了解锁步骤。即使我输入了正确的密码,它也会立即显示Can't change directory to <something/a kernel version>Cannot initialize device-mapper. Is dm_mod kernel module loaded?再次要求输入密码。

我无法告诉你它正在运行什么内核,因为我不久前设置了它并且不经常使用它。

抱歉缺少详细信息,我无法物理访问我的 Raspberry,并且昨天我将其关闭,因此我是根据我的记忆来讲述的。

假设

我很确定我可以通过调整来修复它/boot/initramfs.gz,但我不知道如何做。你能帮我吗?非常感谢。

答案1

我不知道是什么给您留下了让您的内核保持不变的印象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.

这样做之后,我的树莓派又正常启动了。

相关内容