LVMのファイルシステムをいきなりlvreduceして壊しかけた

Linux

概要

  • online(mount中)のlogical volumeのサイズをいきなり変更したら、ファイルシステムがバグってしまってOSがおかしくなって起動しなくなりました。
  • そもそもumountしろという感じですが、EC2のEBSはオンラインで容量が拡張できるから逆に縮小もできると思い、実行してみたけど順番が違かった。。。
  • raidのディスク構成を変更したかったので、830GB位あるlogical volumeを300GBに変更したかったのです。

問題のコマンドはこちら

オンライン中に実行してはいけません。

root@dell /h/matsu# lvreduce -L 300G /dev/mapper/dell--vg-root
  WARNING: Reducing active and open logical volume to 300.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce dell-vg/root? [y/n]: y
  Size of logical volume dell-vg/root changed from 834.44 GiB (213617 extents) to 300.00 GiB (76800 extents).
  /etc/lvm/backup/dell-vg.tmp: fsync failed: Input/output error
  /etc/lvm/backup/dell-vg.tmp: fclose failed: Read-only file system
  Backup of volume group dell-vg metadata failed.
  Logical volume dell-vg/root successfully resized.

THIS MAY DESTROY YOUR DATA (filesystem etc.) って書いてあるし。。。。コマンド実行中にもIOエラーが表示されちゃってますね。やばいです。

lvmの構成情報は/etc/lvm/backup以下にバックアップされるのですが、/etc/にすでに書き込めなくなっちゃっているようです。その後はshellがおかしくなり、コマンドが徐々に打てなくなってきたのでrebootしました。

もちろん、rebootしても正常に起動できないのでinitramfsが起動します。fsckを実行しても訂正されることはありません。fsckでチェックする領域は別のようです。

本来の手順

こちらの書き込みでは、以下のように説明されています。

  1. unmountするか、オンラインでやるなら最初にresize2fs(使っているファイルシステムによってコマンドは異なる)などでファイルシステムのサイズを変更する
  2. logical volumeを縮小する
  3. phisical volumeを縮小する

上記の記事から、認知していないといけないレイヤーの整理をいかに記載します。

  • ファイルシステム
  • Logical Volume
  • Volume Group
  • Phisical Volume
  • Partition

今回は、ファイルシステム上では変更前の800GBですが、Logical Volumeがいきなり300GBになったのでおかしくなりました。

復旧へ

  • Ubuntuのboot diskをUSBメモリに焼いて起動します。
  • 端末を立ち上げて、コマンドを打ちます。

ということで、Logical Volumeを、空き領域に対して全部使うように変更します。

root@ubuntu:/home/ubuntu# lvscan
  ACTIVE            '/dev/data-vg/data' [<3.64 TiB] inherit
  ACTIVE            '/dev/dell-vg/root' [534.45 GiB] inherit
  ACTIVE            '/dev/dell-vg/swap_1' [976.00 MiB] inherit
root@ubuntu:/home/ubuntu# lvresize -l +100%FREE /dev/mapper/dell--vg-root 
  Size of logical volume dell-vg/root changed from 534.45 GiB (136820 extents) to 834.45 GiB (213620 extents).
  Logical volume dell-vg/root successfully resized.
root@ubuntu:/home/ubuntu# lvs
  LV     VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data   data-vg -wi-a-----  <3.64t                                                    
  root   dell-vg -wi-a----- 834.45g                                                    
  swap_1 dell-vg -wi-a----- 976.00m                                                    

fsckしてrebootします。

root@ubuntu:/home/ubuntu# fsck /dev/mapper/dell--vg-root 
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
Clearing orphaned iノード 46935860 (uid=1000, gid=1000, mode=0100644, size=400721)
Clearing orphaned iノード 46932279 (uid=1000, gid=1000, mode=0100644, size=400542)
Clearing orphaned iノード 51380233 (uid=115, gid=125, mode=0100600, size=0)
Clearing orphaned iノード 51381297 (uid=115, gid=125, mode=0100600, size=0)
Clearing orphaned iノード 51381296 (uid=115, gid=125, mode=0100600, size=0)
Clearing orphaned iノード 51380238 (uid=115, gid=125, mode=0100600, size=4563)
Clearing orphaned iノード 17703601 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17703596 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17703594 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17703593 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17312060 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17312056 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17312055 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 17312054 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 15213286 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 15213285 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 15213284 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 15213283 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12459447 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12459443 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12459439 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12459438 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 18095575 (uid=0, gid=0, mode=0100644, size=776264)
Clearing orphaned iノード 12194905 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12194904 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12194903 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 12194895 (uid=999, gid=999, mode=0100600, size=0)
Clearing orphaned iノード 2883690 (uid=104, gid=4, mode=0100640, size=1642249)
Clearing orphaned iノード 2884265 (uid=0, gid=0, mode=0100644, size=339)
Clearing orphaned iノード 51380226 (uid=0, gid=0, mode=0100666, size=0)
Setting free iノードs count to 52970465 (was 53008249)
Setting free blocks count to 172967006 (was 173674078)
/dev/mapper/dell--vg-root: clean, 1719327/54689792 files, 45776802/218743808 blocks
root@ubuntu:/home/ubuntu# reboot

エラーがたくさんありますが、だいたい良い感じに直ったようです。

まとめ

  • lvresizeでもとに戻して、ちゃんと起動しました。よかった。。。

コメント