web-dev-qa-db-ja.com

BusyBoxのカーネル4.15.0-34-genericブート上のUbuntu 18.04

このマシンはUbuntu 18.04.1の新規インストールであり、インストール中にLVMとLUKSを使用しました。マシンはカーネル4.15.0-33-genericで正常に動作していました。

カーネルは4.15.0-33から4.15.0-34-genericにアップグレードされました。カーネルの更新後、LUKSパスフレーズのプロンプトが表示されなくなり、BusyBox v1.27.2が直接起動します。

古いカーネルから起動すると、通常のようにLUKSの入力を求められ、マシンは正常に起動できます。問題は、新しいカーネルから起動する場合です。

18.04のliveCDからfsckを実行しようとしました。最初にドライブのロックを解除してから実行しました

fsck -f /deb/sda3

しかし、私は得るだけ

fsck from util-linux 2.31.1

何もありません。

実行できる修正はありますか?

3
jimbob

問題は、/sbin/cryptsetupがinitramfsファイル/boot/initrd.img-4.15.0-36-genericにないことです。

CRYPTSETUP=y/etc/cryptsetup-initramfs/conf-hookを追加する必要があります。 /etc/crypttabinitramfsオプションを追加する必要もあります。次に、update-initramfsを実行する必要があります。これにより、この問題が解決します。

詳細なソリューション:

  1. 他のUbuntuマシンで、「Startup Disk Creator」を使用して、起動可能なUbuntu 18.04 USBドライブを作成します
  2. BusyBoxで起動するコンピューターのUSBポートにこのUSBドライブを差し込みます
  3. ライブUSB Ubuntuの準備ができたら、インターネット(WiFiまたは有線)に接続します

  4. ターミナルを開く

    ubuntu@ubuntu:~$ Sudo su
    
  5. 暗号化されたブロックデバイスを見つけます。

    root@ubuntu:~# blkid|grep LUKS
    /dev/nvme0n1p3: UUID="4b206e76-1531-48ae-95be-ae0ed7a244c1" TYPE="crypto_LUKS" PARTUUID="21db499d-b87b-41c6-864f-04d1531cb083"
    
  6. デバイスを解読する

    root@ubuntu:~# cryptsetup open UUID="4b206e76-1531-48ae-95be-ae0ed7a244c1" nvme0n1p3_crypt
    Enter passphrase for /dev/disk/by-uuid/4b206e76-1531-48ae-95be-ae0ed7a244c1: 
    
  7. マップされたデバイスをリストします。 controlは、コマンドをデバイスマッパーに送信するために使用されるファイルです。 nvme0n1p3_cryptは復号化されたデバイスです。 ubuntu--vg-rootは、LVM ubuntu-vgボリュームグループ内のLVM論理ボリュームです。

    root@ubuntu:~# ls /dev/mapper/*
    /dev/mapper/control  /dev/mapper/ubuntu--vg-root  /dev/mapper/nvme0n1p3_crypt
    
  8. マウントポイントを作成します。これは、起動しないシステムの/をマウントする場所です。

    root@ubuntu:~# mkdir -p /mnt/ubuntu-root
    
  9. ルート論理ボリュームのマウント

    root@ubuntu:~# mount /dev/mapper/ubuntu--vg-root /mnt/ubuntu-root/
    
  10. 擬似ファイルシステムをマウントする

    root@ubuntu:~# mount -o bind /sys /mnt/ubuntu-root/sys
    root@ubuntu:~# mount -o bind /proc /mnt/ubuntu-root/proc
    root@ubuntu:~# mount -o bind /dev /mnt/ubuntu-root/dev
    
  11. DNS情報をコピーする

    root@ubuntu:~# cp /etc/resolv.conf /mnt/ubuntu-root/etc/
    
  12. ルートを変更

    root@ubuntu:~# chroot /mnt/ubuntu-root/
    
  13. Initramfsファイルを含む/bootをマウントします。このパーティションは暗号化されていません。

    root@ubuntu:/# mount /boot/
    
  14. Binwalkをインストールします(init ramファイルシステムのコンテンツを表示します)

    root@ubuntu:~# apt update
    root@ubuntu:~# apt install binwalk
    
  15. Gzip圧縮されたinitramfsコンテンツのオフセットを見つける

    root@ubuntu:~# binwalk /boot/initrd.img-4.15.0-36-generic | grep gzip
    1605632       0x188000        gzip compressed data, from Unix, last modified: 2018-10-18 13:00:32
    
  16. 問題は、initramfsファイルシステムにcryptsetupが含まれていないことです。そのため、LUKSパスワードプロンプトはありません。

    root@ubuntu:/# cd /root/
    root@ubuntu:~# mkdir initramfs-4.15.0-36-generic
    root@ubuntu:~# cd initramfs-4.15.0-36-generic
    root@ubuntu:~/initramfs-4.15.0-36-generic# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 | gunzip | cpio -i
    root@ubuntu:~/initramfs-4.15.0-36-generic# ls sbin/cryptsetup
    ls: cannot access 'sbin/cryptsetup': No such file or directory
    
  17. ブート時にルートを復号化するには、initramfsに以下を含める必要があります。

    sbin/cryptsetup
    lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
    
  18. /etc/crypttabinitramfsオプションを追加します

    root@ubuntu:/# cat /etc/crypttab 
    nvme0n1p3_crypt UUID=4b206e76-1531-48ae-95be-ae0ed7a244c1 none luks,discard,initramfs
    
  19. CRYPTSETUP=y/etc/cryptsetup-initramfs/conf-hookを追加します

  20. update-initramfsを実行します:

    root@ubuntu:~# update-initramfs -k 4.15.0-36-generic -c -v &> update-initramfs-4.15.0-36-generic.cryptsetup.log
    
  21. これで、initramfsにcryptsetupとLinuxカーネルモジュールdm-crypt.koもあります:

    root@ubuntu:~# grep /sbin/cryptsetup update-initramfs-4.15.0-36-generic.cryptsetup.log
    Adding binary /sbin/cryptsetup
    
    root@ubuntu:~# grep dm-crypt.ko update-initramfs-4.15.0-36-generic.cryptsetup.log
    Adding module /lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
    
  22. 次に、-c(新規)および-v(詳細)なしでupdate-initramfsを実行します。

    root@ubuntu:~# update-initramfs -k 4.15.0-36-generic -u
    
  23. Initramfsが実際に正しいことを確認します

    root@ubuntu:~# binwalk /boot/initrd.img-4.15.0-36-generic | grep gzip
    1605632       0x188000        gzip compressed data, from Unix, last modified: 2018-10-18 14:26:29
    
    root@ubuntu:~# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 2> /dev/null | gunzip | cpio -t 2> /dev/null |grep sbin/crypt 
    sbin/cryptsetup
    
    root@ubuntu:~# dd if=/boot/initrd.img-4.15.0-36-generic bs=1605632 skip=1 2> /dev/null | gunzip | cpio -t 2> /dev/null |grep dm-crypt.ko
    lib/modules/4.15.0-36-generic/kernel/drivers/md/dm-crypt.ko
    
  24. 次に、再起動します。

2
sebhtml