紹介
リモートクラウドサーバーで作業している場合、通常は仮想マシンを使用しています。これは、大きなサーバークラスター内で実行されている完全なオペレーティングシステムのインスタンスをサンドボックス化して分離したものです。QEMUやVirtualBoxなどのソフトウェアを使用して、デスクトップ上でローカルに仮想マシンを使用することもできます。仮想マシンには、完全なデスクトップインターフェースが含まれる場合もありますし、SSHサーバーを実行して端末接続を許可する場合もあります。いずれの場合も、技術的には類似しており、同様の前提条件があります。大規模なクラウドの最適化を除いて、仮想化環境の唯一の重要な違いは、仮想マシンのハードディスクと設定オプションです。これらは仮想マシンイメージと呼ばれ、プロバイダーごとに異なる形式でフォーマットされています。
このチュートリアルでは、仮想マシンイメージの形式(qcow2
、vdi
、vhd
、vmdk
など)を変換する方法を学びます。これにより、必要に応じてデスクトップからクラウドに仮想環境を持ち出したり、戻したりできるようになります。
前提条件
このチュートリアルのコマンドは、QEMUとVirtualBoxとそれらのコマンドラインツールをインストールできる限り、Windows、macOS、またはLinuxで実行できます。このチュートリアルでは、Homebrewパッケージマネージャーを使用したインストール手順が提供されます。 macOS、Linux、またはWSL2のWindowsにHomebrewをインストールできます。
DigitalOceanのドロップレットで実行している場合は、少なくとも2つのCPUと2GBのメモリが必要です。
このチュートリアルのコマンドを実行するには、少なくとも10GBの空き容量が必要です。
注意: Apple Silicon CPU(2020年以降に製造されたもの)を搭載したmacOSを使用している場合、VirtualBoxではなくQEMUのみを使用できます。
QEMU
QEMUは、最も強力で広くサポートされているオープンソースの仮想化ソフトウェアです。すべての主要なプラットフォーム(Windows、macOS、Linux、Androidなどの他のオペレーティングシステムを含む)で実行され、必要に応じて仮想化およびエミュレーションが可能です。たとえば、Windowsデスクトップ上でLinuxサーバーイメージを実行している場合(一般的なユースケース)、これらのプラットフォームは共通の基盤アーキテクチャ(Intel/AMD x86)を共有しているため、QEMUは仮想化を介して完全なパフォーマンスを達成できます。 x86 LinuxまたはWindows(「ホスト」または「ゲスト」オペレーティングシステムとして)をARMアーキテクチャのmacOSまたはAndroidと組み合わせて使用している場合、QEMUは自動的にエミュレーションを使用してアーキテクチャを変換します。
仮想化と比較して、エミュレーションは通常、本番環境では使用されません。なぜなら、それが大きなパフォーマンスペナルティを追加するからです。ただし、QEMUは仮想化とエミュレーションをほぼ同等として扱うため、同じイメージ形式と同じツールをすべてのシナリオで使用できるという重要な互換性の利点を提供します。
QEMUはコマンドラインソフトウェアであり、仮想マシンを構成するためのオプションが非常に多いため、VMwareやVirtualBoxのようなデスクトップ仮想化ソフトウェアと比較して、学習曲線が高いです。WindowsまたはLinuxではQtEmu、macOSではUTMなどのGUIフロントエンドとオプションで使用することができます。このチュートリアルでは、QEMUを使用したコマンドラインの操作方法について説明します。
QEMUのインストール
QEMUをインストールするには、Homebrewのbrew install
を使用します:
- brew install qemu
これにより、qemu-img
を含むQEMUツールとコマンドのすべてが提供されます。これは、仮想マシンイメージをコマンドラインで変換するために使用されるqemu-img
コマンドを含みます。 qemu-img
コマンドにアクセスできることを確認するには、which qemu-img
を実行してください:
- which qemu-img
Output/usr/local/bin/qemu-img
注意:WSL2なしでWindowsで作業する場合は、そのネイティブインストーラーを使用してWindowsにもQEMUをインストールできます。
QEMUは、このチュートリアルで必要とするほとんどの機能を提供します。別の人気のある仮想化パッケージであるVirtualBoxもインストールできます。
VirtualBox
VirtualBoxは、Oracleが提供するオープンソースの仮想化ソフトウェアです。すべてのx86オペレーティングシステム(Windows、Linux、および2020年以前に製造されたmacOSコンピューター)をサポートしています。エミュレーションや非x86アーキテクチャをサポートしていないため、主にWindowsでLinuxを実行したり、その逆を行ったりするために役立ちます。ただし、QEMUよりも使用が簡単で、広く互換性のあるデフォルトの設定を提供し、デスクトップインターフェースがデフォルトで含まれています。
それは通常、QEMUよりもコマンドラインの機能が少ないため、専用のオーケストレーションソフトウェア(Vagrantなど)と一緒に使用され、仮想マシンの構成を自動化および再現するために利用されます。ただし、VBoxManage
コマンドラインツールが含まれており、これを使用して仮想マシンイメージを操作することができます。
VirtualBoxのインストール
macOSにVirtualBoxをインストールするには、–cask
フラグを使用してbrew install
を実行します。これはVirtualBoxが完全なアプリケーションバンドルとして配布されているためで、Homebrewはこれをcaskと呼んでいます。
- brew install --cask virtualbox
UbuntuまたはDebian派生のLinuxディストリビューション(WSL2を含む)にVirtualBoxをインストールするには、まずapt update
を使用してパッケージソースを更新し、次にapt install
を実行します:
- sudo apt update
- sudo apt install virtualbox
WSL2を使用せずにWindowsにVirtualBoxをインストールする場合は、そのダウンロードページを参照してください。
VirtualBoxをインストールした後、which vboxmanage
を実行してvboxmanage
コマンドにアクセスできるか確認してください。
- which vboxmanage
Output/usr/local/bin/vboxmanage
仮想化には、QEMUとVirtualBox以外の代替手段があります。ただし、これらのほとんどはプラットフォーム固有(WindowsのHyper-Vなど)または大規模な企業向けに設計されたもの(VMwareなど)です。このチュートリアルでは直接カバーしませんが、以下の手順でこれらのイメージ形式を変換することができます。
QEMUを使用して仮想マシンイメージを作成する
仮想マシンイメージの変換をデモンストレーションするために、まずQEMUでイメージを作成することができます。既に変換するイメージを持っている場合は、このセクションをスキップしてください。
qemu-img create
コマンドを使用し、-f qcow2
フラグでQEMUのデフォルトのqcow2
形式でイメージを作成します。
- qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G
この時点で、空の仮想マシンイメージが作成されます。ただし、名前をubuntu-desktop-22.04.qcow2
としてキャパシティを10G
と指定しましたが、この時点ではUbuntu 22.04がインストールされていないし、容量も10GBではありません。
OutputFormatting 'ubuntu-desktop-22.04.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
QEMUイメージは、仮想マシン内で実行されるソフトウェアに対して最大宣言容量を反映しつつ、ディスク上で可能な限り少ないスペースを占有します。この場合、10GBは仮想マシンが利用可能と思っている容量であり、仮想マシンイメージが自動的にスケールアップする最大サイズです。
A typical next step would be to install Ubuntu 22.04 onto the virtual machine, using a Ubuntu 22.04 ISO. However, you can skip this step for this tutorial, as you won’t actually be working directly with this virtual machine. An ISO is another type of disk image that is usually read-only, and was historically written onto CD and DVD installation media, rather than an image of a writable hard disk. Other software exists for manipulating ISO images, such as mkisofs and dd. To learn more about installing Linux using QEMU, refer to the QEMU documentation.
QEMUイメージを別の形式に変換する
VMイメージを作成した後は、qemu-img convert
を使用して他の形式に変換できます。vdi
はVirtualBoxのデフォルトのイメージ形式です。デフォルトでは、元のVMイメージは消去されず、新しいイメージが作成されます。
- qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi
-f
フラグは入力形式と入力ファイル名を指定するために使用されます。 -O
フラグは、出力形式と出力ファイル名を指定するために使用されます。非常に大きなイメージを変換する場合に役立つ進行状況バーを表示するには、-p
フラグも含めることができます。最後のステップで作成したイメージはまだ内容がないため、すぐに変換されます。 ls
を使用して、ubuntu-desktop-22.04.vdi
を作成したことを確認できます。
- ls ubuntu-desktop-22.04.vdi
Outputubuntu-desktop-22.04.vdi
他の一般的な形式には、VMwareが主に使用するvmdk
や、MicrosoftのHyper-Vが主に使用するvhd
があります。また、ソフトウェアがそれを必要とする場合は、次のステップに従って「raw」イメージを作成することもできます。
他の仮想マシン形式をQEMUに変換する
vdi
形式のイメージがある場合、VirtualBoxが提供するvboxmanage
コマンドを使用して変換することができます。
- vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78
これにより、作成したイメージがローカルのVirtualBox構成に自動的に登録されます。これは、一時的なコピーを作成しようとしている場合には不便かもしれません。もし誤って重複して登録してしまった場合には、VirtualBoxインターフェースから手動で新しいエントリを削除する必要があります。
生の仮想マシンイメージはまったく圧縮されていないため、このコマンドは実際には10GBのフルファイルを作成します。前のステップの構文を逆にして、qcow2
形式に戻すことができます。
- qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2
これでディスク容量を節約するために生のイメージを削除することができます。
- rm ubuntu-desktop-22.04.img
最後に、qemu-img check
コマンドとqemu-img info
コマンドを使用して、仮想マシンイメージのメタデータを出力することができます。
- qemu-img check ubuntu-desktop-22.04.qcow2
OutputNo errors were found on the image.
Image end offset: 262144
- qemu-img info ubuntu-desktop-22.04.qcow2
Outputimage: ubuntu-desktop-22.04.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
qemu-img
を使用してイメージを変換する詳細については、qemu-imgのマニュアルページや公式ドキュメントを参照してください。
注意:これらの仮想マシンイメージをDigitalOceanにアップロードしてクラウドサーバーイメージとして使用することもできます。その際は、DigitalOceanのカスタムイメージのドキュメントに従ってください。
まとめ
このチュートリアルでは、QEMUとVirtualBoxのコマンドラインツールを使用して、仮想マシンイメージを作成、変換、エクスポートしました。仮想マシンイメージフォーマットの一般的な例や、仮想マシンで作業する際の便利なデフォルトの仮定について確認しました。仮想化のような一般的なコンセプトの基礎となる技術を理解することは常に役立ちます、特にアーキテクチャやクラウドプロバイダを移行する必要がある場合には。
Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-virtual-machine-image-formats