それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

qcow2 のストレージを直接マウントする。(ループバックで接続経由し、losetupで使う。)

qcow2 ディスクイメージをマウントしようと思ったら、loop back で接続すればいいとわかった。

raw であれば、losetup -P -f /path/to/raw.imgでlosetupで手軽に扱えるが、qcow2の場合は、nbdを経由する。

qcow2 のディスクを接続する

コネクトを使う。

sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/d02.qcow2
sudo fdisk /dev/nbd0 -l
sudo qemu-nbd -d /dev/nbd0 

nbd 機能を使えば、qcow2 をループバック接続できて、フォーマットやインストール、状況を見ることができる。これを使えば通常のストレージのファイルと同じように扱える。

/dev/nbd0 ループバック・マウント後

ループバックさえできれば、あとはmount したり gdisk したりできるよね。

mount /dev/nbd0p2  /mnt

ただし、qcow2 は完全なディスクイメージなので、lvm になってたり、dm-cryptがかかってたりするので、/dev/mapper経由でマウントすることになる可能性が高い。

mount /dev/mapper/xxx-root-vg /mnt

nbd 機能の有効無効の切り替え

Failed to open /dev/nbd0: No such file or directory のようにnbd が存在しないエラーになるときは、カーネル拡張をロードしてやればいい

sudo modprobe nbd max_part=8

使い終わったら アンロードしておけばいい

sudo rmmod nbd

LVMを含むqcow2 のnbd は注意が必要

lvm を含む nbd を扱うと、nbd デバイスをロードした瞬間に lvm が走って、lvm として認識されちゃう。

認識されちゃうと、nbd を切断しても lvm に残ってしまう。

takuya@:~$ sudo qemu-nbd --disconnect /dev/nbd0
/dev/nbd0 disconnected
takuya@:~$ sudo partprobe
Warning: Error fsyncing/closing /dev/mapper/d01--vg-root: 入力/出力エラーです
Warning: Error fsyncing/closing /dev/mapper/d01--vg-swap_1: 入力/出力エラーです
Warning: Error fsyncing/closing /dev/nbd0p1: 入力/出力エラーです
Warning: Error fsyncing/closing /dev/nbd0p2: 入力/出力エラーです
Warning: Error fsyncing/closing /dev/nbd0p3: 入力/出力エラーです

lvm を含むディスクを扱うときは、手作業でLVMから取り外すしか無いです。

認識されちゃったときは手動で、INACTIVEにしておくと無難

vgchange -an  qcow_vg

マウントして調べるときは/boot 型違反だと思うので、ほぼ使わないので、自動化しないでほしいところ

lvm が消えないとき

lvm, が消えない、そのときは、dmsetpup をた試すのもいい。

sudo dmsetup ls 
sudo dmsetup removevg-lv05

dmsetup をしたあとに再度、除去を試す。

sudo qemu-nbd -d /dev/nbd0 
sudo rmmod nbd

これでも駄目なら再起動するしか・・・・

参考資料

https://consolechars.wordpress.com/2015/07/15/how-to-qcow2-files-mount-in-yours-linux-system-with-lvm/

https://bbs.archlinux.org/viewtopic.php?id=264163