Linuxのパーティションとデータの復旧:TestDiskとPhotoRecによる実戦ガイド

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

クイックスタート:インストールと実行

緊急事態で今すぐツールが必要ですか?ターミナルを開き、使用しているディストリビューションに合わせて以下のコマンドを実行してください。

# Ubuntu, Debian, Kali Linux
sudo apt update && sudo apt install testdisk -y

# CentOS, RHEL, AlmaLinux
sudo dnf install epel-release -y
sudo dnf install testdisk -y

# Arch Linux
sudo pacman -S testdisk

完了すると、2つの主要な「武器」が手に入ります。パーティションを復元するための testdisk と、個別のファイルを掘り起こすための photorec です。開始するには、sudo権限でコマンドを入力するだけです。

sudo testdisk

TestDiskとPhotoRecの違いを正しく理解する

この2つのツールはセットで提供されていますが、解決する問題は全く異なります。初心者が混同しやすいポイントを確認しておきましょう。

  • TestDisk: パーティションテーブルの修復に特化しています。誤ってパーティションを削除したり、ドライブが突然「RAW」と表示されたりした場合、TestDiskはスキャンして元の構造を再構築します。データはコピーすることなく、元の場所でそのまま復元されます。
  • PhotoRec: ファイルシステムを無視して、データブロックを直接スキャンしてファイルを探します。パーティションがフォーマットされていたり、深刻な損傷を受けていても救出可能です。唯一の欠点は、元のファイル名やディレクトリ構造を維持できないことです。

TestDiskによるパーティション復旧

例えば、すべてのソースコードが入っていた /dev/sdb1 を誤って削除してしまったとします。落ち着いて以下の手順に従ってください。

ステップ1:ログの作成
sudo testdisk を開き、[ Create ] を選択してログファイルを作成します。これはスキャン中にエラーが発生した場合に非常に役立ちます。

ステップ2:ディスクの指定
矢印キーを使用して、パーティションが消失したハードドライブを選択し、[ Proceed ] を押します。

ステップ3:パーティションテーブルの認識
通常、TestDiskは正しいタイプを自動的に選択します(MBRの場合は [Intel]、最近のPCの場合は [EFI GPT])。デフォルトのまま Enter を押します。

ステップ4:クイックサーチ (Quick Search)
[ Analyze ] を選択してから [ Quick Search ] を実行します。TestDiskはディスク上の古いパーティションの痕跡を探し出します。

ステップ5:確認と書き込み (Write)
見つかったパーティションの一覧が表示されます。P キーを押して、中のファイルリストを確認してください。必要なデータであれば、Enter を押して [ Write ] を選択し、パーティションテーブルを保存します。

10台以上のLinux VPSを3年間管理してきた経験から得た教訓は、「Enter を押す前に必ずコマンドを再確認すること」です。[ Write ] ステップで一瞬の不注意によりドライブを間違えると、すべての顧客データが瞬時に消え去ることになります。

PhotoRecによるデータ救出

パーティションは復元できたがファイルが消えている場合や、rm -rf を実行してしまった場合は、PhotoRecが最後の希望となります。

sudo photorec /dev/sdb
  1. ターゲット of の選択: ファイルが存在していたパーティションを選択します。
  2. フォーマットのフィルタリング: s キーを押してすべての選択を解除し、必要な拡張子(.jpg, .pdf, .py など)のみをチェックします。これにより、待ち時間を70%短縮できます。
  3. 検索開始: [ Search ] を選択します。
  4. ファイルシステムのタイプ: Linuxの場合は [ ext2/ext3/ext4 ] を選択します。
  5. 保存先:非常に重要な注意点! 救出したファイルは、必ず「別のドライブ」に保存してください。復旧中のドライブに上書き保存すると、元のデータが破壊され、永久に失われます。

困難なケースのための高度なテクニック

Quick Search で結果が出ない場合でも諦めないでください。[ Deeper Search ] を試しましょう。このモードはセクタごとに細かくスキャンします。1TBのドライブで3〜4時間かかることもありますが、数ヶ月前に消失したパーティションを見つけられる可能性があります。

また、突然の停電などでSuperblockが破損し、Linuxがドライブをマウントできない場合があります。その際はバックアップのSuperblockから復旧できます。

# アクセス方法:TestDisk -> Advanced -> パーティションを選択 -> Superblock

ツールがバックアップ場所をリストアップします。それらのアドレスと fsck コマンドを組み合わせて、ファイルシステムのエラーを修正します。

レスキュー作業における実戦経験

データを失うと誰でもパニックになります。しかし技術者として冷静さを保ち、以下のルールを守ってください。

  • リードオンリー(読み取り専用)を優先: すぐにそのパーティションumount してください。時間が経つほどシステムプロセスが空きブロックに新しいデータを書き込み、復旧の可能性が低くなります。
  • ディスクイメージの作成 (Disk Image): 非常に重要なデータの場合、直接操作は避けましょう。dd コマンドでイメージファイルを作成し、そのコピーに対して復旧作業を行うのが安全です。
  • sudo dd if=/dev/sdb of=/home/user/disk_image.img conv=noerror,sync
  • ライブUSBを常備: 常にブート用USB(SystemRescueやUbuntu Live)を手元に置いておきましょう。実行中のOS自体のブートパーティションを救出することはできません。
  • ハードウェアの健康状態チェック: パーティションの消失は、不良セクタ(Bad Sector)の前兆かもしれません。復旧作業の前に smartctl でチェックすることをお勧めします。

実際、100%の成功を保証するツールはありません。特にTRIM機能を持つSSDでは復旧が困難な場合が多いです。そのため、TestDiskに頼る状況になる前に、重要なデータは定期的にバックアップする習慣をつけましょう。

Share: