このガイドでは、Libvirtのストレージプールとボリュームとは何か、および Virshを使用してKVMlibvirtのデフォルトのストレージプールの場所を変更する方法について説明します。 プログラム、 Virt-manager およびコックピット Linuxの場合。
Libvirtのストレージプールとボリューム
Libvirtは、ストレージプールとボリュームを介してKVMホストシステムのストレージ管理を提供します。
ストレージプールは、仮想マシンで使用するためにKVMホストに割り当てられたストレージの量です。ストレージプールはストレージボリュームに分割され、ブロックデバイスとしてVMに割り当てられます。
つまり、ストレージプールは、ボリュームの保存に使用できるKVMホストシステム上のストレージリソースです。また、ストレージボリュームは、仮想マシンに割り当てることができるストレージデバイスです。
ストレージボリュームは、パーティション、論理ボリューム、ファイルなどのブロックデバイスにすることができます。仮想ハードディスク、cd / dvd /フロッピーデバイス、およびゲストマシンに接続されたISOイメージは、ストレージボリュームの例です。
ストレージプールなしでストレージボリュームを持つことはできません。まず、ストレージプールを作成してから、プール内にストレージボリュームを作成する必要があります。
デフォルトでは、libvirtで作成されたすべての仮想マシンは、/var/lib/libvirt/images/
位置。これは、LibvirtVMイメージのデフォルトのストレージプールです。
ストレージプールの種類
ストレージプールは、次のいずれかのタイプになります。
- ディレクトリプール-画像ファイルをホストするためのプールとしてディレクトリを使用します。ファイルは、raw、qcow、qcow2、dmg、vmdk、vpc、ISOイメージなどの有効なボリュームフォーマットタイプのいずれかです。
- ファイルシステムプール-既存のマウントされたファイルシステムのディレクトリを使用する代わりに、ブロックデバイス(パーティションやLVMグループなど)をプールとして使用します。
- ネットワークファイルシステムプール-ネットワークファイルシステムを使用します(例:
cifs
、glusterfs
、nfs
など)ストレージボリュームを格納するためのプールとして。ディレクトリやブロックデバイスの代わりに、ネットワークホストと共有ディレクトリのパスが必要です。 - 論理ボリュームプール-ボリュームを保存するためのプールとしてLVMボリュームグループを使用します。
- ディスクプール-物理ディスクをプールとして使用します。ボリュームは、ディスクにパーティションを追加することで作成できます。
- iSCSIプール-iSCSIターゲットを使用してボリュームを保存します。すべてのボリュームは、iSCSIサーバーに事前に割り当てられている必要があります。
- iSCSI直接プール-これはiSCSIプールのバリアントです。 iscsiadmを使用する代わりに、
libiscsi
を使用します 。ホスト、ターゲットIQNであるパス、およびイニシエーターIQNが必要です。 - SCSIプール-iSCSIターゲットとほぼ同じ方法でSCSIホストバスアダプタを使用します。
- マルチパスプール-現在、マルチパスはサポートされていません。
- RBDプール-このストレージドライバーは、RADOSプール内のすべてのRBDイメージを含むプールを提供します。 RBD(RADOS Block Device)は、Ceph分散ストレージプロジェクトの一部です。
- Sheepdogプール-ボリュームを保存するためのプールとしてSheepdogClusterを使用します。
- Glusterプール-Gluster分散ファイルシステムをプールとして使用します。
- ZFSプール-ZFSファイルシステムをプールとして使用します。
- Vstorageプール-Virtuozzo分散ソフトウェア定義ストレージをプールとして使用します。
このガイドでは、Directory pool
を使用します 。
1。 KVMLibvirtのデフォルトのストレージプールの場所を変更する
すでに述べたように、すべてのKVM/Libvirtイメージは/var/lib/libvirt/images/
に保存されます デフォルトでは場所。この場所はrootfs
にあるため パーティションの場合は、$HOME
などの他の場所に移動することをお勧めします。 ディレクトリ。
virsh
を使用して、KVMLibvirtVMイメージのデフォルトの場所を変更できます。 コマンドラインプログラムと、 Virt-managerと呼ばれるそのグラフィカルフロントエンド 、およびコックピット Webコンソール。
まず、virsh
を使用してLibvirtのデフォルトのストレージプールパスを変更する方法を説明します。 プログラム。
1.1。 virshプログラムを使用してKVMLibvirtのデフォルトのストレージプールの場所を変更する
1.1.1。 KVMホストシステムにログインし、実行中のすべてのゲストの電源を切ります。
実行中のVMのリストを見つけるには、次のようにします。
$ virsh list --all
実行中のVMがある場合はシャットダウンします。
$ virsh shutdown
1.1.2。 KVMホストマシンで構成されているすべてのストレージプールを一覧表示します:
$ virsh pool-list
出力例:
Name State Autostart default active no
ご覧のとおり、ストレージプールはdefault
の1つだけです。 。 kvm/libvirt
をインストールすると自動的に作成されます 。
1.1.3。 コマンドを使用して、デフォルトのストレージプールの詳細を表示しましょう:
$ virsh pool-info default
出力例:
Name: default UUID: 76f47a3c-7656-4c34-9ab5-c87e5136d532 State: running Persistent: yes Autostart: no Capacity: 369.22 GiB Allocation: 65.60 GiB Available: 303.62 GiB
上記の出力には、ストレージプールの名前、UUID、状態、永続性、自動起動、容量、ストレージプールの割り当て済みスペース、残りの使用可能なスペースなどの詳細が一覧表示されます。
ストレージプールのパスを変更するので、それも見つける必要があります。
1.1.4。 デフォルトのストレージプールのパスを表示するには、 grepを使用します virsh
を使用したコマンド 以下のように:
$ virsh pool-dumpxml default | grep -i path
出力例:
<path>/var/lib/libvirt/images</path>
上記の出力にあるように、デフォルトのストレージプールは/var/lib/libvirt/images/
です。 。以降の手順で変更します。
1.1.5。 virsh
を使用して、デフォルトのストレージプールに保存されている既存のVMイメージをすべて一覧表示します 以下のように:
$ virsh vol-list default | grep "/var/lib/libvirt/images/"
出力例:
archlinux.img /var/lib/libvirt/images/archlinux.img
デフォルトのストレージプールに1つのArchLinux仮想マシンイメージがあります。
1.1.6。 次のコマンドを使用して、デフォルトのストレージプールを停止し、定義を解除します。
$ virsh pool-destroy default
$ virsh pool-undefine default
1.1.7。 コマンドを使用してデフォルトのストレージプールを編集します:
$ virsh pool-edit default
これにより、VMのXMLファイルがデフォルトのエディターで開きます。
"<path>/var/lib/libvirt/images</path>"
という行を見つけます target
の下 ディレクティブを選択して、選択した新しいパスに変更します。
私の場合、<path>
を変更しました /var/lib/libvirt/images
の要素 /home/sk/.local/share/libvirt/images
へ 。
<pool type='dir'> <name>default</name> <uuid>76f47a3c-7656-4c34-9ab5-c87e5136d532</uuid> <capacity unit='bytes'>396452147200</capacity> <allocation unit='bytes'>71178977280</allocation> <available unit='bytes'>325273169920</available> <source> </source> <target> <path>/home/sk/.local/share/libvirt/images</path> <permissions> <mode>0755</mode> <owner>1000</owner> <group>1000</group> <label>unconfined_u:object_r:svirt_home_t:s0</label> </permissions> </target> </pool>
新しいパスが存在することを確認してください。存在する場合は、それを作成し、新しいパスディレクトリに十分な権限を割り当てます。ファイルを保存して閉じます。
ヒント:
何らかの理由でデフォルトのストレージプールが存在しない場合は、次のように作成できます。
$ virsh pool-define-as --name default --type dir --target /home/sk/.local/share/libvirt/images/
ストレージパスを独自のものに置き換えます。
1.1.8。 最後に、デフォルトのストレージプールを開始します:
$ virsh pool-start default
1.1.9。 システムの起動時に自動的に起動するようにストレージプールを設定します:
$ virsh pool-autostart default
1.1.10。 次のコマンドを使用して、libvirtストレージプールパスが変更されているかどうかを確認します。
$ virsh pool-dumpxml default | grep -i path
これで、新しいパスが表示されます。
/home/sk/.local/share/libvirt/images
今後、仮想イメージは新しいストレージプールに保存されます。
1.1.11。 ストレージプールの状態を確認します:
$ virsh pool-list Name State Autostart ------------------------------- default active yes
1.1.12。 libvirtdサービスを再起動します:
$ sudo systemctl restart libvirtd
1.1.13。 最後にもう1つ行う必要があります。古いストレージパスから新しいストレージパスにすべてのVMイメージをコピーします:
$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/
すべて完了しました!
これは、Virsh
を使用して、コマンドラインからKVMLibivrtのデフォルトのストレージプールの場所を新しい場所に変更する方法です。 プログラム。ご覧のとおり、KVM / Libvirtゲストのデフォルトのストレージパスを変更するのはかなり簡単です!
次に、Virt-manager
という名前のグラフィカルアプリケーションを使用してLibvirtのデフォルトのストレージプールパスを変更する方法を見てみましょう。 。
1.2。 Virt-managerを使用してKVMLibvirtのデフォルトのストレージプールの場所を変更する
Virt-manager 、Virtual Machine Managerの略で、 libvirt
を介して仮想マシンを管理するために使用されるグラフィカルユーザーインターフェイスアプリケーションです。 。言い換えれば、Virt-managerはlibvirt
の単なるグラフィカルフロントエンドです。 。
1.2.1。 Virt-managerアプリケーションを開きます。 QEMU / KVMを右クリックし、詳細strong>をクリックします オプション。
[編集]->[接続の詳細]をクリックすることもできます Virt-managerインターフェースから。
1.2.2。 ストレージの下 セクションには、デフォルトのストレージプールの場所が表示されます。
1.2.3。 プールの停止をクリックします 次にプールを削除 左下のペインのオプション。
これにより、デフォルトのプールが非アクティブ化されて削除されます。
1.2.4。 プラス(+)をクリックします 左下のペインにサインオンして、仮想マシンで使用する新しいストレージプールを作成します。
ストレージプールの名前を入力します(例:default
私の場合)。プールのタイプを選択します。この例では、ファイルシステムディレクトリを選択しました 。ターゲットの場所を指定して、[完了]をクリックします。
1.2.5。 これで、新しいストレージがアクティブになります。 自動起動を確認してください システムの起動時に新しいストレージプールを自動的に開始するボックス。
1.2.6。 すべてのVMイメージを古いストレージディレクトリから新しいストレージディレクトリに移動します。
$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/
1.2.7。 最後に、libvirtdサービスを再起動します:
$ sudo systemctl restart libvirtd
1.3。コックピットを使用してKVMLibvirtのデフォルトのストレージプールの場所を変更する
コックピット は、Webブラウザを介してLinuxサーバーを監視および管理するための無料のWebベースのサーバー管理ツールです。
1.3.1 Webブラウザーを開き、 http:// localhost:9090 に移動して、コックピットコンソールにログインします。 またはhttp:// IP-address:9090 アドレスバーから。
1.3.2。 仮想マシンをクリックします 左ペインのタブ。右側で、[ストレージプール]をクリックします オプション。
1.3.3。 [ストレージプール]セクションの下に、デフォルトのストレージプールが表示されます。小さな矢印をクリックして[ストレージプール]タブを展開し、[非アクティブ化]をクリックします および削除 ボタン。
注: すでにデフォルトの保存場所を変更しているので、新しいパスが表示されます。システムでは、古いデフォルトのパス、つまり/var/lib/libvirt/images
が表示されます。 。
1.3.4。 ストレージプールの名前、タイプ、およびターゲットパスを入力し、[作成]をクリックします 。 [スタートアップ]チェックボックスがオンになっていることを確認してください。
1.3.5。 アクティブ化をクリックします ボタンをクリックしてプールを開始します。
1.3.6。 すべてのVMイメージを古いストレージディレクトリから新しいストレージディレクトリに移動します。
$ sudo mv /var/lib/libvirt/images/archlinux.qcow2 /home/sk/.local/share/libvirt/images/
1.3.7。 libvirtdサービスを再起動します:
$ sudo systemctl restart libvirtd
トラブルシューティング
ストレージプールパスを変更した後、VMの起動時に次のエラーが発生する可能性があります。
Failed to start domain 'Archlinux_default' error: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied.
これは、qemu
が原因です。 ユーザーがストレージディレクトリへの読み取り権限を持っていない可能性があります。修正するには、次のリンクを参照してください:
- [解決済み]ストレージファイルにアクセスできません、KVMLibvirtでアクセスが拒否されましたエラー
結論
このガイドでは、KVM/Libvirtの重要なトピックであるストレージプールについて説明しました。 。ストレージプールとボリュームとは何か、次に3つのプログラム、つまりVIrsh、Virt-manager、Cockpitを使用してkvmlibvirtのデフォルトのストレージプールの場所を変更する方法を学びました。これがお役に立てば幸いです。