Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

【実践ガイド】ddコマンドでVHDファイルを物理ハードディスクへ効率的に書き込む3つの方法

VHD(Virtual Hard Disk)ファイルは、VirtualBoxをはじめとする仮想x86/x86_64エミュレーター上で物理メディアを模倣する大容量ファイルです。これを利用すれば、Linuxディストリビューションの中でWindows、OS X、MS-DOS、FreeBSD、OpenBSD、OS/2、さらには別バージョンのLinuxまで動作させることができます。ISOイメージであればddコマンドで物理ディスクへ直接書き込めますが、VHDファイルはそのままでは書き込めません。ただし、方法は存在します。VHDをISOに変換する必要があるとする解説も見られますが、モダンなLinux環境でVirtualBoxを使っているなら変換は不要です。QEMUユーザー向けの手法もありますが、やや手間がかかります。

作業を始める前に、操作対象のドライブやパーティションが起動ドライブでないことを必ず確認してください。本記事の例ではパーティション済みのNANDメモリを使用しましたが、状況に応じてライブDVDやUSBメモリからの起動も検討しましょう。起動方法にかかわらず、Ctrl+Alt+Tを押す、Ubuntu Dashで「端末」を検索する、あるいはXfce4やLXDEのシステムツールサブメニューから開くなどしてターミナルを起動してください。

方法1:コマンドラインからVBoxManageを使用する

最も簡単なのは、従来型のVirtualBoxインストール環境を利用する方法です。まず、失いたくないデータはすべてバックアップしておきましょう。この操作では宛先の物理ハードウェア上のデータが完全に消去されるうえ、処理の過程でVHD/VHDXファイル自体に影響が出る可能性もあります。これは他の方法や、これほど破壊的なコマンドを扱うすべての場面に共通する注意点です。

データの安全が確保でき、宛先ドライブがマウント解除された状態で接続されていること(例:接続はしているが未マウント、あるいはRAW状態の外付けHDD。この工程ですべてのデータが失われる点に注意)を確認したら、次のコマンドを実行します。

VBoxManage clonehd freeBSD.VHDX --format RAW freeBSD.RAW

「freeBSD.VHDX」の部分は、実際に使用する仮想ハードディスクのファイル名に置き換えてください。テスト用として中規模のFreeBSDインストールを収めた仮想ディスクを用意していたため、この名称を使用しています。

コマンドが完了したら、続けて以下を実行します。

sudo dd if=freeBSD.RAW of=/dev/sde

「freeBSD.RAW」は先ほど生成したRAWファイル名に、「/dev/sde」は実際の書き込み先デバイスに置き換えてください。デバイス名に不安がある場合は、sudo fdisk -lで正しいパーティション名を確認できます。ddコマンドの鉄則として、誤ったデバイスへの書き込みだけは絶対に避けましょう。

大きなファイルを小さなデバイスに書き込む場合と同様に、「デバイスに空き領域がありません」というエラーが表示されることがありますが、テストでは特に問題は発生しませんでした。このプロセスでは余分なゼロが付加されるようです。それ以外の点では、わずか2ステップで仮想ディスクを物理ディスクへコピーできたことになります。

方法2:QEMUのネットワークブロックデバイス(nbd)機能を使う

Quick Emulator(QEMU)しか利用できない環境では、VBoxManageを使える場合よりやや複雑な手順が必要です。まずターミナルでsudo modprobe nbdを実行し、続けて以下を入力します。

qemu-nbd -r -c /dev/nbd0 -f vpc ourTest.vhd

ファイル名は実際に扱うファイルに合わせて変更してください。設定によってはqemu-nbdの実行にsudoが必要な場合があります。ここからコマンドをコピー&ペーストする場合は、実行前の編集を忘れずに。多くのケースではnbd0デバイスのみを意識すればよいため、特別な問題は起こらないはずです。

