libguestfs はCライブラリであり、Linuxで仮想マシンのディスクイメージを作成、表示、アクセス、および変更するためのこのライブラリ上のツールのコレクションです。ディスクイメージの内部を調べたり、ディスクイメージに含まれるファイルを変更したり、最初から作成したり、サイズを変更したりすることができます。 libvirtやKVMは必要なく、root権限も必要ありません。 RedHatはlibguestfsの開発を後援しています。多くのLinuxディストリビューションとMacOSのようなUnixバリアントをサポートしています。
Libguestfsは、ほぼすべてのLinuxファイルシステム(ext2 / 3/4、XFS、btrfsなど)、Windowsファイルシステム(vfatおよびntfs)、Mac OSおよびBSDファイルシステム、LVM2ボリューム、MBRおよびGPTディスクパーティション、RAWディスクで動作します、QCOW2、VirtualBox VDI、VMWare VMDK、およびHyper-V VHD/VHDX。ローカルファイルや、CDやDVD ISO、SDカードなどのローカルデバイスにアクセスしたり、FTP、HTTP、SSH、iSCSI、NBD、GlusterFS、Ceph、Sheepdogなどを介してリモートでアクセスしたりすることもできます。
Libguestfsの機能
libguestツールを使用すると、以下に示すように多くのタスクを実行できます。
- ゲスト仮想マシンを作成します
- 仮想マシンのクローンを作成します。
- VMを構築する
- VMをカスタマイズする
- VMへのスクリプトの変更
- VMイメージを検査します
- ゲストマシン内のファイルを表示および編集する
- 仮想マシンとの間でファイルとディレクトリをコピーします。
- ファイルシステム、デバイス、LVMに関する情報を表示します
- ファイルのアーカイブ、アップロード、ダウンロード
- 使用済み/空きディスクの統計を監視する
- 仮想ディスクをフォーマットします
- 仮想ディスクのサイズを変更します
- バックアップの実行
- ホストシステムでゲストファイルシステムをマウントおよびアンマウントします。
- P2V(KVM、OpenStack、oVirt、Red Hat仮想化で仮想化されて実行されるように物理マシンを変換します)、
- V2V(ゲストマシンを外部ハイパーバイザーからKVMで実行するように変換)
- ログファイルを表示する
- WindowsゲストのWindowsレジストリの変更をマージします
- その他
これらのタスクはすべて、ゲストフィッシュと呼ばれるスクリプト可能なシェルを介して実行できます。 、またはインタラクティブなレスキューシェル virt-rescue 。
Linuxにlibguestfsをインストールする
次のコマンドを実行して、Debian、Ubuntuにlibguestfsをインストールします。
$ sudo apt install libguestfs-tools
CentOSでは、RHEL:
$ sudo dnf install libguestfs-tools
インストールしたら、コマンドを使用してguestfishのバージョンを確認します:
$ guestfish --version ゲストフィッシュ1.40.2
Libguestfsを使用して仮想マシンのディスクイメージにアクセスして変更する
ゲストマシンの電源がオフになっていることを確認してください。いかなる理由であれ、ライブ画像を変更してはなりません。永続的なディスクの破損やデータの損失につながる可能性があります。ディスクイメージに変更を加える前に、必ずディスクイメージをバックアップしてください。
1。ゲストフィッシュシェル
Guestfishは、ゲストファイルシステムシェルの略で、仮想マシンのファイルシステムとディスクイメージを編集するためのインタラクティブなシェルです。
1.1。既存のディスクイメージにアクセスし、ゲストファイルシステムを手動でマウントします
まず、既存のディスクイメージをロードして検査します。
次のコマンドをから実行して、guestfishインタラクティブシェルに入ります。
$ guestfish
出力例:
仮想マシンファイルシステムとディスクイメージを編集するためのゲストファイルシステムシェルであるguestfishへようこそ。次のように入力します。
ここでは、>
ゲストフィッシュのプロンプトを示します。 ..次に、コマンドを使用してディスクイメージを追加します:
>add〜/ CentOS_8_Server.img 次に、次のコマンドを実行してライブラリを開始し、ディスクイメージをアタッチ(起動)します。
>実行 初回は数秒かかります。その後の開始ははるかに速く終了します。
次に、ゲストファイルシステムを手動で一覧表示してマウントする必要があります。
ディスク内のファイルシステムのリストを表示するには、guestfishプロンプトから次のコマンドを実行します。
>list-filesystems 出力例:
/ dev / sda1:ext4 / dev / cl / root:xfs / dev / cl / swap:swapファイルシステムをマウントする:
>マウント/dev/ cl / root / マウントポイントの表示:
>マウントポイント / dev / cl / root:/ 同様に、他のファイルシステムをマウントします。
1.2。既存のディスクイメージにアクセスし、ゲストファイルシステムを自動的にマウントします
ゲストファイルシステムを手動で一覧表示してマウントする代わりに、guestfishが -i を使用してイメージを自動的に検査し、ファイルシステムをマウントできるようにすることができます。 以下のようなフラグ。
$ guestfish -a CentOS_8_Server.img -iここで
- -a (--add)パラメータは、ディスクイメージフォーマットを自動的に検出します。これを上書きして特定の形式を指定するには、-formatを使用します オプション。
- -i (--inspector)-ディスクを検査し、ファイルシステムをマウントします。
- CentOS_8_Server.img -ディスクイメージの名前。この画像は現在のディレクトリにあります。
このコマンドは、指定されたイメージをロードし、ゲストファイルシステムをマウントして、guestfishシェル内に移動します。
仮想マシンファイルシステムとディスクイメージを編集するためのゲストファイルシステムシェルであるguestfishへようこそ。タイプ:コマンドのヘルプについては「help」、マニュアルを読むには「man」、シェルを終了するには「quit」オペレーティングシステム:CentOSLinuxリリース8.2.2004 (コア)/ dev / cl/rootにマウント//dev/sda1にマウント/boot>
"-i"を使用した場合 パラメータを使用すると、ゲストファイルシステムを手動で一覧表示してマウントする必要はありません。ファイルシステムは自動的にマウントされます。また、ライブラリを起動してディスクイメージを自分で添付する必要はありません。 Guestfish自体がそれを処理します。
1.3。ディスクイメージだけでなく仮想マシンにアクセスする
Guestfishには、ディスクイメージの代わりに仮想マシン(ドメイン)にアクセスするオプションがあります。
まず、コマンドを使用して仮想マシンの名前を取得します:
$ virsh list --all ID名の状態----------------------------------centos8-uefiシャットオフ--nginx_centos8シャットオフ
「centos8-uefi」という名前のVMにアクセスするには、以下のように-dまたは--domainオプションを使用します。
$ guestfish -d centos8-uefi -i
1.4。ディスクイメージの内容の表示と変更
Guestfishは、ディスクイメージを自由に表示および変更するための何百ものコマンドをサポートしています。マニュアルページ全体を見ると、圧倒されます。したがって、最初に助けを得る方法を知っている方がよいでしょう。
すべてのコマンドを一覧表示
どこから始めればよいかわからない場合は、次のコマンドを使用してヘルプセクションを表示してください。
>ヘルプ
使用可能なすべてのコマンドと簡単な説明を一覧表示するには、次のコマンドを実行します。
>help -l </ pre> 特定のコマンドの助けを借りる
mkdirなどのコマンドのヘルプを取得するには、次のコマンドを実行します。
help mkdir 次に、いくつかの例を見てみましょう。
ブロックデバイスの一覧表示
画像内のすべてのブロックデバイスを一覧表示するには、次のコマンドを実行します。
>list-devices / dev / sda パーティションの一覧表示
すべてのブロックデバイスで検出されたすべてのパーティションを一覧表示するには、次のコマンドを実行します。
>list-partitions / dev / sda1 / dev / sda2 ディレクトリの内容を一覧表示する
特定のディレクトリ内のファイルを一覧表示するには、次のコマンドを実行します。
>ls / root .bash_history.bash_logout.bash_profile.bashrc.cshrc.tcshrc ファイルの内容を表示
ファイルの内容を表示するには、次のコマンドを実行します。
>cat / etc / fstab ## / etc / fstab#2020年2月6日木曜日06:43:28にanacondaによって作成##アクセス可能なファイルシステムは、参照により、「/ dev / disk /」の下に維持されます。#manページfstab(5)、findfs( 8)、mount(8)および/またはblkid(8)で詳細を確認してください。##このファイルを編集した後、「systemctldaemon-reload」を実行してこのファイルから生成されたsystemd#ユニットを更新します。#/ dev / mapper / cl- root / xfs defaults 0 0UUID =5e675dd6-7f64-46cd-8535-3617f3cf870b / boot ext4 defaults 1 2 / dev / mapper / cl-swap swap swap defaults 0 0 ディレクトリを作成
次のコマンドは、ゲストシステムの/rootディレクトリの下に「ostechnix」という名前のディレクトリを作成します。
>mkdir / root / ostechnix 空のファイルを作成する
ゲストマシン内に空のファイルを作成するには、次の手順を実行します。
>touch /root/ostechnix/file.txt ファイルが作成されているかどうかを確認します:
>ls / root / ostechnix / file.txt コンテンツを含むファイルを作成する
一部のコンテンツを含むファイルを作成するには、書き込みを使用します コマンド:
>書き込み/root/ostechnix/file2.txthttps://ostechnix.com 上記のコマンドは、/ root / ostechnix /ディレクトリにfile2.txtを作成し、そこに「https://ostechnix.com」と書き込みます。
「cat」コマンドを使用して確認できます:
>cat /root/ostechnix/file2.txt https://ostechnix.com 既存のファイルにコンテンツを追加する
作成済みのファイルの最後に新しいコンテンツを追加するには、「write-append」コマンドを使用します。
write-append /root/ostechnix/file2.txt / about 上記のコマンドは、file1.txtの内容の最後に「/about」という単語を追加します。
行が追加されているかどうかを確認するには、catコマンドを使用します:
>cat /root/ostechnix/file2.txt https:/ostechnix.com/about ファイルの編集
ゲストマシンでファイルを編集するには、「編集」コマンドを使用します。
>編集/root/ostechnix/file.txt 指定されたファイルがデフォルトのエディタで開きます。
ファイルとディレクトリを削除する
ゲストマシンからファイルを削除するには:
>rm /root/ostechnix/file2.txt> rm /root/ostechnix/file.txt ディレクトリを削除するには、「rmdir」コマンドを使用します:
>rmdir / root / ostechnix / ローカルファイルまたはディレクトリをディスクイメージにコピーします
「copy-in」コマンドは、ローカルファイルまたはディレクトリを再帰的にディスクイメージにコピーします。
次のコマンドは、ファイル ostechnix.txtをコピーします ローカルシステムから/root / ostechnix / ディスクイメージ内。
コピーインostechnix.txt/root / ostechnix / lsを使用して確認します コマンド:
ls / root / ostechnix / file.txtostechnix.txt ファイルまたはディレクトリをディスクイメージからホストシステムにコピーします
同様に、以下のような「copy-out」コマンドを使用して、ファイルまたはディレクトリをディスクイメージからローカルホストシステムにコピーできます。
コピーアウト/root/ ostechnix / / home / sk / Downloads / 上記の例では、/ root /ostechnix/ディレクトリをホストシステムのDownloadsディレクトリにコピーしています。
ファイルをホストシステムにダウンロード
これは、コピーアウトコマンドと同じです。
Guestfishを使用すると、ゲストマシンからホストマシンに、またはその逆にコンテンツをダウンロードおよびアップロードできます。
ファイルをダウンロードするための一般的な構文:
ダウンロード次のコマンドは、「/ etc/fstab」ファイルをゲストマシンからKVMホストシステムの/home/ sk /Downloads/ディレクトリにダウンロードします。
ダウンロード/etc/ fstab / home / sk / Downloads / fstab ホストシステムからゲストシステムにファイルをアップロードする
これは、コピーインコマンドと同じです。
ホストシステムからゲストマシンにファイルをアップロードするには、次のコマンドを実行します。
>アップロード/home/ sk / Downloads / fstab / etc / fstab ここでは、 / home / sk / Downloads / fstabをアップロードしています ローカルシステムから/etc / fstabへのファイル ゲストマシンで。
guestfishのマニュアルページを表示する
guestfishのmanページを表示するには:
>男 ゲストフィッシュを終了
ゲストフィッシュシェルを終了するには、次のコマンドを実行します:
>終了 これまでに見たのは、既存のディスクイメージにアクセスし、マウントし、検査し、変更したことです。 Guestfishは、新しいディスクイメージを即座に作成するのにも役立ちます。
1.5。新しいディスクイメージの作成
次のコマンドは、guestfishシェルの外部で実行する必要があります。つまり、ホスト端末で実行する必要があります。
-aパラメーターを使用して既存の画像を追加したことを覚えていますか?はい。新しいディスクイメージを作成するには、 -Nを実行します。 (--new)パラメータ。
新しいディスクイメージを作成して自動的に起動するには、ホスト端末(guestfishではない)プロンプトから次のコマンドを実行します。
$ guestfish -N fsこのコマンドは、 "test1.img"という名前の新しいディスクを作成します 現在のディレクトリに移動し、guestfishプロンプト内に移動します。このディスクには、ファイルシステムが空の単一のパーティションが含まれます。デフォルトでは、ディスクサイズは 1GBになります 。次回同じコマンドを実行すると、サイズ1Gなどの「test2.img」という名前の新しいディスクが作成されます。
固定サイズの1Gディスクを作成する代わりに、カスタムサイズのディスクイメージを作成することもできます。
空の500MBディスクを作成するには 、実行:
$ guestfish -N disk:500M特定のファイルシステムでフォーマットされたディスクイメージを作成することもできます。たとえば、次のコマンドは ext4で1Gディスクを作成します -現在のディレクトリでtest1.imgと呼ばれるフォーマットされたパーティション:
$ guestfish -N fs:ext4VFATを使用して500MBのディスクを作成します -フォーマットされたパーティションをマウントします:
$ guestfish -N fs:vfat:500M -m / dev / sda1blankdisk.imgという名前の空の500MBディスクを作成します (デフォルト名test1.imgの代わりに):
$ guestfish -N blankdisk.img =disk:500M1.6。リモートディスクイメージの追加
ローカルディスクイメージだけでなく、リモートSSH、FTP、HTTP、またはTFTPサーバーにあるディスクを追加することもできます。
リモートSSHサーバーにあるディスクを追加します:
$ guestfish -a ssh:// [email protected] /disk.img上記のコマンドのユーザー名とIPアドレスを独自のものに置き換えます。
リモートFTPサーバーにあるディスクを追加します:
$ guestfish -a ftp:// [email protected]:port / disk.img$ guestfish -a ftps:// [email protected]:port / disk.imgリモートHTTPサーバーにあるディスクを追加します:
$ guestfish -a http:// [email protected]:port / disk.img$ guestfish -a https:// [email protected]:port / disk.imgリモートTFTPサーバーにあるディスクを追加します:
$ guestfish -a tftp:// [email protected]:port / disk.img2。ゲストフィッシュシェルに入らずにディスクイメージにアクセス、表示、変更する
Libguestfsは、実際にguestfishシェルに入ることなく、ディスクイメージにアクセス、表示、および変更するための他の多くの同等のコマンドを提供します。
2.1。ゲストマウント
Guestmountコマンドは、FUSEとlibguestfsを使用してゲストファイルシステムをホストにマウントするために使用されます。
次のコマンドは、 centos8-uefiをマウントします ホストシステムの〜/guestvm/にあるゲストマシンのファイルシステム。
$ mkdir〜/ guestvm /$ sudo guestmount -d centos8-uefi -i〜/ guestvm /マウントディレクトリの内容を確認します:
$ sudo ls -l〜/ guestvm出力例:
合計16lrwxrwxrwx。 1ルートルート2019年5月11日bin->usr/bindr-xr-xr-x。 6ルートルート4096Jul1815:46bootdrwxr-xr-x。 2ルートルート6Jul1815:23devdrwxr-xr-x。 78ルートルート8192Jul2517:54etcdrwxr-xr-x。 2ルートルート2019年5月11日homelrwxrwxrwx。 1ルートルート72019年5月11日lib->usr/liblrwxrwxrwx。 1ルートルート2019年5月11日lib64->usr/lib64drwxr-xr-x。 2ルートルート2019年5月11日mediadrwxr-xr-x。 2ルートルート62019年5月11日mntdrwxr-xr-x。 2ルートルート62019年5月11日optdrwxr-xr-x。 2ルートルート6Jul18 15:23procdr-xr-x---。 2ルートルート135Jul1815:46rootdrwxr-xr-x。 2ルートルート6Jul1815:23runlrwxrwxrwx。 1ルートルート82019年5月11日sbin->usr/sbindrwxr-xr-x。 2ルートルート62019年5月11日srvdrwxr-xr-x。 2ルートルート6Jul1815:23sysdrwxrwxrwt。 7ルートルート119Jul2518:44tmpdrwxr-xr-x。 12ルートルート144Jul1815:24usrdrwxr-xr-x。 20ルートルート278Jul18 15:45 varマウントを解除するには、次のコマンドを実行します:
$ sudo umount〜/ guestvm詳細については、manページを参照してください。
$ man guestmount2.2。 virt-cat
Virt-catコマンドを使用して、ディスクイメージまたは仮想マシンに保存されているファイルの内容を表示します。
$ sudo virt-cat -a CentOS_8_Server.img / etc / fstabまたは、
$ sudo virt-cat -d centos8-uefi / etc / fstab出力例:
## / etc / fstab#anacondaによってSat Jul 18 05:53:25 2020 ##で作成アクセス可能なファイルシステムは、参照により、「/ dev / disk /」の下に保持されます。#manページfstab(5)を参照してください。 、findfs(8)、mount(8)、blkid(8)で詳細を確認してください。##このファイルを編集した後、「systemctldaemon-reload」を実行してこのファイルから生成されたsystemd#ユニットを更新します。#/ dev / mapper / cl-root / xfs defaults 0 0UUID =6a7f6481-5eb3-4589-ad19-b2291ddfcda1 / boot ext4 defaults 1 2UUID =6906-5D0A / boot / efi vfat umask =0077、shortname =winnt 0 2 / dev / mapper / cl-スワップスワップスワップのデフォルト002.3。 virt-copy-in
Virt-copy-inコマンドは、ファイルとディレクトリをホストからディスクイメージまたは仮想マシンにコピーするために使用されます。
$ sudo virt-copy-in -a CentOS_8_Server.img ostechnix.txt / root /または、
$ sudo virt-copy-in -d centos8-uefi ostechnix.txt / root /2.4。 virt-copy-out
Virt-copy-outコマンドは、ディスクイメージまたは仮想マシンからファイルとディレクトリをコピーするために使用されます。
$ sudo virt-copy-out -a CentOS_8_Server.img /root/ostechnix.txt〜/ダウンロードまたは、
$ sudo virt-copy-in -d centos8-uefi /root/ostechnix.txt〜/ダウンロード上記のコマンドは、/ root /ostechnix.txtファイルを仮想マシンディスクからローカルホストシステムの〜/Downloadsディレクトリにコピーします。
2.4。 virt-df
Virt-dfコマンドは、ゲストマシンファイルシステムの空き領域を表示します。
ディスクイメージの空き領域を表示する:
$ sudo virt-df -a CentOS_8_Server.img出力例:
使用可能なファイルシステムサイズ使用可能Use%CentOS_8_Server.img:/dev/sda1 976M 260M 649M 27%CentOS_8_Server.img:/ dev / cl / root 17G 1.4G 16G 9%VMのディスク容量を表示する:
$ sudo virt-copy-in -d centos8-uefi /root/ostechnix.txt〜/ダウンロード出力例:
使用可能なファイルシステムサイズ使用可能使用%centos8-uefi:/ dev / sda1 599M 6.6M 592M 2%centos8-uefi:/ dev / sda2 976M 121M 788M 13%centos8-uefi:/ dev / cl / root 16G 1.2G 15G 8%2.5。 virt-edit
ディスクイメージまたは仮想マシンのファイルを編集します。
$ sudo virt-edit -a CentOS_8_Server.img /root/ostechnix.txtまたは、
$ sudo virt-edit -d centos8-uefi /root/ostechnix.txtこのコマンドは、デフォルトのエディタでリモートファイルを開きます。変更を加えて、ファイルを保存して閉じます。
2.6。 virt-filesystems
仮想マシンまたはディスクイメージ内のファイルシステム、パーティション、ブロックデバイス、LVMを一覧表示します。
$ sudo virt-filesystems -a CentOS_8_Server.img -l </ pre>または、
$ sudo virt-filesystems -d centos8-uefi -l </ pre>出力例:
名前タイプVFSラベルサイズParent/dev/sda1ファイルシステムvfat-629145600-/dev/sda2ファイルシステムext4-1073741824-/dev / cl/rootファイルシステムxfs-17620271104-パーティションの詳細を表示するには、-partitionsを追加します 上記のコマンドの場合:
$ sudo virt-filesystems -d centos8-uefi --partitions / dev / sda1 / dev / sda2 / dev / sda3同様に、-logical-volumesを使用できます 、-ボリュームグループ 、-物理ボリューム 、-block-devices それらのアイテムを一覧表示します。
2.7。 virt-inspector
Virt-inspectorは、オペレーティングシステムのバージョンや、ディスクイメージまたは仮想マシンに関するその他の情報を表示するために使用されます。
$ sudo virt-inspector -a CentOS_8_Server.imgまたは、
$ sudo virt-inspector -d centos8-uefi2.8。 virt-ls
Virt-lsは、ファイルとディレクトリ、およびそれらのサイズ、属性、チェックサムをディスクイメージまたは仮想マシンに表示するために使用されます。
$ sudo virt-ls -R -a CentOS_8_Server.img / |少ないまたは、
$ sudo virt-ls -R -d centos8-uefi / root通常の「ls」コマンドオプション/フラグのほとんどは、virt-lsコマンドで使用できます。
2.9。 virt-log
Virt-logは、ディスクイメージまたは仮想マシンからのログファイルを表示するために使用されます。
$ sudo virt-log -a CentOS_8_Server.imgまたは、
$ sudo virt-log -d centos8-uefi2.10。 virt-tail
Virt-tailコマンドは、ディスクイメージまたは仮想マシンのログファイルを追跡するために使用されます。
$ sudo virt-tail -a CentOS_8_Server.img / var / log / messagesまたは、
$ sudo virt-tail -d centos8-uefi / var / log / messages利用できるコマンドは他にもたくさんあります。このガイドの最後にリンクされているlibguestfsのWebサイトを参照することをお勧めします。
次を読む:
- Virt-builderを使用して仮想マシンイメージをすばやく構築する
- LinuxでVirt-topを使用して仮想化システムの統計を表示する
- Virt-rescueを使用して仮想マシンをレスキューする方法
トラブルシューティング
いくつかの一般的な問題の解決策は次のとおりです。
1。 libguestfsは、Ubuntuでroot権限がないと機能しません
Ubuntuでディスクイメージにアクセスしようとすると、このエラーが発生する可能性があります:
libguestfs:エラー:/ usr / bin / superminがエラーステータス1で終了しました。完全なエラーメッセージを表示するには、デバッグを有効にする必要がある場合があります。詳細については、http://libguestfs.org/guestfs-faq.1.html#debugging-libguestfsを参照してください。この問題を修正するには、次を実行します:
$ sudo chmod 0644 / boot / vmlinuz *kvmに自分を追加する必要がある場合があります グループ:
$ sudo usermod -a -G kvm sk上記のコマンドの「sk」を自分のユーザー名に置き換えてください。
- システムにlibvirtまたはKVMを既にインストールしていて、rootユーザーとしてlibguesfsツールを使用しようとすると、次のアクセス許可エラーが表示されます。
libguestfs:エラー:libvirtを介してアプライアンスを作成できませんでした。この環境変数を使用してlibvirtなしでqemuを直接実行してみてください:exportLIBGUESTFS_BACKEND =directlibvirtからの元のエラー:ストレージファイルのバッキングファイル'/root/CentOS_8_Server.qcow2'にアクセスできません'/ tmp / libguestfsiPjmga / overlay1.qcow2'(uid:107、gid:107として):アクセスが拒否されました[code =38 int1 =13]これはlibvirtが原因であるため、libvirtバックエンドを使用している場合にのみ発生します。これを修正するには、次の環境変数を設定して直接バックエンドに切り替えます。
export LIBGUESTFS_BACKEND =direct永続的にするには、この行を〜/ .bashrcに追加します ファイル。
Linux