サポートが切れていた、CentOS Stream 8 から最新の AlmaLinux 10.0 へアップグレードした際にめんどくさいことになりました。
初めは CentOS Stream 8 から AlmaLinux 10.0 へ OS 領域がインストールされていた SSD を新規 SSD に交換と OS 入れ替えで、RAID1 で組んでいた XFS 領域は触らず新 OS に繋ぎ直して作業完了予定でしたが、最新の XFS だと古い OS で作られた XFS 領域は認識しないようでした。
普通に RAID の XFS 領域がマウントできるもんだと簡単に考えて作業を始めました…。
マウント不能エラーの発生
新 OS を入れた SSD に交換して、boot 後の確認で (/dev/md127) は、mdstat で [UU](健全)と確認できて「あーよかったよかった」と思ったていざマウントしようとした所…
長年使ってきた RAID1 アレイ (/dev/md127) は、mdstat で [UU](健全)と確認できるにも関わらず、マウントしようとすると必ず以下のエラーが出ました。
# mount -t xfs /dev/md127 /data
mount: /data: wrong fs type, bad option, bad superblock on /dev/md127, missing codepage or helper program, or other error.
🛠️ 色々ためしてみました
RAID アレイが健全であるにも関わらずマウントできないという状況に直面し、以下の多岐にわたるトラブルシューティングと回避策を試みました。
試したこと 1: ジャーナルリカバリと強制読み取り試行
XFS では不正なシャットダウンなどでログが汚れるとマウントできないため、まずはジャーナルログの強制クリアと、読み取り専用でのマウントを試みました。
ジャーナルログの強制クリア:
# xfs_repair -L /dev/md127
読み取り専用マウント:
# mount -t xfs -o ro /dev/md127 /data
試したこと 2: カーネルパラメータの強制適用
最も重要な回避策として、V4非互換性を解除するため、grubby コマンドを使ってカーネルに xfs_allow_v4 パラメータを強制適用しました。これでカーネルのポリシーを変えようと試みました。
# grubby --update-kernel=ALL --args="xfs_allow_v4"
試したこと 3: UUID無視とリカバリオプションの組み合わせ
パラメータ適用後もエラーが続いたため、さらに以下のオプションを組み合わせて、システムエラーを回避ができないかと試みました。
- UUID無視 (
nouuid): ディスク UUID の重複が原因となる可能性を排除。 - リカバリ無効化 (
norecovery): ジャーナルリカバリを試みずにマウントを試行。
しかし、いずれを試しても新しいカーネルでは、古い XFS V4 をマウントすることはできず、結局 RAID 再構築をしてバックアップからデータをコピーしました。
結論・・。下手にごにょるよりやり直した方が早い・・。😅
原因:古いXFS V4のセキュリティ拒否
このトラブルの核心は、ファイルシステムのバージョン非互換性です。
- 移行元のバージョン: CentOS Stream 8 時代にフォーマットされた XFS は、非推奨とされる古い XFS V4 フォーマットでした。
- 新しいOSのポリシー: AlmaLinux 10.0 のカーネルは、データの整合性のため、デフォルトで古い XFS V4 の読み込みを厳格に拒否するようにポリシーが変更されていたのです。