レスキューモードからのファイルシステムの復旧

古都の老兵
2025-01-23
2025-01-23

はじめに

 以前レスキューモードの起動方法について紹介いたしましたが、今回はレスキューモードを使ってファイルシステムを復旧する方法について紹介させて頂きます。

 grub メニューが出て、起動が始まっているのに途中で止まるって起動できない、シングルユーザーモードにも出来ないような場合に活用できます。

取り合えずレスキューモードを起動させます

 起動方法は以前紹介していますのでそちらを参照してください。

 通常であれば 1) Continue で問題ありませんが、OSが起動しないような状態ですとエラーになります(エラーが出ても同様の操作はできますが)ので、3) Skip to shell で shell を起動します。

 通常のパーティションであればそのまま復旧に進みますが、LVMを使っている場合にはLVMをアクティブ化する必要があります。

LVMをアクティブ化する

 LVMをアクティブにするにはアクティブにするVGの名前を知る必要があります。

bash-5.1# vgdisplay
  --- Volume group ---
  VG Name               main
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <29.51 GiB
  PE Size               4.00 MiB
  Total PE              7554
  Alloc PE / Size       7554 / <29.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               fn6uCv-mF3n-1fEo-gDnb-eDPI-2iDg-3mRa9f

 VG name が分かればその VG をアクティブにします。

Bash-5.1# vgchange -ay main
 2 logical volume(s) in volume group "main" now active

ファイルシステムの復旧

 復旧したい論理ボリュームを確認するには lvdisplay で確認する事ができます。

Bash-5.1# lvdisplay
  --- Logical volume ---
  LV Path                /dev/main/root
  LV Name                root
  VG Name                main
  LV UUID                QrwaaI-FBBZ-Zbex-mlSH-bD9Q-IyNP-fdlrBI
  LV Write Access        read/write
  LV Creation host, time tmphost, 2022-11-01 15:26:38 +0900
  LV Status              available
  # open                 1
  LV Size                <25.51 GiB
  Current LE             6530
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/main/swap
  LV Name                swap
  VG Name                main
  LV UUID                4kfrRD-PK5w-1NpV-eti5-xSwR-HESS-izTCMZ
  LV Write Access        read/write
  LV Creation host, time tmphost, 2022-11-01 15:26:39 +0900
  LV Status              available
  # open                 2
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

 このLVMには root と swap という2つが存在していることが分かります。
 今回は root ファイルシステムについて復旧してみたいと思いますが、RedHat EL7 からはディフォルトのファイルシステムは xfs になっていますので、xfs_repair を使います。因みに、ext4 のファイルシステムであれば fsck.ext4 です。

Bash-5.1# xfs_repair /dev/main/root
Phase 1 - find and verify superblock...
Phase 2 - using internal log
 :
 :

 問題なければ Phase 7 まで進んで done しますが、途中でエラーが出て止まってしまうような場合は、-L オプションを付けて強制的に実行するしかありません。但し、幾つかのファイルが失われる場合があります。

最後に

 何事もなく復旧が済めば御の字ですが復旧が停止、強制実行した場合は、ファイルやデータが失われる場合があります。が、起動しないよりは良いと諦めるしかありません・・・。データベース等のファイルが失われた場合はバックアップから戻す事になるでしょうから日頃の外部システムへのバックアップも重要になります。