mkinitramfs 以降、Debian KVM ゲストは起動しません。 - /root に /dev/vda1 をインストールできませんでした。

mkinitramfs 以降、Debian KVM ゲストは起動しません。 - /root に /dev/vda1 をインストールできませんでした。

2020年7月7日に編集済み:問題の範囲に関する情報が追加されました。

2020年6月25日編集:いくつかの追加診断情報を追加しました。

質問があります。ダーバンビルドを使用するKVMゲストは、実行(カーネルのアップグレード、Grub cfgの変更など)virt-resizeまで完全に実行され、mkinitramfsその後はシステムが起動しません。

  • グラップメニューが表示されます
  • メニューで選択したオプションを使用すると、システムは次のエラーでinitramfs Busyboxシェルにアクセスできなくなります。

mount: mounting /dev/vda1 on /root failed: No such device

これが起こる前に、私はゲストと記事のコピーを取得break=premountし、カーネルオプションを渡してそれぞれ起動し、すべてinitramfsデバッグシェルに強制しました。そこで私は違いを比較しようとします。最も顕著なのは出力ですdmesg。基本的には最後まで同じです。無効なホストから:

ホストの破損

[    0.743940] Run /init as init process
[    0.801833] lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
[    0.814263] cryptd: max_cpu_qlen set to 1000
[    0.817594] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
[    0.817785] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input2
[    0.820087] PCI Interrupt Link [GSIA] enabled at IRQ 16
[    0.820187] i801_smbus 0000:00:1f.3: SMBus using PCI interrupt
[    0.829008] AVX2 version of gcm_enc/dec engaged.
[    0.829008] AES CTR mode by8 optimization enabled
[    0.839844] virtio_blk virtio2: [vda] 41943040 512-byte logical blocks (21.5 GB/20.0 GiB)
[    0.843734]  vda: vda1 vda2
[    0.846319] virtio_net virtio0 enp1s0: renamed from eth0

職場のホスト

[    0.736291] Run /init as init process
[    0.795060] lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
[    0.800259] PCI Interrupt Link [GSIA] enabled at IRQ 16
[    0.800363] i801_smbus 0000:00:1f.3: SMBus using PCI interrupt
[    0.811428] cryptd: max_cpu_qlen set to 1000
[    0.821407] AVX2 version of gcm_enc/dec engaged.
[    0.821407] AES CTR mode by8 optimization enabled
[    0.823702] ACPI: bus type USB registered
[    0.823712] usbcore: registered new interface driver usbfs
[    0.823717] usbcore: registered new interface driver hub
[    0.823726] usbcore: registered new device driver usb
[    0.829766] SCSI subsystem initialized
[    0.830240] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
[    0.830430] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input2
[    0.844882] virtio_blk virtio2: [vda] 41943040 512-byte logical blocks (21.5 GB/20.0 GiB)
[    0.854231]  vda: vda1 vda2
[    0.857633] xhci_hcd 0000:02:00.0: xHCI Host Controller
[    0.857638] xhci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 1
[    0.857900] xhci_hcd 0000:02:00.0: hcc params 0x00087001 hci version 0x100 quirks 0x0000000000000010
[    0.859088] virtio_net virtio0 enp1s0: renamed from eth0
[    0.860055] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[    0.860056] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    0.860056] usb usb1: Product: xHCI Host Controller
[    0.860057] usb usb1: Manufacturer: Linux 4.19.0-9-amd64 xhci-hcd
[    0.860057] usb usb1: SerialNumber: 0000:02:00.0
...

期待どおりにIOをロードして初期化しますが、破損したホストはそうではないため、後者を少しトリミングしました。

lsmod破損したホストからSCSIモジュールがロードされていないことを確認してください。modprobe -v scsi_modモジュールを直接またはdmesg

問題の範囲

テストにより、Debianゲストのみが影響を受け、使用量だけが影響を受けることに範囲が狭まりましたvirt-resize

デフォルトのLVMボリュームのみを複製すると、Debianホストには問題はありませんが、デフォルトのvirt-resizeLVMボリュームの内容を別の(より大きな)ボリュームにコピーする場合(ビルドスクリプトで実行する操作)、この問題が発生します。 Debian には mkinitramfs の周りに update-initramfs というラッパースクリプトがあります。

ビルド方法に関係なく、CentOSホストに問題はありません。

何をすべきかわからない。 initramfsで何か違うか破損しているようです。

========訪問者の施工方法========

前提条件:非常に小さなLVM対応の3Gディスク(パーティション2 = /&スワップ)を使用してデフォルトのDebianゲストを手動でインストールします。これは非常に基本的な設定(Ansibleユーザーの作成、いくつかの主要なパッケージのインストール、IPV6の無効化など)を適用します。

その後、スクリプトが実行されるとき:

  • LVMスナップショットは、基本イメージをサポートするボリュームから作成されます。
  • kpartx -a /path/to/snapshotパーティションにアクセスするには実行してください。
  • 抽出されたルートパーティションの2つのファイルを編集してネットワークパラメータを設定する
  • kpartx -d /path/to/snapshot
  • エンドクライアントのサイズ(20Gなど)に一致する新しいLVMボリュームを作成します。
  • virt-resizeスナップショットをソースとして使用し、新しいボリュームをターゲットとして使用して実行します。含まれているスワップパーティションのサイズを固定サイズに調整するにはこのオプションを使用し、残りのスペースを埋める--resizeためにルートパーティションを増やすにはこのオプションを使用します--expand
  • kpartx -amkswap新しいサイズのスワップパーティションで実行してからクリーンkpartx -dアップできるように、新しいボリュームからパーティションを抽出するために再利用されます。
  • 新しいボリュームをディスクとして使用して、新しいゲストのKVMに適切な設定を追加します。

これはすべて良いです。ゲストは、ゲストで最初にmkinitramfs実行されるまでうまく機能します。

何が起こっているのか、そして解決策について考えやアイデアがある人はいますか?

ベストアンサー1

USBドライバがロードされていないようです。これが仮想ドライブに問題が発生する理由はわかりませんが(VirtIOドライバがまだ存在しているようです)、これは2つのdmesgコマンドの主な違いです。

別の違いは、SCSIサブシステムが破損した仮想マシンにロードされないことです。基本イメージでmkinitramfsを実行すると、この問題は発生しませんが、スクリプトが実行された後はすべてが中断されると述べました。たぶんLVMの使用に関連していますか?一度に1行ずつスクリプトを手動で実行し、mkinitramfsを実行してから再起動してみてください。これは問題を正確に特定するのに役立ちます。

短くてあまり役に立たない答えについて申し訳ありません。私はVirtIOドライバのインストールなどに関する多くの質問に答え、dmesgダンプの1つから1行を逃し、ソリューション全体を完全に台無しにしたことに気づきました。その後、削除できないことがわかりました。 Stack Exchangeの回答があり、何かを保管する必要があり、誤解を招く(完全に役に立たない)回答を残したくありませんでした。

役に立ったことを願っています!

おすすめ記事