Ubuntu で xfs ファイルシステム間でのドライブコピー
Ubuntu で、xfsdump/xfsrestoreを用いてXFSファイルシステムの内容を別ドライブへ論理的にコピーする。実行にはコピー元のアンマウント、コピー先XFSフォーマット、コピー先マウントが必須である。必要に応じてxfs_adminでコピー先UUIDを変更する。xfsprogsパッケージを使用する。
xfs ファイルシステムのドライブ/パーティション間での内容のコピーは物理的なブロック単位のコピー(例: dd)と異なり、ファイルシステム内のファイル/ディレクトリ構造を論理的にコピーし、その構造(ファイル、属性など)を維持して別XFSファイルシステムへ移行する方法である。
Ubuntu環境での手順例
以下の手順は、Ubuntu 24.04 LTS 環境での実行を想定している。
前提条件と準備
安全かつ正確にファイルシステムの内容をコピーするためには、以下の準備が必要である。
- コピー元およびコピー先のデバイス(パーティション)を正確に特定する必要がある(例: lsblkやblkidコマンドを利用する)。
- コピー先のデバイスには、あらかじめXFSファイルシステムを作成する必要がある。この操作により、既存データは全て失われるため注意が必要である(例: sudo mkfs.xfs /dev/sdXnのように使用する)。
- xfsdump実行時には、コピー元のファイルシステムはアンマウントされている必要がある。これにより、整合性の取れたスナップショットを取得できる(例:- sudo umount /path/to/source_mountpointのように使用する)。
- xfsrestore実行時には、コピー先のファイルシステムがマウントされている必要がある(例:- sudo mount /dev/sdXn /path/to/destination_mountpointのように使用する)。
必要なパッケージのインストール
xfsdump、xfsrestore、xfs_adminなどのXFSツールを利用するために、以下のxfsprogsパッケージをインストールする。
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install xfsprogs
コピーの実行
準備が完了し、コピー元がアンマウントされ、コピー先がマウントされた状態で、以下のコマンドを実行してコピーを開始する。
xfsdump -J - /path/to/source | xfsrestore -J -p 60 /path/to/destination
上記のコマンドは、xfsdumpでコピー元ファイルシステムの内容を標準出力にダンプし、パイプ(|)経由でxfsrestoreへ渡しコピー先のファイルシステムにリストアする。各要素の説明は以下の通りである。
- xfsdump -J - /path/to/source: コピー元ファイルシステムの内容をダンプする。- -Jオプションはファイルシステムのジャーナル(変更履歴)を無視することを意味する。活動中のファイルシステムでの実行は不整合リスクがあるため、アンマウント必須である。- -はダンプデータを標準出力へ送ることを示し、- /path/to/sourceはダンプ対象のファイルシステムがマウントされていたパス(アンマウント後に指定)またはデバイス名を指定する。
- xfsrestore -J -p 60 /path/to/destination: ダンプデータを受け取り、コピー先のファイルシステムにリストアする。- -Jオプションはこちら側でも指定する必要がある。- -p 60はリストアの進捗状況を60秒間隔で表示するオプションであり、大規模ファイルシステムのコピー時に便利である。- /path/to/destinationはリストア先のファイルシステムがマウントされているパスを指定する。
オプション: コピー先ファイルシステムのUUIDを変更する
/etc/fstab等でファイルシステムがUUID参照されている場合、コピー元UUIDに合わせる必要がある場合がある。OSドライブ交換時等に有用な手順である。
重要な注意: UUID一致させた元と先を同時接続すると、重複によりシステム問題を起こす可能性があるため、通常は元ドライブ取り外し後に使用するべきである。
手順は以下の通りである。
- コピー元のUUIDを確認する: blkidコマンドでコピー元のデバイス(例:/dev/sda1)のUUIDを確認する。確認されたUUID(例:blkid /dev/sda1 abcdefab-1234-5678-abcd-abcdefabcdefのような形式)を控えておく。
- コピー先のUUIDを変更する: xfs_adminコマンドを使用する。UUIDを変更したいコピー先のデバイス(例:/dev/sdb1)はアンマウントされている必要がある。
 また、Ubuntu 24.04環境では、UUID変更前にxfs_repair -Lコマンドを実行してファイルシステムのログをクリアする必要がある場合がある。上記のsudo umount /path/to/destination_mountpoint # もしマウントされている場合 sudo xfs_repair -L /dev/sdb1 # ログをクリアする sudo xfs_admin -U abcdefab-1234-5678-abcd-abcdefabcdef /dev/sdb1 # UUIDを変更 abcdefab-1234-5678-abcd-abcdefabcdefの部分は、コピー元で確認した実際のUUIDに置き換える。
- 変更後のUUIDを確認する(任意): 再度blkidコマンドでコピー先のデバイスのUUIDが変更されたことを確認できる。blkid /dev/sdb1 
- UUIDを変更した場合、システムの起動時に参照される/etc/fstabファイルで、該当するマウントポイントが古いUUIDを参照していないか確認し、新しいUUIDに更新する必要がある。
注意点
- ファイルシステムの内容コピーであり、物理構造(パーティションテーブル、ブートローダー等)は対象外である。
- 大容量の場合、実行に時間がかかる場合がある。
- エラー時はmanページ(man xfsdump等)を参照することが推奨される。
![[kaneko lab.]](https://www.kkaneko.jp/info/logo_png.png)