はじめに
KVM等で仮想化したイメージファイルを確認するのに qemu-img info を使ったりするわけですが、何時からなのかロックされているとエラーになるようになりましたので調べてみました。
エラーの内容
起動中のVPSのイメージに対して、CentOS8 や Alumalinux8 等のRedHat Enterprise Linux 8以降でエラーになるようになりました。
# qemu-img info test.qcow2
qemu-img: Could not open 'test.qcow2': Failed to get shared "write" lock
Is another process using the image [test.qcow2]?
情報を見るだけなのに書き込みの為のロックが出来ない?別のプロセスが使用中?確かにVPSが起動中ですから他のプロセスが使用中ですし、VPSを停止してからコマンドを実行すると問題無く情報を得る事ができます。
原因?
どうやら qemu 2.10 以上からの仕様のようで、qemu-img info でメタデータを読み取るわけですが、場合によっては整合性が取れない誤った結果となる事を避ける為の措置のようです。info で得られる情報の中には実使用サイズも得られますから、起動中だと数値は変わる事もありえるのかもしれませんね。
結果を保証しなくてもよいので見たい場合は、-U(--force-share) オプションを指定すれば見る事ができます。
# qemu-img info -U test.qcow2
image: test.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 1.91 GiB
cluster_size: 65536
cleanly shut down: no
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: test.qcow2
protocol type: file
file length: 10 GiB (10739318784 bytes)
disk size: 1.91 GiB
Format specific information:
extent size hint: 1048576
最後に
qemu 2.10 からイメージのロックが使えるようになった事で可能になったようですが、本来はこのイメージロック機能は1つのイメージファイルを誤って複数のVPSとして実行する事を防ぐ為の安全機能のようです。よく似たファイル名等で誤って指定してしまいイメージファイルを壊してしまうといった事がよくあったのかもしれませんね。