Raspbian のカーネルが更新されてバージョンが変わったのに mkinitramfs し直す前に再起動してしまって、 起動できなくなってしまったので、 別マシンで chroot mkinitramfs するのが大変だったので、その記録です。

環境

前回の記事 の続きです。

  • Raspberry Pi 4B (4GB モデル)
  • Raspbian Buster Lite
  • 8GB の micro SDHC
  • 4TB の USB HDD

gluster のために、詳細が微妙に違う設定になっていて 3 台あって、 まずそのうち 1 台でカーネルの更新をして再起動してみると、 起動に失敗したので、他のマシンで復旧しました。

USB HDD を別の Raspbian に接続

lsblk でどこに接続されているか確認します。

gluster で snapshot をとるようにしているので、 vg4b3 には lv がたくさんありますが、 追加で接続した USB HDD は sdb に見えているのが確認できます。

pi@raspi4b3:~$ lsblk
NAME                                               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                                                  8:0    0  3.7T  0 disk
├─sda1                                               8:1    0  190M  0 part
└─sda2                                               8:2    0  3.7T  0 part
  └─lvmcrypt4b3                                    254:0    0  3.7T  0 crypt
    ├─vg4b3-thin4b3_tmeta                          254:1    0  128M  0 lvm
    │ └─vg4b3-thin4b3-tpool                        254:3    0  900G  0 lvm
    │   ├─vg4b3-thin4b3                            254:4    0  900G  0 lvm
    │   └─vg4b3-root4b3                            254:5    0   10G  0 lvm   /
    ├─vg4b3-thin4b3_tdata                          254:2    0  900G  0 lvm
    │ └─vg4b3-thin4b3-tpool                        254:3    0  900G  0 lvm
    │   ├─vg4b3-thin4b3                            254:4    0  900G  0 lvm
    │   └─vg4b3-root4b3                            254:5    0   10G  0 lvm   /
    ├─vg4b3-gfspool4b3_tmeta                       254:6    0  128M  0 lvm
    │ └─vg4b3-gfspool4b3-tpool                     254:8    0  2.5T  0 lvm
    │   ├─vg4b3-gfspool4b3                         254:9    0  2.5T  0 lvm
    │   ├─vg4b3-hyrule3                            254:10   0  1.1T  0 lvm   /export/hyrule
    │   ├─vg4b3-900ac05c62654b5481009612577d2d42_0 254:11   0  1.1T  0 lvm
    │   ├─vg4b3-e3e17ca5f3714073afb83157a6f3e5ba_0 254:12   0  1.1T  0 lvm
    │   ├─vg4b3-d9a1b06e082e4bd19c9c1c251e4cdfc6_0 254:13   0  1.1T  0 lvm
    │   ├─vg4b3-86f01eb36aa9409982bbba311d4edbac_0 254:14   0  1.1T  0 lvm
    │   ├─vg4b3-111339b884d74b62be16bffb4becdf4b_0 254:15   0  1.1T  0 lvm
    │   ├─vg4b3-0a12a543c806419d83cf48e96bc66638_0 254:17   0  1.1T  0 lvm
    │   ├─vg4b3-cb7fa4c2e5664817b2155a70f18b37fa_0 254:18   0  1.1T  0 lvm
    │   ├─vg4b3-2532c7240bab4e07acec15644001b893_0 254:19   0  1.1T  0 lvm
    │   └─vg4b3-39d6cb7a7b3143caa54956ae188710ff_0 254:20   0  1.1T  0 lvm
    └─vg4b3-gfspool4b3_tdata                       254:7    0  2.5T  0 lvm
      └─vg4b3-gfspool4b3-tpool                     254:8    0  2.5T  0 lvm
	├─vg4b3-gfspool4b3                         254:9    0  2.5T  0 lvm
	├─vg4b3-hyrule3                            254:10   0  1.1T  0 lvm   /export/hyrule
	├─vg4b3-900ac05c62654b5481009612577d2d42_0 254:11   0  1.1T  0 lvm
	├─vg4b3-e3e17ca5f3714073afb83157a6f3e5ba_0 254:12   0  1.1T  0 lvm
	├─vg4b3-d9a1b06e082e4bd19c9c1c251e4cdfc6_0 254:13   0  1.1T  0 lvm
	├─vg4b3-86f01eb36aa9409982bbba311d4edbac_0 254:14   0  1.1T  0 lvm
	├─vg4b3-111339b884d74b62be16bffb4becdf4b_0 254:15   0  1.1T  0 lvm
	├─vg4b3-0a12a543c806419d83cf48e96bc66638_0 254:17   0  1.1T  0 lvm
	├─vg4b3-cb7fa4c2e5664817b2155a70f18b37fa_0 254:18   0  1.1T  0 lvm
	├─vg4b3-2532c7240bab4e07acec15644001b893_0 254:19   0  1.1T  0 lvm
	└─vg4b3-39d6cb7a7b3143caa54956ae188710ff_0 254:20   0  1.1T  0 lvm
