😭

【Mac】読み取りエラーになった外部ディスク(APFSコンテナ)のデータを救出した話

2022/02/14に公開

ある日、とある外部ディスクが読み込めなくなった

ディスクユーティリティを確認してみたところ、

読み込めなくなったディスク(APFS物理ストアdisk5s2)がグレーアウトになっている。。

めっちゃ大事なデータがあったのに・・・!!!

ターミナルを開いてコマンドを叩いてディスクの状態を確認してみる

$ diskutil apfs list
APFS Containers (4 found)

〜省略〜

|       Capacity Consumed:         20480 B (20.5 KB)
|       Sealed:                    No
|       FileVault:                 No
|
+-- Container ERROR -69808
    ======================
    APFS Container Reference:     disk7
    Size (Capacity Ceiling):      ERROR -69620
    Capacity In Use By Volumes:   ERROR -69620
    Capacity Not Allocated:       ERROR -69620
    |
    +-< Physical Store disk5s2 YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY
    |   -----------------------------------------------------------
    |   APFS Physical Store Disk:   disk5s2
    |   Size:                       4000577273856 B (4.0 TB)
    |
    +-> No Volumes

Container ERROR -69808 とエラーが。

環境

  • M1 mac mini
  • 読み込めなくなったUSB外付けハードディスク(4TB)

❌ 試したけど効果がなかったもの

  • ディスクユーティリティ
    • マウント

      • 「“disk5s2”をマウントできませんでした。(com.apple.DiskManagement.disenterエラー-119930868。)」と表示される
    • FirstAid

    • シングルユーザーモード(M1以前は起動時にCmd+r、M1以降は電源ボタン長押しでOK)

      • ディスクユーティリティ
        • FirstAid
        • マウント
  • ターミナル
    • diskutil repairDisk
    • diskutil repairVolume

APFS以前は上記方法で直ることがほとんどだった。

  • データ復旧ソフト
    • 【PROSOFT】Data Rescue 6
      • 無料体験版を試したところファイルの存在は確認できた
      • 復旧には有償版が必要
      • 9900円は高い、、、
      • 最終手段
    • その他のリカバリーソフトも似たような料金体系

⭕ 試したら効果があったもの

https://matt.sh/apfs-object-map-free-recovery

https://github.com/libyal/libfsapfs

wikiが親切なのでちゃんと読む。

fsapfstoolsのインストール

$ CPPFLAGS=-DFUSE_USE_VERSION=26 ./configure --enable-static-executables=yes --enable-verbose-output --enable-debug-output

$ make

マウント時にFUSEエラー、make時にopen_sslのエラーが出たためオプションを指定した。
※詳細オプションはデバッグ用なので無くてもOK

データの生存確認

$ sudo ./fsapfstools/fsapfsinfo -H -f 2 /dev/disk5s2

自分の場合はフラグ -f file_system_index2 にすることでファイルの確認ができました!

マウント

$ sudo ./fsapfstools/fsapfsmount -X volicon=/Library/Filesystems/osxfuse.fs/Contents/Resources/Volume.icns -f 2 /dev/disk5 got

マウント時にvoliconを指定しないとエラーになったのでOSデフォルトのものを指定。

$ sudo ls got

無事マウントができ、gotディレクトリ配下にファイルが確認できたので別のディスクへコピーするなりしてデータの救出をしましょう。

Discussion