0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KVM仮想ゲスト内のファイルを仮想ホストから確認する

0
Posted at

概要

仮想ゲストをいろいろ操作していて、起動できなくなってしまったというパターンがあるかもしれない。その時に、ゲスト内に残されているファイル群などを仮想ホスト側から最低限リカバリする手順である。

実行環境

  • 仮想ホスト:almalinux8.10
  • 仮想ゲスト:almalinux9.3
  • libvirtd:libvirtd (libvirt) 8.0.0
  • virsh:8.0.0

実行手順

まず、以下のコマンドを仮想ホストで実行し、仮想ゲストのイメージファイルのパスを確認する。

sudo virsh dumpxml ゲスト名 | grep "source file"
実行例
user@kasouhost ~]$ sudo virsh dumpxml  testvm | grep "source file"
      <source file='/var/lib/libvirt/images/testvm.img' index='1'/>
user@kasouhost ~]$

マウントする用のディレクトリを作成しておく。

mkdir /mnt

loop デバイスに設定する。

losetup は loop デバイス(/dev/loop0, /dev/loop1, …)を操作するためのコマンド。
これを用いて、imgファイルとloopデバイスを紐づけ、紐づけたloopデバイスをディレクトリにマウントさせる、という事を行っていく。

loop デバイスとは:
ファイルをディスクデバイスとして扱いたい時に使う特殊デバイス
例:ISO イメージ、ディスクイメージ(qcow2、raw など)

実行例
sudo losetup --find --show /path/to/image.img
  • --find
    • 空いている loop デバイスを検索する
  • --show
    • 結びつけた loop デバイス名を表示する
  • /path/to/image.img
    • ゲストのイメージファイル。上のdumpxmlで出てきた内容を入れる。ここでは/var/lib/libvirt/images/testvm.img

紐づけたら、以下のコマンドで確認が可能。

 losetup -a
実行結果
[user@kasouhost dev]$ losetup -a
/dev/loop0: []: (/var/lib/libvirt/images/testvm.img)
[user@kasouhost dev]$

もし、これを解除したいなら以下のコマンド。

loop0を解除したい場合。
 sudo losetup -d /dev/loop0

その後、カーネルにパーティションの変更を通知するpartprobeコマンドを実行する。

sudo partprobe loopデバイスのパス
実行例
sudo partprobe /dev/loop0

これができると、以下のコマンドでパーティションを確認できる。

sudo fdisk -l loopデバイスのパス
実行例
sudo fdisk -l /dev/loop0

ディスク /dev/loop0: 40 GiB, 42949672960 バイト, 83886080 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 9748BAF4-6278-4E23-85DE-C85F27F86D64

デバイス     開始位置 終了位置   セクタ サイズ タイプ
/dev/loop0p1     2048  1230847  1228800   600M EFI システム
/dev/loop0p3  1230848 83884031 82653184  39.4G Linux ファイルシステム

lsblkでも見る事ができる。

lsblk loopデバイス名
実行例
lsblk /dev/loop0

NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0       7:0    0   40G  0 loop
├─loop0p1 259:0    0  600M  0 loop
└─loop0p3 259:1    0 39.4G  0 loop

マウントして確認

今回、/dec/loop0p3の部分が全体のVMの中身/領域として見えそうなので、この部分をマウントしてみる。

sudo mount /dev/loop0p3 /mnt

これで、/mntの中が、仮想ゲストのイメージファイルと紐づいた形になった。
ためしにlsコマンドを打つ。

ls /mnt
実行結果
ls /mnt

afs  bin  boot  dev  etc  export  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  swap_file  sys  tmp  usr  var

mountコマンドでも、マウントできている事を確認できる。

結果
mount
略
/dev/loop0p3 on /mnt type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)

アンマウント

もろもろ調査内容を確認できたら、アンマウントする。

sudo umount /mnt

すると、lsコマンド等を実行してみても確認できなくなる。マウントが外れたためである。
また、loopデバイスも解除する

sudo losetup -d /dev/loop0

その後、lsblk /dev/loop0losetup -aで、何も表示されない事を確認できたら後片付けは完了。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?