12.4.3. コマンドラインを使用してディスクベースのストレージを仮想マシンに接続する
仮想マシン (VM) にローカルストレージを提供する場合、ディスクベースのディスクイメージを使用できます。このタイプのディスクイメージは、ホスト上のディスクパーティションに基づいており、.qcow2 または .raw 形式を使用します。
コマンドラインを使用してディスクベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。
-
新しい仮想マシンを作成する場合は、
--diskオプションを使用して、virt-installコマンドによる操作の一部として新しいディスクを作成して接続します。詳細な手順は、仮想マシンの作成 を参照してください。 - 既存の仮想マシンの場合は、ディスクベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。
前提条件
ハイパーバイザーがディスクベースのストレージプールをサポートしていることを確認する。
# virsh pool-capabilities | grep "'disk' supported='yes'"コマンドの出力が表示される場合には、ディスクベースのプールはサポートの対象です。
ストレージプールのベースとなるデバイスを準備する。この目的のために、パーティション (
/dev/sdb1など) または LVM ボリュームを優先します。ディスク全体またはブロックデバイス (たとえば、/dev/sdb) への書き込みアクセス権を仮想マシンに与えると、おそらく仮想マシンはそのディスクをパーティションに分割するか、その上に独自の LVM グループを作成します。これにより、ホストでシステムエラーが発生する可能性があります。ただし、ストレージプールにブロックデバイス全体を使用する必要がある場合、Red Hat は、デバイス上の重要なパーティションを GRUB の
os-prober機能から保護することを推奨します。これを行うには、/etc/default/grubファイルを編集して、次のいずれかの設定を適用します。os-proberを無効にします。GRUB_DISABLE_OS_PROBER=true使用するパーティションが
os-proberによって検出されないようにします。以下に例を示します。GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
-
ストレージプールを作成する前に、選択したストレージデバイス上のデータをバックアップする。使用されている
libvirtのバージョンによっては、ディスクをストレージプール専用にすると、ディスクデバイスに現在保存されているすべてのデータが再フォーマットされ、消去される可能性があります。
手順
ディスクベースのストレージプールがまだない場合は、新しいディスクベースのストレージプールを作成して設定します。
ディスクタイプのストレージプールを定義および作成します。次の例では、/dev/sdb デバイスを使用し、/dev ディレクトリーにマウントされる
guest_images_diskという名前のストレージプールを作成します。# virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev Pool guest_images_disk definedフォーマット済みのファイルシステムストレージプールのストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化して、データのフォーマットを定義します。
# virsh pool-build guest_images_disk Pool guest_images_disk builtオプション: プールが作成されたことを確認します。
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_disk inactive noストレージプールを起動します。
# virsh pool-start guest_images_disk Pool guest_images_disk started注記virsh pool-startコマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。オプション: 自動起動をオンにします。
デフォルトでは、
virshで定義したストレージプールは、仮想化サービスが起動するたびに自動的に起動するように設定されません。virsh pool-autostartコマンドを使用して、ストレージプールを自動的に起動するように設定します。# virsh pool-autostart guest_images_disk Pool guest_images_disk marked as autostarted
ディスクベースのストレージボリュームを作成します。たとえば、次のコマンドは、
guest_images_diskストレージプールに基づいて、vm-disk1という名前の 20 GB のqcow2ボリュームを作成します。# virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended Vol vm-disk1 createdストレージボリュームを仮想ディスクとして仮想マシンに接続します。
作成したストレージボリュームの場所を確認します。これを行うには、ボリュームが属するストレージプールを調べます。
# virsh vol-list --pool guest_images_disk --details Name Path Type Capacity Allocation --------------------------------------------------------------------- sdb1 /dev/sdb1 block 20.00 GiB 20.00 GiBディスクを接続する仮想マシンですでに使用されているターゲットデバイスを確認します。
# virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda /home/VirtualMachines/vm-name.qcow2 file cdrom vdb -- オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
virsh attach-diskコマンドを使用してディスクを仮想マシンに接続します。仮想マシンで使用されていないターゲットデバイスを指定します。たとえば、次のコマンドは、以前に作成した
vm-disk1をvdcデバイスとしてtestguest1仮想マシンに接続します。# virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
検証
ディスクを接続した仮想マシンの XML 設定を調べて、設定が正しいかどうかを確認します。
# virsh dumpxml testguest1 ... <disk type="block" device="disk"> <driver name="qemu" type="raw"/> <source dev="/dev/sdb1" index="2"/> <backingStore/> <target dev="vdc" bus="virtio"/> <alias name="virtio-disk2"/> <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/> </disk> ...- 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。