実践的なシナリオ:仮想マシンがフリーズし、至急データを救出する必要がある場合
/etc/fstabを誤って編集したり、netplanの設定を間違えたりして、VMが起動しなくなったことはありませんか?通常、レスキューISOを探して仮想マシンにアタッチし、Live環境が起動するのを待つ必要があります。このプロセスには、貴重な時間が少なくとも15〜20分はかかってしまいます。
Proxmox VEでホームラボを運用し、ストレージの最適化を試行錯誤していると、システム設定のエラーは日常茶飯事です。低速なコンソールを使う代わりに、私はNetwork Block Device (NBD)を選択して、ホストマシンから直接仮想ディスクを「手術」しています。この方法なら、VMのファイルシステムを外付けUSBメモリーのように操作でき、トラブルシューティングの時間を80%削減できます。
クイックスタート:3ステップでqcow2ディスクをマウントする
以下は、UbuntuまたはDebianで.qcow2ファイル(KVM/QEMUの標準形式)を迅速に処理するための手順の要約です。
# 1. ツールのインストールとモジュールのロード
sudo apt update && sudo apt install qemu-utils -y
sudo modprobe nbd max_part=8
# 2. イメージをnbd0デバイスに接続
sudo qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/101/vm-101-disk-0.qcow2
# 3. パーティションをマウントして修正を開始
# マウント前にlsblkでパーティションを確認
sudo mount /dev/nbd0p1 /mnt
編集が終わったら、ファイルの破損(corruption)を防ぐために正しい順序で接続を解除する必要があります:
sudo umount /mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
なぜNBDが最適な選択肢なのか?
NBDは単なるネットワークプロトコルではありません。仮想化において、qemu-nbdはトランスレータのような役割を果たします。qcow2、vmdk、rawなどの複雑な形式を、Linuxカーネルが即座に読み取れるブロックデバイス(block device)に変換します。
なぜ通常のmountコマンドを使わないのか疑問に思う方もいるでしょう。実際、qcow2ファイルには多くのメタデータ層やスナップショットが含まれており、容量節約のために圧縮されていることもあります。標準のmountコマンドではこれらの構造を扱えませんが、NBDなら内部の各パーティションをスムーズに切り出すことができます。
重要な警告
VMが稼働している間は、絶対にNBDでディスクをマウントしないでください。調整メカニズムなしに2つのOSが同時に一つのディスクにデータを書き込むと、ファイルシステムが完全に破壊されます。実行前に必ずVMを完全にシャットダウン(Power Off)してください。
複雑な状況への対応
1. VMwareディスク(.vmdk)を扱う
VMwareからProxmoxへの移行作業中など、同僚からESXiのVMDKファイルを送られた場合でも、それを開くためにVMware Workstationをインストールする必要はありません。NBDはこの形式も強力にサポートしています:
sudo qemu-nbd --connect=/dev/nbd1 /path/to/disk.vmdk
sudo fdisk -l /dev/nbd1
2. VM内部のLVMパーティションにアクセスする
CentOSやUbuntu Serverなどのディストリビューションでは、多くの場合LVMが使用されています。NBDを接続しただけでは、nbd0p1のようなパーティションがすぐには現れないことがあります。その場合は、ボリュームグループ(Volume Group)を有効化する手順を追加する必要があります:
sudo qemu-nbd --connect=/dev/nbd0 /path/to/image.qcow2
sudo vgscan
sudo vgchange -ay
# これでパーティションが /dev/mapper/ 内に表示されます
3. セーフモード(読み取り専用)
もし、イメージを起動させずに設定ファイルを書き換えたい場合は、virt-customizeのようなツールも便利ですが、古いバックアップからデータを抽出する必要があり、誤って修正してしまうのが不安な場合は、-rフラグを追加してください。これはプロのシステム管理者の優れた習慣です:
sudo qemu-nbd --readonly --connect=/dev/nbd0 file.qcow2
「Device busy」エラー発生時の対処法
何らかのプロセスがマウントディレクトリを「掴んでいる」ために、切断できないことがあります。無理に接続を解除しようとせず、lsof /mntコマンドを使用してアクセス中のプロセスIDを確認し、それを終了させてから切断を実行してください。
前回のセッションがクラッシュしたことが原因でデバイスがビジー状態のままの場合は、以下のコマンドで強制的にクリーンアップしてください:
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd && sudo modprobe nbd max_part=8
まとめ
NBDを使いこなすことは、あらゆる種類の仮想ディスクに対応する万能鍵を持つようなものです。大規模なサーバークラスターを管理していても、個人のホームラボであっても、このテクニックは絶体絶命のピンチを救ってくれるでしょう。管理ワークフローに今すぐ取り入れて、そのスピードの違いを実感してください!