準備が整ったら、qemu-nbd -P 2 -r -c /dev/nbd2 -f vpc ourTest.vhdでパーティションを指定し、続けてsudo ddrescue -v -f /dev/nbd2 /dev/sde2を実行します。デバイスファイルは必ず実際の環境に合わせて読み替えてください。当方の検証では、/dev/sdeとして何も損傷させずに安全にテストできる使い古しのSDHCカードを使用しました。sudoの要否やパーティション番号の扱いは構成によって変わるため、その都度調整が必要です。こうした理由から、QEMUの流れはやや直感的とは言い難くなっています。

Hyper-Vユーザーは、VHDではなくVHDXイメージを保有しているケースがあります。その場合は、qemu-nbd -c /dev/nbd0 -f VHDX ourTest.vhdのようにフォーマット指定を変更してください。VHDXは仮想マシンにより大容量のストレージを提供するためWindows Server 2012で導入された形式ですが、VHDの2TB上限を回避したいLinuxユーザーの間でも採用が広がっています。それ以外の手順は、ファイルサイズにかかわらず共通です。GNU ddrescueはddと同様に動作しつつ、状態の良いブロックから優先的にコピーする点が特徴です。

VHDXイメージを扱う場合は、最後にsudo ddrescue -v -f /dev/nbd2 /dev/sde2を実行します。一方、VirtualBox形式のイメージであれば、qemu-nbd -P 2 -r -c /dev/nbd2 -f vpc ourTest.vhdで対象パーティションを通常のディスクのようにマウントできます。マウントにはsudo mount /dev/nbd2 /cdromまたはsudo mount /dev/nbd2 /mntを使用します。実行前に、/cdromや/mntに他のデバイスがマウントされていないことを確認してください。

方法3:アンマウント後にデバイスを切断する

イメージをアンマウントするには、sudo umount /mntまたはsudo umount /cdromを実行するだけで切り離せます。Linuxカーネルは、このイメージを他のボリュームと同じように扱っていたわけです。

ただし、QEMUシステムからの切断も忘れてはいけません。qemu-nbd -d /dev/nbd2と入力して接続を解除しましょう。


著者について

【実践ガイド】ddコマンドでVHDファイルを物理ハードディスクへ効率的に書き込む3つの方法

Kevin Arrows(ケビン・アローズ)

ケビン・アローズは10年以上の業界経験を持つテクノロジースペシャリストです。Microsoft Certified Technology Specialist(MCTS)の認定資格を保有し、最新の技術動向を追い続けることに強い情熱を注いでいます。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど幅広い分野で執筆活動を行っており、複雑な技術的概念を明快かつ簡潔に説明する力で高い評価を得ています。

  1. Linuxのbcコマンドを16進数計算機として使う方法|コマンドラインで簡単に基数変換するチュートリアル

    LinuxをはじめとするUnix系OSには、ほぼ必ず「bc」という基本計算言語(basic calculator)が含まれています。GNUスイートが導入されている環境であれば、追加インストールなしですぐに使えるのが魅力です。bcの構文はC言語に非常によく似ており、コマンドラインから直接16進数計算機として活用できます。これを覚えておけば、スマホに16進数や8進数の変換アプリをダウンロードする必要はもうありません。 開発者はもちろん、学校の課題に取り組む学生にとっても心強い味方となるでしょう。まずはターミナルを開くところから始めます。Ubuntuでは「Ctrl + Alt + T」のショートカッ

  2. UbuntuでSnapパッケージの依存関係エラーを解決する方法 – ステップバイステップガイド

    UbuntuでSnapパッケージの依存関係エラーを解決する方法Ubuntuでは、snapコマンドを使ってストアからアプリをインストールできるようになりました。現在ほとんどのUbuntu Linux環境で使われているDebian系のapt-getシステムを置き換えることを目的としたものではありませんが、プラットフォームにほとんど依存しないという大きな利点があります。そのため、Ubuntuモバイル環境を中心に人気を集めています。この作業にはターミナルが必要です。Ubuntu Dashから起動するか、Ctrl + Alt + Tを同時に押して起動できます。Lubuntuをお使いの場合はDashまたは