シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

CentOS8の論理ボリューム作成でハマった話

技術部ネットワーク課の上曽山です。
先日CentOS Stream8で、検証のためにkvmゲストを作成→削除していたら、同じ名前のボリュームが作れなくなるという事象が起きました。

エラーメッセージ等で検索しても、あまりいい情報が出て来なかったんですが、とりあえずの回避策を見つけたのでまとめました。

この問題は03/18にBugzillaに登録されたようです。 bugzilla.redhat.com

目次

発生した事象

環境は以下の通りです。

バージョン
OS centos-stream-release-8.4-1
lvm2 lvm2-2.03.11
libvirt libvirt-3.9.0-14.el7_5.6.x86_64

まず適当な名前で論理ボリュームを作成します。

# virsh vol-create-as pool01 test001.example.com 10G
Vol test001.example.com created

事象を再現するため、パーティションにラベル(シグネチャ)を作成します。

# parted /dev/vg01/test001.example.com mklabel msdos

一旦、論理ボリュームを削除します。

# virsh vol-delete --pool pool01 test001.example.com
Vol test001.example.com deleted

その後、同じ名前で論理ボリュームを作ろうとすると作成に失敗します。

# virsh vol-create-as pool01 test001.example.com 10G
error: Failed to create vol test001.example.com
error: internal error: Child process (/usr/sbin/lvcreate --name test001.example.com -L 10485760K vg01) unexpected exit status 5: WARNING: dos signature detected on /dev/vg01/test001.example.com at offset 510. Wipe it? [y/n]: [n]
  Aborted wiping of dos.
  1 existing signature left on the device.
  Failed to wipe signatures on logical volume vg01/test001.example.com.
  Aborting. Failed to wipe start of new LV.

以前のシグネチャが残っているから作成に失敗しているのは分かりますが、じゃあどうすればいいのか?
エラーメッセージに具体的な解決策は示されていないので色々試してみました。

試行錯誤

lvcreateしてみる

前述のエラーメッセージに含まれている、論理ボリューム作成コマンドを実行してみます。

# /usr/sbin/lvcreate --name test001.example.com -L 10485760K vg01
WARNING: dos signature detected on /dev/vg01/test001.example.com at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/vg01/test001.example.com.
  Logical volume "test001.example.com" created.

シグネチャの削除に同意すれば作成に成功します。
LVMの問題でシグネチャが削除出来ない訳ではないようです。

virsh vol-create-asにオプションを追加してみる

virshで論理ボリュームを作成する時のコマンドが正しくないのかもしれない、と思いオプションを省略しない形で実行してみました。

# virsh vol-create-as --pool pool01 --name test001.example.com --capacity 10G
error: Failed to create vol test001.example.com
error: internal error: Child process (/usr/sbin/lvcreate --name test001.example.com -L 10485760K vg01) unexpected exit status 5: WARNING: dos signature detected on /dev/vg01/test001.example.com at offset 510. Wipe it? [y/n]: [n]
  Aborted wiping of dos.
  1 existing signature left on the device.
  Failed to wipe signatures on logical volume vg01/test001.example.com.
  Aborting. Failed to wipe start of new LV.

当然ながら失敗しました。
マニュアル等も見てみましたが、virshコマンドにこの問題を解決出来そうなオプションは見つかりません。

シグネチャを削除してみる

ddコマンドでパーティションの先頭をゼロ埋めしてみます。

# dd if=/dev/zero of=/dev/sda4 bs=512 count=1

シグネチャが削除されるので論理ボリュームは作成出来るのですが、2個目、3個目と複数のボリュームが存在していたら、この手は危なっかしくて使えません。

パッケージをアップデートしてみる

libvirt系のアップデートはありませんでした。

# dnf update libvirt\*
Last metadata expiration check: 0:00:22 ago on Thu 25 Mar 2021 09:14:12 PM JST.
Dependencies resolved.
Nothing to do.
Complete!

lvm2はアップデートされましたが、状況は改善しませんでした。

# dnf update lvm2
Last metadata expiration check: 0:03:21 ago on Thu 25 Mar 2021 07:30:07 PM JST.
Dependencies resolved.
====================================================================================================================================
 Package                                   Architecture            Version                            Repository               Size
====================================================================================================================================
Upgrading:
 device-mapper                             x86_64                  8:1.02.175-5.el8                   baseos                  375 k
 device-mapper-event                       x86_64                  8:1.02.175-5.el8                   baseos                  269 k
 device-mapper-event-libs                  x86_64                  8:1.02.175-5.el8                   baseos                  269 k
 device-mapper-libs                        x86_64                  8:1.02.175-5.el8                   baseos                  408 k
 lvm2                                      x86_64                  8:2.03.11-5.el8                    baseos                  1.6 M
 lvm2-libs                                 x86_64                  8:2.03.11-5.el8                    baseos                  1.1 M

Transaction Summary
====================================================================================================================================
Upgrade  6 Packages

※以下、省略

回避策

LVMの設定変更

改めてLVMの設定を確認していたところ、関係しそうな箇所を発見しました。

# Configuration option allocation/wipe_signatures_when_zeroing_new_lvs.
# Look for and erase any signatures while zeroing a new LV.
# The --wipesignatures option overrides this setting.
# Zeroing is controlled by the -Z/--zero option, and if not specified,
# zeroing is used by default if possible. Zeroing simply overwrites the
# first 4KiB of a new LV with zeroes and does no signature detection or
# wiping. Signature wiping goes beyond zeroing and detects exact types
# and positions of signatures within the whole LV. It provides a
# cleaner LV after creation as all known signatures are wiped. The LV
# is not claimed incorrectly by other tools because of old signatures
# from previous use. The number of signatures that LVM can detect
# depends on the detection code that is selected (see
# use_blkid_wiping.) Wiping each detected signature must be confirmed.
# When this setting is disabled, signatures on new LVs are not detected
# or erased unless the --wipesignatures option is used directly.
wipe_signatures_when_zeroing_new_lvs = 1

この設定を書き換えてみます。

wipe_signatures_when_zeroing_new_lvs = 0

これで削除したものと同じ名前の論理ボリュームが作成出来るようになりました。
サービスやサーバを再起動しなくても、設定を書き換えるだけで挙動が変わります。

論理ボリュームのデータを消す

virshには論理ボリュームのデータを削除するコマンドが用意されています。
ゲストOSの状態(running/shut off)に関わらずデータを削除してしまうので取り扱いには中止してください。

# virsh vol-wipe test001.example.com pool01
Vol test001.example.com wiped

この後、論理ボリュームを削除すれば同じ名前で論理ボリュームの作成が可能です。
データ削除には結構時間がかかるので、シグネチャ消すだけなら、すぐ止めても良いかもしれません。

最後に

一応の回避策は見つかったものの、根本的な原因が分からずモヤモヤします。
# CentOS7だと同じ設定でも事象は発生しないんですよ...
その後もチョコチョコ調べていたところBugzillaの登録を見つけたので、一旦アップデートを待つことにしました。