sdb                                                  8:16   0  3.7T  0 disk
├─sdb1                                               8:17   0  190M  0 part
└─sdb2                                               8:18   0  3.7T  0 part
mmcblk0                                            179:0    0  7.2G  0 disk
├─mmcblk0p1                                        179:1    0  256M  0 part  /boot
└─mmcblk0p2                                        179:2    0    7G  0 part

マウントするところまで

cryptsetup luksOpen で暗号化解除して、 pvscan, vgscan, lvscan で LVM の認識をして (あとで試してみたら scan は実行しなくても良さそうでした)、 /tmp/raspi4b2 以下にマウントしていきました。 /boot は EFI System Partition にして、 USB Mass Storage からの直接起動の準備中でした。 (これは成功したら後日別途書く予定です。)

pi@raspi4b3:~$ cat /etc/crypttab
# <target name> <source device>         <key file>      <options>
lvmcrypt4b3 /dev/disk/by-uuid/3c79891e-6abf-4559-8cde-4d298408c718 /etc/keys/lvmcrypt4b3.key luks,initramfs
pi@raspi4b3:~$ sudo cryptsetup luksOpen /dev/sdb2 lvmcrypt4b2
Enter passphrase for /dev/sdb2:
pi@raspi4b3:~$ lsblk
(snip)
sdb                                                  8:16   0  3.7T  0 disk
├─sdb1                                               8:17   0  190M  0 part
└─sdb2                                               8:18   0  3.7T  0 part
  └─lvmcrypt4b2                                    254:16   0  3.7T  0 crypt
    ├─vg4b2-thin4b2_tmeta                          254:21   0  128M  0 lvm
    │ └─vg4b2-thin4b2-tpool                        254:23   0  900G  0 lvm
    │   ├─vg4b2-thin4b2                            254:24   0  900G  0 lvm
    │   └─vg4b2-root4b2                            254:25   0   10G  0 lvm
    ├─vg4b2-thin4b2_tdata                          254:22   0  900G  0 lvm
    │ └─vg4b2-thin4b2-tpool                        254:23   0  900G  0 lvm
    │   ├─vg4b2-thin4b2                            254:24   0  900G  0 lvm
    │   └─vg4b2-root4b2                            254:25   0   10G  0 lvm
    ├─vg4b2-gfspool4b2_tmeta                       254:26   0  128M  0 lvm
    │ └─vg4b2-gfspool4b2-tpool                     254:28   0  2.5T  0 lvm
    │   ├─vg4b2-gfspool4b2                         254:29   0  2.5T  0 lvm
    │   ├─vg4b2-hyrule2                            254:30   0  1.1T  0 lvm
    │   ├─vg4b2-0a12a543c806419d83cf48e96bc66638_0 254:31   0  1.1T  0 lvm
    │   ├─vg4b2-cb7fa4c2e5664817b2155a70f18b37fa_0 254:32   0  1.1T  0 lvm
    │   ├─vg4b2-2532c7240bab4e07acec15644001b893_0 254:33   0  1.1T  0 lvm
    │   ├─vg4b2-39d6cb7a7b3143caa54956ae188710ff_0 254:34   0  1.1T  0 lvm
    │   ├─vg4b2-900ac05c62654b5481009612577d2d42_0 254:35   0  1.1T  0 lvm
    │   ├─vg4b2-e3e17ca5f3714073afb83157a6f3e5ba_0 254:36   0  1.1T  0 lvm
    │   ├─vg4b2-d9a1b06e082e4bd19c9c1c251e4cdfc6_0 254:37   0  1.1T  0 lvm
    │   ├─vg4b2-86f01eb36aa9409982bbba311d4edbac_0 254:38   0  1.1T  0 lvm
    │   └─vg4b2-111339b884d74b62be16bffb4becdf4b_0 254:39   0  1.1T  0 lvm
    └─vg4b2-gfspool4b2_tdata                       254:27   0  2.5T  0 lvm
      └─vg4b2-gfspool4b2-tpool                     254:28   0  2.5T  0 lvm
	├─vg4b2-gfspool4b2                         254:29   0  2.5T  0 lvm
	├─vg4b2-hyrule2                            254:30   0  1.1T  0 lvm
	├─vg4b2-0a12a543c806419d83cf48e96bc66638_0 254:31   0  1.1T  0 lvm
	├─vg4b2-cb7fa4c2e5664817b2155a70f18b37fa_0 254:32   0  1.1T  0 lvm
	├─vg4b2-2532c7240bab4e07acec15644001b893_0 254:33   0  1.1T  0 lvm
	├─vg4b2-39d6cb7a7b3143caa54956ae188710ff_0 254:34   0  1.1T  0 lvm
	├─vg4b2-900ac05c62654b5481009612577d2d42_0 254:35   0  1.1T  0 lvm
	├─vg4b2-e3e17ca5f3714073afb83157a6f3e5ba_0 254:36   0  1.1T  0 lvm
	├─vg4b2-d9a1b06e082e4bd19c9c1c251e4cdfc6_0 254:37   0  1.1T  0 lvm
	├─vg4b2-86f01eb36aa9409982bbba311d4edbac_0 254:38   0  1.1T  0 lvm
	└─vg4b2-111339b884d74b62be16bffb4becdf4b_0 254:39   0  1.1T  0 lvm
