久々にLinuxネタ。Linux LVM2でVGを拡張(PV追加ではなく、PV自体を拡張)するときのメモ。

手順としては

  1. fdiskでPVのパーティション拡張
  2. pvresizeでPVを拡張
  3. 終わり

のはずだったんですが、pvresizeでこんなエラーがでました。

/dev/sda3: too many metadata areas for pvresize

VGのmetadataのcopyが多すぎるってことらしいのですが、metadataのcopy数の指定はpvcreate時に行われるらしく、デフォルトは1なので1個しかないはずなんだけどな…vgdisplayするの忘れて値を保存してなかった…

で、調べたところ一応回避策がlinux-lvmのMLにありました。

Re: [linux-lvm] pvresize complains about too many metadata

https://archives.free.net.ph/message/20081130.123440.f5cf9c13.ja.html#linux-lvm

メタデータのバックアップを取って、PVを作り直せとのこと。結局以下のようなフローになりました。

  1. VG metadataのバックアップ
  2. fdiskでPVのパーティション拡張
  3. PVを削除
  4. PV新しいサイズで再作成(UUIDとVG metadata使用)
  5. VG metadataのリストア
  6. pvresizeによるVGの拡張

まず、VGメタデータのバックアップ。今回はrootvgだったので、SystemRescueCDでCDブートして実行しました。

vgcfgbackup -f /data/rootvgcfg.txt rootvg

fdiskは適当に。自分は/dev/sda3の後ろに100GB以上Free Areaを残していたので、これをすべて/dev/sda3として再作成しました。

次にPVを削除。vgremoveするのが怖かったので、強制PV削除にしました。どっちが安全なのかは調べてません。

pvremove -ff /dev/sda3

で、次にPVの再作成をします。このとき元のPVのuuidと、VGのcfg backupのファイルを使用します。PVのuuidはVGのcfgの中に書いてあるので焦らなくていいです。まぁ個別にpvdisplayで確認しておくのが、複数PVを使用していたり、別のサーバーで作業したりするのに便利だと思います。

pvcreate -v --uuid 44583ee5-c4ff-4f2c-84fe-0398d71de14d --restorefile /data/rootvgcfg.txt

次にVGのmetadataをリストアします。

vgcfgrestore  -f /data/rootvgcfg.txt rootvg

これで、rootvgがリストアされます。ただし、今のままだと、VGのサイズは以前のままなので、最後にpvresizeでPVが拡張されていることをLVMに教えてあげます。VGの拡張なのにpvresizeってコマンドに違和感を感じますが…ちなみにIBM AIXなら"chvg -g"とかでPV拡張が反映されるのでそっちのほうがしっくりくるのですが。

pvresize /dev/sda3

これでVGも拡張されます。

LVM2の情報はRedHatの資料が詳しいです。

Red Hat Enterprise Linux 5 LVM Administration Guide

https://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.4/html/Logical_Volume_Manager_Administration/index.html

SystemRescueCDはこちら。

SystemRescueCD

https://www.sysresccd.org/Main_Page