前置き
最近やっとCentOS8のサーバーをCentOS Stream 9に置き換えて本格的に使い始めました。
RockyLinuxやAlmaLinuxもCentOS8からのマイグレーションということでは大変ありがたいのですが、じゃあそのまま9にして使うかというと悩ましく、悩ましいぐらいなら正統な方に属するCentOS Stream 9を使おうかと思った次第です。最悪AlmaLinux9とかにマイグレーションできるみたいだし…
CentOS Stream 9やRHEL9クローンは体感では、ほぼ同じバージョンのカーネルを採用しているUbuntu 22.04より快適です。理由がx86_64-v2特化やもっと深いところにあるのか、単にコンソールの表示が速いだけなのか、単に新品のパンツを履いたときぐらいのお気持ちなのかは不明。あとすべてにおいて速いというわけではなさそうですね。
-
x86_64-v2(日本語) https://rheb.hatenablog.com/entry/x86-64-v2
-
(アプリケーションサーバーではなく)インフラ基盤としては良さそうなパフォーマンス(英語)
https://www.phoronix.com/review/centos-stream-9
ただ、使ってみると、古いOSで使っていたLVMのディスクを認識してくれていないことに気付きました。
lvもvgもpvも出てこない
再起動とかアップデートとかそのうち何かのタイミングで出てきてくれるのかなと思いきや、一向に出てきませんし、何もエラーも出しません。lvs, vgs, pvs, pvscanでも出てきません。
--devices
オプションでPVがあったところを強制的に指定してやると何とか出てきます。なので、/dev/sdc
がそのデバイスだったとして、その状態で無理やりactivate
vgchange -ay Old_VG --devices /dev/sdc
とかするとmountすることもできるのですが、mountした状態ですら、pvもvgもlvも出てきません。
これはなかなか困ります。
なお、新規にpvcreateすると普通に出てきます。ここだけ見ると、まるでバージョンアップで新旧のLVMに互換性が無くなったような動作なので、驚いて作り直したりしないようにしましょう。
原因
というわけで原因です。公式ではないのですが、こちらによると、RHEL9から、pvの検索には
/etc/lvm/devices/system.devices
ファイルのリストを使うようになったとのこと。
公式に近いところで唯一見つけられたのはBugzilla。
https://bugzilla.redhat.com/show_bug.cgi?id=2012830
いずれにせよ解決策は次の通りです。
解決策
方法その1) 昔と同じ挙動にする
メンテナンス用のマシンで、いろんなディスクを動的に付けたり外したりして認識してほしいというときには、昔と同じように動いてほしいものです。
/etc/lvm/devices/system.devices
を使わないようにして、昔と同じ動作をさせるには、lvm.conf
でuse_devicesfile=0
を設定すると良いようです。
CentOS Stream9のlvm.conf
ではコメントアウトされているのでアンコメントすればよいですね。
# Configuration option devices/use_devicesfile.
# Enable or disable the use of a devices file.
# When enabled, lvm will only use devices that
# are lised in the devices file. A devices file will
# be used, regardless of this setting, when the --devicesfile
# option is set to a specific file name.
# This configuration option has an automatic default value.
# use_devicesfile = 0
なお、CentOS8やUbuntu22.04のlvm.confにはそもそもエントリーがありませんでした。Ubuntuはコマンドもないので、非対応っぽいですね。上記のBugzillaによるとCentOS8.5からサポート(CentOS8だとデフォルトオフ)かな。
方法その2) 正しい使い方をしてみる
新しいやり方には正しい使い方が当然用意されています。こっちの方が良い結果が期待できそうです。新しすぎるとバグを踏む確率も上がるかもしれないですが…
/etc/lvm/devices/system.devices
にエントリを追加するためのコマンドは次の通りです。
/dev/sdc
がそのデバイスだったとして
lvmdevices --adddev /dev/sdc
またはデバイスを指定しないでやってくれる
vgimportdevices -a
vgimportdevices
は、指定された(またはすべての)vgに対してlvmdevices --adddev
を使うと書かれているので、余計なものを巻き込まない限りはどちらでも同じ結果になるはずです。
https://man7.org/linux/man-pages/man8/lvmdevices.8.html
https://man7.org/linux/man-pages/man8/vgimportdevices.8.html
普段はアップデート後にこれを実行するだけでよさそうですね。
感想
あんまり情報ないあたり、もうRHEL9互換ディストリかつ手作業かつベアメタル運用なんてのは希少of希少なんでしょうね。クラウドだとほぼLVM使わないだろうし…