(snip)
pi@raspi4b3:~$ sudo pvscan
  PV /dev/mapper/lvmcrypt4b2   VG vg4b2           lvm2 [<3.64 TiB / <265.44 GiB free]
  PV /dev/mapper/lvmcrypt4b3   VG vg4b3           lvm2 [<3.64 TiB / <265.44 GiB free]
  Total: 2 [<7.28 TiB] / in use: 2 [<7.28 TiB] / in no VG: 0 [0   ]
pi@raspi4b3:~$ sudo vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg4b2" using metadata type lvm2
  Found volume group "vg4b3" using metadata type lvm2
pi@raspi4b3:~$ sudo lvscan
  ACTIVE            '/dev/vg4b2/thin4b2' [900.00 GiB] inherit
  ACTIVE            '/dev/vg4b2/root4b2' [10.00 GiB] inherit
  ACTIVE            '/dev/vg4b2/gfspool4b2' [2.50 TiB] inherit
  ACTIVE            '/dev/vg4b2/hyrule2' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/0a12a543c806419d83cf48e96bc66638_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/cb7fa4c2e5664817b2155a70f18b37fa_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/2532c7240bab4e07acec15644001b893_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/39d6cb7a7b3143caa54956ae188710ff_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/900ac05c62654b5481009612577d2d42_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/e3e17ca5f3714073afb83157a6f3e5ba_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/d9a1b06e082e4bd19c9c1c251e4cdfc6_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/86f01eb36aa9409982bbba311d4edbac_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b2/111339b884d74b62be16bffb4becdf4b_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/thin4b3' [900.00 GiB] inherit
  ACTIVE            '/dev/vg4b3/root4b3' [10.00 GiB] inherit
  ACTIVE            '/dev/vg4b3/gfspool4b3' [2.50 TiB] inherit
  ACTIVE            '/dev/vg4b3/hyrule3' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/0a12a543c806419d83cf48e96bc66638_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/cb7fa4c2e5664817b2155a70f18b37fa_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/2532c7240bab4e07acec15644001b893_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/39d6cb7a7b3143caa54956ae188710ff_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/900ac05c62654b5481009612577d2d42_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/e3e17ca5f3714073afb83157a6f3e5ba_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/d9a1b06e082e4bd19c9c1c251e4cdfc6_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/86f01eb36aa9409982bbba311d4edbac_0' [1.10 TiB] inherit
  ACTIVE            '/dev/vg4b3/111339b884d74b62be16bffb4becdf4b_0' [1.10 TiB] inherit
pi@raspi4b3:~$ mkdir /tmp/raspi4b2
pi@raspi4b3:~$ sudo mount /dev/vg4b2/root4b2 /tmp/raspi4b2
pi@raspi4b3:~$ sudo mount /dev/sdb1 /tmp/raspi4b2/boot

boot の比較

復旧を優先して詳細を見ていなかったのですが、 pieeprom.sig, pieeprom.upd, recovery.bin がなくなっているようです。

pi@raspi4b3:~$ ls /tmp/raspi4b2/boot
COPYING.linux           bcm2708-rpi-zero.dtb      bcm2711-rpi-4-b.dtb  fixup4.dat    fixup_x.dat   kernel8.img   start4x.elf
LICENCE.broadcom        bcm2709-rpi-2-b.dtb       bootcode.bin         fixup4cd.dat  initramfs.gz  overlays      start_cd.elf
bcm2708-rpi-b-plus.dtb  bcm2710-rpi-2-b.dtb       cmdline.txt          fixup4db.dat  issue.txt     start.elf     start_db.elf
bcm2708-rpi-b.dtb       bcm2710-rpi-3-b-plus.dtb  cmdline.txt.bak      fixup4x.dat   kernel.img    start4.elf    start_x.elf
bcm2708-rpi-cm.dtb      bcm2710-rpi-3-b.dtb       config.txt           fixup_cd.dat  kernel7.img   start4cd.elf
bcm2708-rpi-zero-w.dtb  bcm2710-rpi-cm3.dtb       fixup.dat            fixup_db.dat  kernel7l.img  start4db.elf
pi@raspi4b3:~$ ls /boot
COPYING.linux           bcm2709-rpi-2-b.dtb       cmdline.txt   fixup4x.dat   kernel7.img   start.elf     start_x.elf
LICENCE.broadcom        bcm2710-rpi-2-b.dtb       cmdline.txt~  fixup_cd.dat  kernel7l.img  start4.elf
bcm2708-rpi-b-plus.dtb  bcm2710-rpi-3-b-plus.dtb  config.txt    fixup_db.dat  kernel8.img   start4cd.elf
bcm2708-rpi-b.dtb       bcm2710-rpi-3-b.dtb       fixup.dat     fixup_x.dat   overlays      start4db.elf
bcm2708-rpi-cm.dtb      bcm2710-rpi-cm3.dtb       fixup4.dat    initramfs.gz  pieeprom.sig  start4x.elf
bcm2708-rpi-zero-w.dtb  bcm2711-rpi-4-b.dtb       fixup4cd.dat  issue.txt     pieeprom.upd  start_cd.elf
bcm2708-rpi-zero.dtb    bootcode.bin              fixup4db.dat  kernel.img    recovery.bin  start_db.elf

mkinitramfs (失敗)

単純に chroot だけだとうまくいきませんでした。

pi@raspi4b3:~$ sudo chroot /tmp/raspi4b2/ mkinitramfs -o /boot/initramfs.gz
W: missing /lib/modules/4.19.97-v7l+
W: Ensure all necessary drivers are built into the linux image!
depmod: ERROR: could not open directory /lib/modules/4.19.97-v7l+: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
cat: /var/tmp/mkinitramfs_gHjH8y/lib/modules/4.19.97-v7l+/modules.builtin: そのようなファイルやディレクトリはありません
find: ‘/var/tmp/mkinitramfs_gHjH8y/lib/modules/4.19.97-v7l+/kernel’: そのようなファイルやディレクトリはありません
cryptsetup: WARNING: Permissive UMASK (0022). Private key material within the
    initrd might be left unprotected.
/usr/share/initramfs-tools/hooks/cryptroot: 64: /usr/share/initramfs-tools/hooks/cryptroot: cannot open /proc/mounts: No such file
cryptsetup: WARNING: Couldn't determine root device
sed: /proc/cmdline を読み込めません: そのようなファイルやディレクトリはありません
grep: /proc/swaps: そのようなファイルやディレクトリはありません
/usr/share/initramfs-tools/hooks/cryptroot: 64: /usr/share/initramfs-tools/hooks/cryptroot: cannot open /proc/mounts: No such file
cryptsetup: ERROR: Couldn't resolve device
    /dev/disk/by-uuid/939cb4b1-46d5-470b-958b-a5f2de176608
/proc/devices: fopen failed: そのようなファイルやディレクトリはありません
Failed to set up list of device-mapper major numbers
Incompatible libdevmapper 1.02.155 (2018-12-18) and kernel driver (unknown version).
Command failed.
cryptsetup: WARNING: Couldn't determine cipher modules to load for lvmcrypt4b2
grep: /proc/cpuinfo: そのようなファイルやディレクトリはありません
W: Couldn't identify type of root file system for fsck hook
depmod: WARNING: could not open modules.order at /var/tmp/mkinitramfs_gHjH8y/lib/modules/4.19.97-v7l+: No such file or directory
depmod: WARNING: could not open modules.builtin at /var/tmp/mkinitramfs_gHjH8y/lib/modules/4.19.97-v7l+: No such file or directory

対象のカーネルのバージョンを追加の引数に指定しました。 これでも /proc などをマウントしていないと、何かがうまくいっていなさそうでした。

pi@raspi4b3:~$ sudo chroot /tmp/raspi4b2/ mkinitramfs -o /boot/initramfs.gz 4.19.118-v7l+
cryptsetup: WARNING: Permissive UMASK (0022). Private key material within the
    initrd might be left unprotected.
/usr/share/initramfs-tools/hooks/cryptroot: 64: /usr/share/initramfs-tools/hooks/cryptroot: cannot open /proc/mounts: No such file
cryptsetup: WARNING: Couldn't determine root device
sed: /proc/cmdline を読み込めません: そのようなファイルやディレクトリはありません
grep: /proc/swaps: そのようなファイルやディレクトリはありません
/usr/share/initramfs-tools/hooks/cryptroot: 64: /usr/share/initramfs-tools/hooks/cryptroot: cannot open /proc/mounts: No such file
cryptsetup: ERROR: Couldn't resolve device
    /dev/disk/by-uuid/939cb4b1-46d5-470b-958b-a5f2de176608
/proc/devices: fopen failed: そのようなファイルやディレクトリはありません
Failed to set up list of device-mapper major numbers
Incompatible libdevmapper 1.02.155 (2018-12-18) and kernel driver (unknown version).
Command failed.
cryptsetup: WARNING: Couldn't determine cipher modules to load for lvmcrypt4b2
grep: /proc/cpuinfo: そのようなファイルやディレクトリはありません
W: Couldn't identify type of root file system for fsck hook

追加で bind mount して mkinitramfs (成功)

最終的に /proc, /dev, /sys を bind mount するとうまくいきました。

130 pi@raspi4b3:~$ sudo chroot /tmp/raspi4b2/ mkinitramfs -o /boot/initramfs.gz 4.19.118-v7l+
cryptsetup: WARNING: Permissive UMASK (0022). Private key material within the
    initrd might be left unprotected.
/usr/share/initramfs-tools/hooks/cryptroot: 64: /usr/share/initramfs-tools/hooks/cryptroot: cannot open /proc/mounts: No such file
cryptsetup: WARNING: Couldn't determine root device
sed: /proc/cmdline を読み込めません: そのようなファイルやディレクトリはありません
grep: /proc/swaps: そのようなファイルやディレクトリはありません
/usr/share/initramfs-tools/hooks/cryptroot: 64: /usr/share/initramfs-tools/hooks/cryptroot: cannot open /proc/mounts: No such file
cryptsetup: ERROR: Couldn't resolve device
    /dev/disk/by-uuid/939cb4b1-46d5-470b-958b-a5f2de176608
/proc/devices: fopen failed: そのようなファイルやディレクトリはありません
Failed to set up list of device-mapper major numbers
Incompatible libdevmapper 1.02.155 (2018-12-18) and kernel driver (unknown version).
Command failed.
cryptsetup: WARNING: Couldn't determine cipher modules to load for lvmcrypt4b2
grep: /proc/cpuinfo: そのようなファイルやディレクトリはありません
W: Couldn't identify type of root file system for fsck hook
pi@raspi4b3:~$ sudo mount --bind /proc /tmp/raspi4b2/proc
pi@raspi4b3:~$ sudo chroot /tmp/raspi4b2/ mkinitramfs -o /boot/initramfs.gz 4.19.118-v7l+
cryptsetup: WARNING: Permissive UMASK (0022). Private key material within the
    initrd might be left unprotected.
cryptsetup: ERROR: Couldn't resolve device /dev/mapper/vg4b2-root4b2
cryptsetup: WARNING: Couldn't determine root device
cryptsetup: ERROR: Couldn't resolve device
    /dev/disk/by-uuid/939cb4b1-46d5-470b-958b-a5f2de176608
W: Couldn't identify type of root file system for fsck hook
pi@raspi4b3:~$ sudo mount --bind /dev /tmp/raspi4b2/dev
pi@raspi4b3:~$ sudo chroot /tmp/raspi4b2/ mkinitramfs -o /boot/initramfs.gz 4.19.118-v7l+
cryptsetup: WARNING: Permissive UMASK (0022). Private key material within the
    initrd might be left unprotected.
cryptsetup: ERROR: Couldn't find sysfs directory for 254:25
pi@raspi4b3:~$ sudo mount --bind /sys /tmp/raspi4b2/sys
pi@raspi4b3:~$ sudo chroot /tmp/raspi4b2/ mkinitramfs -o /boot/initramfs.gz 4.19.118-v7l+
cryptsetup: WARNING: Permissive UMASK (0022). Private key material within the
    initrd might be left unprotected.
pi@raspi4b3:~$

initramfs.gz の中身確認

このような感じで initramfs.gz の中身を確認できます。 以前の記事で鍵ファイルが 0 バイトになっていたのを直した部分は 次の記事に分割しています。

pi@raspi4b3:~$ file /tmp/raspi4b2/boot/initramfs.gz
/tmp/raspi4b2/boot/initramfs.gz: gzip compressed data, last modified: Thu May 28 11:03:40 2020, from Unix, original size 30624256
pi@raspi4b3:~$ zcat /tmp/raspi4b2/boot/initramfs.gz > /tmp/initramfs
pi@raspi4b3:~$ file /tmp/initramfs
/tmp/initramfs: ASCII cpio archive (SVR4 with no CRC)
pi@raspi4b3:~$ cpio -it < /tmp/initramfs | less
pi@raspi4b3:~$ (mkdir -p /tmp/initrd && cd /tmp/initrd && cpio -id < /tmp/initramfs)
pi@raspi4b3:~$ ls -al /tmp/initrd/cryptroot/
合計 16
drwxr-xr-x 3 pi pi 4096  5月 28 20:09 .
drwxr-xr-x 8 pi pi 4096  5月 28 20:09 ..
-rw-r--r-- 1 pi pi  118  5月 28 20:09 crypttab
drwx------ 2 pi pi 4096  5月 28 20:09 keyfiles
pi@raspi4b3:~$ ls -al /tmp/initrd/cryptroot/keyfiles/
合計 8
drwx------ 2 pi pi 4096  5月 28 20:09 .
drwxr-xr-x 3 pi pi 4096  5月 28 20:09 ..
-r-------- 1 pi pi    0  5月 28 20:09 lvmcrypt4b2.key
pi@raspi4b3:~$ ls -al /tmp/raspi4b2/etc/keys/
合計 8
drwxr-xr-x   2 root root 4096  3月  2 00:05 .
drwxr-xr-x 104 root root 4096  5月 28 18:03 ..
-r--------   1 root root    0  3月  2 00:05 lvmcrypt4b2.key
pi@raspi4b3:~$

initramfs.gz をコピー

MacBook Pro に SD カードをマウントして、 initramfs.gz をコピーしました。

%  rsync -av raspi4b3:/tmp/raspi4b2/boot/initramfs.gz /Volumes/boot/initramfs.gz

取り外し

すべて umount して vgchange -an にすると安全に取り外せるようになるようです。

pi@raspi4b3:~$ sudo umount /tmp/raspi4b2/sys
pi@raspi4b3:~$ sudo umount /tmp/raspi4b2/proc
pi@raspi4b3:~$ sudo umount /tmp/raspi4b2/dev
pi@raspi4b3:~$ sudo umount /tmp/raspi4b2/boot
pi@raspi4b3:~$ sudo umount /tmp/raspi4b2
3 pi@raspi4b3:~$ sudo vgs
  VG    #PV #LV #SN Attr   VSize  VFree
  vg4b2   1  13   0 wz--n- <3.64t <265.44g
  vg4b3   1  13   0 wz--n- <3.64t <265.44g
pi@raspi4b3:~$ sudo vgchange -an vg4b2
  0 logical volume(s) in volume group "vg4b2" now active
pi@raspi4b3:~$

再起動

SD カードと USB HDD を付け直すと起動に成功しました。

hook 追加

自動で initramfs を更新しないと、 手動実行を忘れた時や unattended-upgrades で更新された時に再起動に失敗してしまうので、 /etc/kernel/postinst.d/local-mkinitramfs に以下の内容のファイルを置いて実行属性をつけて、 自動で更新されるようにしました。

#!/bin/sh -e
version="$1"
mkinitramfs -o "/boot/initramfs-${version}.gz" "${version}" >&2
version_suffix=$(echo "$version" | sed -e 's/^[0-9.]*-//')
current_suffix=$(uname -r | sed -e 's/^[0-9.]*-//')
if [ "$version_suffix" = "$current_suffix" ]; then
  cp -v "/boot/initramfs-${version}.gz" /boot/initramfs.gz >&2
fi

感想

initramfs を使うようにした時に懸念していた通り、 再起動に失敗することが起きたので、 復旧や根本的な対処を試すことができました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published