Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LinuxでNASのdiskのデータを復旧

 LinuxでNASのdiskのデータを復旧

E567a535ddc7964130dd086f147a7682?s=128

Kenichiro MATOHARA

October 31, 2020
Tweet

Transcript

  1. / LinuxでNASの LinuxでNASの diskのデータを復 diskのデータを復 旧 旧 Kenichiro Matohara 1

    / 46
  2. / 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org

    https://matoken.org 2 / 46
  3. / 最近の発表 最近の発表 2020-09-20(Sun) 2020-10-03(sat) 2020-10-10(sat) Rakutem miniを非常用Linux端末に出来ないか試す 鹿児島Linux勉強会 2020.09(オンライン開催)

    F2FSの透過圧縮機能を使いたい 東海道らぐ!ておくれライブフェスティバル NetworkManagerのWi-Fi接続のQR code共有 小江戸らぐ 10月のオフな集まり(第219回) 3 / 46
  4. / LinuxでNASのdiskのデータを復 LinuxでNASのdiskのデータを復 旧した話 旧した話 4 / 46

  5. / NASが認識しなくなったので中 NASが認識しなくなったので中 のデータを復旧してほしいと言 のデータを復旧してほしいと言 われる われる NAS本体をPCから認識しなくなった (NAS故障でdiskは生きてる?) しかし分解してPCに繋いで復旧ソフトを2種類試したがうまく行か

    なかったとのこと (手順の問題?壊れている?) 5 / 46
  6. / 専門業者を薦める 専門業者を薦める 仕事で使っているもの&バックアップが存在しないとのことだった ので専門業者をおすすめする 業者はピンきりなのでこの辺だとどうだろう? 高くて無理,だめもとでいいからお願い 注意して作業するけど悪化することもあるしトライアンドエラー を繰り返すし機材も揃って無くて復元できたとしても時間が掛か ると文章にして確認してもらう

    わたしたちはデータ復旧業界の健全化を目指します。 | 日本データ 復旧協会-DRAJ 6 / 46
  7. / 受け取る 受け取る NASと取り出されたDisk Buffalo LinkStation LS210SC Series 1TB版(TOSHIBA DT01ACA100)

    disk 1本のモデル 中身はLinuxでファイルシステムも一般的なものらしい(認識した らmountしてcpするだけ?) 7 / 46
  8. / おおまかな手順 おおまかな手順 ディスクをPCに接続 オリジナルディスクの中身をイメージとして取り出し イメージをコピーしてマウントを試みる マウントできない場合は復元を試みる バッドセクターがあった場合対象ファイルを調べる 8 /

    46
  9. / ハードディスク接続場所 ハードディスク接続場所 SATAの直付がいいけど今回はUSB経由 USB portの場所に注意 lsusbなどで速度が速くて混んでないポートを探して使う 今回は2ポート必要 $ lsusb

    -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=ums-realtek, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M |__ Port 2: Dev 6, If 0, Class=Mass Storage, Driver=uas, 480M |__ Port 4: Dev 3, If 2, Class=Vendor Specific Class, Driver=, 12M |__ Port 4: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M |__ Port 4: Dev 3, If 3, Class=Application Specific Interface, Driver=, 12M |__ Port 4: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M |__ Port 5: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M 9 / 46
  10. / USB-SATAの注意点 USB-SATAの注意点 ブロックデバイスとして使えてもS.M.A.R.T.等の詳細情報が見えな いものがある この辺の物なら大丈夫かも? 今回は を利用(S.M.A.R.T.見えた) $ sudo

    smartctl --info /dev/sdc smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.8.0-26-generic] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org /dev/sdc: Unknown USB bridge [0x0bda:0x0159 (0x5888)] Please specify device type with the -d option. Use smartctl -h to get a usage summary 対応外付けドライブ – Crystal Dew World Logite LHR-2BDPU3ES 10 / 46
  11. / USB-SATA経由で繋いでみる USB-SATA経由で繋いでみる [686723.179448] usb 1-1.5.2: new high-speed USB device

    number 13 using ehci-pci [686723.334895] usb 1-1.5.2: New USB device found, idVendor=0789, idProduct=0262, bcdDevice= 1 [686723.334902] usb 1-1.5.2: New USB device strings: Mfr=2, Product=3, SerialNumber=1 [686723.334906] usb 1-1.5.2: Product: LHR USB Device [686723.334909] usb 1-1.5.2: Manufacturer: Logitec [686723.334913] usb 1-1.5.2: SerialNumber: 20200417xxxxxxxx [686723.337578] scsi host8: uas [686723.342324] scsi 8:0:0:0: Direct-Access TOSHIBA DT01ACA100 0 PQ: 0 ANSI: 6 [686723.347301] sd 8:0:0:0: Attached scsi generic sg4 type 0 [686723.353640] sd 8:0:0:0: [sde] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB) [686723.353645] sd 8:0:0:0: [sde] 4096-byte physical blocks [686723.354258] sd 8:0:0:0: [sde] Write Protect is off [686723.354261] sd 8:0:0:0: [sde] Mode Sense: 43 00 00 00 [686723.355097] sd 8:0:0:0: [sde] Write cache: enabled, read cache: enabled, doesn't support D [686723.356731] sd 8:0:0:0: [sde] Optimal transfer size 33553920 bytes not a multiple of physi 11 / 46
  12. / [686731.587461] sd 8:0:0:0: [sde] tag#3 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

    [686731.587471] sd 8:0:0:0: [sde] tag#3 Sense Key : Hardware Error [current] [686731.587480] sd 8:0:0:0: [sde] tag#3 Add. Sense: Internal target failure [686731.587488] sd 8:0:0:0: [sde] tag#3 CDB: Read(10) 28 00 00 00 00 00 00 00 08 00 [686731.587493] blk_update_request: critical target error, dev sde, sector 0 op 0x0:(READ) flag [686731.587506] Buffer I/O error on dev sde, logical block 0, async page read [686731.587996] sd 8:0:0:0: [sde] tag#8 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [686731.588000] sd 8:0:0:0: [sde] tag#8 Sense Key : Not Ready [current] [686731.588003] sd 8:0:0:0: [sde] tag#8 Add. Sense: Medium not present [686731.588006] sd 8:0:0:0: [sde] tag#8 CDB: Read(10) 28 00 00 00 00 00 00 00 08 00 [686731.588008] blk_update_request: I/O error, dev sde, sector 0 op 0x0:(READ) flags 0x0 phys_ 12 / 46
  13. / [686731.591023] Buffer I/O error on dev sde, logical block

    3, async page read [686731.591865] sde: unable to read partition table [686731.600016] sd 8:0:0:0: [sde] Attached SCSI disk [686731.621305] sd 8:0:0:0: [sde] tag#2 device offline or changed [686731.621387] sd 8:0:0:0: [sde] tag#3 device offline or changed [686785.366677] sd 8:0:0:0: [sde] tag#10 device offline or changed [686785.366684] print_req_error: 4 callbacks suppressed [686785.366687] blk_update_request: I/O error, dev sde, sector 0 op 0x0:(READ) flags 0x0 phys_ [686785.366689] buffer_io_error: 3 callbacks suppressed [686785.366690] Buffer I/O error on dev sde, logical block 0, async page read [686785.366778] sd 8:0:0:0: [sde] tag#11 device offline or changed [686785.366789] blk_update_request: I/O error, dev sde, sector 0 op 0x0:(READ) flags 0x0 phys_ 13 / 46
  14. / 駄目な感じ(◞‸◟) 14 / 46

  15. / 状態 状態 特に異音はしない スピンアップして回転している音はするがアームの音はしない 基板は見えているけどDiskの中にアクセスできない感じ? 基板か基板とプラッタの間がおかしい? 15 / 46

  16. / 吸出し…… 吸出し…… ダメ元でGNU ddrescueで吸い出そうとしてみると全てがerrorに $ time sudo ddrescue -n

    -v /dev/sde /mnt/disk.img /mnt/log/ddrescue_-n_-v.001.log GNU ddrescue 1.23 About to copy 1000 GBytes from '/dev/sde' to '/mnt/resque/disk.img' Starting positions: infile = 0 B, outfile = 0 B Copy block size: 128 sectors Initial skip size: 19584 sectors Sector size: 512 Bytes Press Ctrl-C to interrupt ipos: 12872 MB, non-trimmed: 12879 MB, current rate: 0 B/s opos: 12872 MB, non-scraped: 0 B, average rate: 0 B/s non-tried: 987325 MB, bad-sector: 0 B, error rate: 1636 MB/s rescued: 0 B, bad areas: 0, run time: 8s pct rescued: 0.00%, read errors: 196621, remaining time: n/a time since last successful read: n/a Copying non-tried blocks... Pass 5 (forwards) 16 / 46
  17. / 専門業者をおすすめする 専門業者をおすすめする ハード的な不良の可能性が高いので再度専門業者をおすすめする ムリ,なんとかして 17 / 46

  18. / 基板の軽い障害ならどうにかなる? 18 / 46

  19. / 基板故障の可能性 基板故障の可能性 (かなり)昔だと同一型番のHDDの基板と交換で直った 今は個別の情報を持っているのでそのままでは無理 EEPROMを移植して修理出来る可能性 基板売っているとこもあるよう(該当基板載ってない?) ハンダクラックの可能性? ハンダクラックとかならオーブンに入れたりして復活する可能 性が?

    TOSHIBA(東芝)HDDのPCB、HDD基盤(制御回路基板)交換 19 / 46
  20. / ハンダクラック解消 ハンダクラック解消 オーブン,ヒートガン, などでハンダを溶かす 家にオーブンはあるけど食品用しか無いのでハンダゴテで試みる (BGAとかはムリ) 悪化するかも なので作業前に再度確認 ホットプレート

    20 / 46
  21. / 基板 基板 ネジ数本で簡単に取り外せた 見た目は焦げたようなところもなく綺麗 プラッタとの接続部分などを重点的にハンダを溶かしてみる→組み 立てて認識するか確認 何度か繰り返し…… 見えた! 21

    / 46
  22. / 見えているうちに吸出し 見えているうちに吸出し 今回はGNU ddrescue利用(ddrescurは幾つか派生が存在する) 今回読み取りエラーは記録してスキップ -n (後でログを指定して その部分だけ再試行出来る) 猫の立ち入りを禁止して待つ

    $ time sudo ddrescue -n -v /dev/sde /mnt/disk.img /mnt/log/ddrescue_-n_-v.log 22 / 46
  23. / エラー出ずに完走! エラー出ずに完走! 23 / 46

  24. / イメージが入手できた :) イメージが入手できた :) オリジナルディスクを取り外して梱包保存 イメージをコピーして失敗に備える 24 / 46

  25. / ハードディスクイメージのバッ ハードディスクイメージのバッ クアップ兼圧縮 クアップ兼圧縮 $ time xz -v --keep

    --fast -T 4 ./disk.img 25 / 46
  26. / ディスクイメージの中を見る ディスクイメージの中を見る パーティション情報が無いように見える $ sudo fdisk -l ./disk.img Disk

    ./disk22.img: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes 26 / 46
  27. / Superblockが見つからない Superblockが見つからない $ sudo fsck.ext4 -v ./disk.img e2fsck 1.45.5

    (07-Jan-2020) ext2fs_open2: Bad magic number in super-block fsck.ext4: Superblock invalid, trying backup blocks... fsck.ext4: Bad magic number in super-block while trying to open ./disk22.img The superblock could not be read or does not describe a valid ext2/ext3/ext4 filesystem. If the device is valid and it really contains an ext2/ext3/ext4 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device> or e2fsck -b 32768 <device> 27 / 46
  28. / Superblockのbackupsから復元を Superblockのbackupsから復元を 試みる 試みる 28 / 46

  29. / backup確認 backup確認 $ mke2fs -n ./disk22.img mke2fs 1.45.5 (07-Jan-2020)

    Creating filesystem with 244190646 4k blocks and 61054976 inodes Filesystem UUID: c41b57a4-5563-4f82-8447-33ecc5cfbe8d Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 29 / 46
  30. / Superblock backupからの復元を Superblock backupからの復元を 試みる 試みる 全て確認 → NG

    $ sudo e2fsck -b 32768 ./disk.img e2fsck 1.45.5 (07-Jan-2020) e2fsck: Bad magic number in super-block while trying to open ./disk22.img The superblock could not be read or does not describe a valid ext2/ext3/ext4 filesystem. If the device is valid and it really contains an ext2/ext3/ext4 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device> or e2fsck -b 32768 <device> 30 / 46
  31. / Superblockの復元を試みたけど Superblockの復元を試みたけど ディスクイメージに対して試みていた 後で考えるとパーティションに対して試みるべき作業なのでこの 時点で試すものではなかったorz 31 / 46

  32. / とりあえずパーティションの復 とりあえずパーティションの復 元は後回しにしてイメージから 元は後回しにしてイメージから ファイル復元 ファイル復元 ディスクを頭からなめていってファイルの痕跡から復元していく 削除したファイルも引っかかる 32

    / 46
  33. / 拡張子毎にディレクトリを作って復元してくれる ファイル名,タイムスタンプは失われている ファイルの破片がたくさん出てくるけどそのまま開けるものは殆 ど無いので途中で中断した foremost foremost $ file foremost_Tue_Sep_29_08_59_29_2020/jpg/03155321.jpg

    foremost_Tue_Sep_29_08_59_29_2020/jpg/03155321.jpg: JPEG image data $ display foremost_Tue_Sep_29_08_59_29_2020/jpg/03155321.jpg display-im6.q16: Invalid JPEG file structure: two SOI markers `foremost_Tue_Sep_29_08_59_29_20 33 / 46
  34. / PhotoRec(TestDisk内) PhotoRec(TestDisk内) パーティション情報が見える 該当パーティーションをext?として復元を試みる そのまま開けるファイル群が復元できた! ファイル名は失われている,タイムスタンプは生きている とりあえずこのデータを渡す 34 /

    46
  35. / パーティション情報の復元を試 パーティション情報の復元を試 みる みる 35 / 46

  36. / gpartedのメニューにそれっぽい gpartedのメニューにそれっぽい ものが ものが 「Device」→「Attempt Data Rescue… 」 しかし駄目だった

    36 / 46
  37. / PhotoRecではパーティションの PhotoRecではパーティションの 区切りは見えているようだった 区切りは見えているようだった 復元できそう? ※この情報で mount -o loop,offset=〜

    でも行けたかも? PhotoRec 7.1, Data Recovery Utility, July 2019 Christophe GRENIER <grenier@cgsecurity.org> https://www.cgsecurity.org Disk /mnt/resque/disk22.img - 1000 GB / 931 GiB (RO) Partition Start End Size in sectors Unknown 0 0 1 121601 80 63 1953525168 [Whole disk] > 1 P MS Data 0 0 35 124 126 3 1999967 [primary] 2 P MS Data 124 140 17 746 233 63 9998336 [primary] 3 P Unknown 746 234 1 746 246 13 769 [primary] 5 P MS Data 746 246 15 871 117 15 1999999 [primary] 6 P MS Data 871 119 17 120603 205 50 1923500032 [primary] 37 / 46
  38. / Linux以外でもDos/Windows/MacOS X/*BSD/SunOSでも動くらしい PhotoRecを含む壊れたパーティションの修復やファイルの復元など が行えるTUIのソフトウェア 実行はイメージファイルへの権限があれば一般ユーザでOK 一般ユーザなら操作ミスでシステムディスク等をいじって壊して しまうことはないはず? TestDisk TestDisk

    $ testdisk /log /mnt/disk.img 38 / 46
  39. / TestDisk起動 TestDisk起動 該当ディスクイメージなのを確認して Proceed TestDisk 7.1, Data Recovery Utility,

    July 2019 Christophe GRENIER <grenier@cgsecurity.org> https://www.cgsecurity.org TestDisk is free software, and comes with ABSOLUTELY NO WARRANTY. Select a media (use Arrow keys, then press Enter): >Disk /mnt/resque/disk-partition_repair.img - 1000 GB / 931 GiB >[Proceed ] [ Sudo ] [ Quit ] Note: Some disks won't appear unless you are root user. Disk capacity must be correctly detected for a successful recovery. If a disk listed above has an incorrect size, check HD jumper settings and BIOS detection, and install the latest OS patches and disk drivers. 39 / 46
  40. / パーティションテーブルタイプ パーティションテーブルタイプ を選択 を選択 今回は Intel を選択 lease select

    the partition table type, press Enter when done. >[Intel ] Intel/PC partition [EFI GPT] EFI GPT partition map (Mac i386, some x86_64...) [Humax ] Humax partition table [Mac ] Apple partition map (legacy) [None ] Non partitioned media [Sun ] Sun Solaris partition [XBox ] XBox partition [Return ] Return to disk selection 40 / 46
  41. / パーティション構造を解析 パーティション構造を解析 Analyse を選択してパーティション情報解析画面へ Backup で作業前の情報をログファイルに書き出し(option) Quick Search で解析

    結果が表示されたら内容を確認してOKなら Write で反映 NGなら Deeper Search → 確認 → Write で反映 Write するまでディスクイメージは書き換わらない もし失敗したらオリジナルイメージからコピーしなおしてやり直 す 41 / 46
  42. / パーティション情報が復元でき パーティション情報が復元でき た! た! fdisk -l /mnt/resque/disk.img でも見える Device

    Boot Start End Sectors Size Id Type ./diskimage/disk-partition_repair.img1 * 34 1999993 1999960 976.5M 83 Linux ./diskimage/disk-partition_repair.img2 2000896 11999231 9998336 4.8G 83 Linux ./diskimage/disk-partition_repair.img3 14000128 1937500159 1923500032 917.2G 83 Linux 42 / 46
  43. / マウントしてデータコピー マウントしてデータコピー 後はkpartx, mount(-o ro), rsyncで終了 :) 恐らく1パーティション目はuboot,2パーティション目はNASの root,3パーティション目がNASのデータ

    $ sudo kpartx -av ./diskimage/disk-partition_repair.img Warning: Disk has a valid GPT signature but invalid PMBR. Assuming this disk is *not* a GPT disk anymore. Use gpt kernel option to override. Use GNU Parted to correct disk. add map loop32p1 (253:3): 0 1999960 linear 7:32 34 add map loop32p2 (253:4): 0 9998336 linear 7:32 2000896 add map loop32p3 (253:5): 0 1923500032 linear 7:32 14000128 $ sudo mount -o ro /dev/mapper/loop32p3 /mnt $ ls /mnt/ mt-daapd share spool 43 / 46
  44. / 余録)沢山のツール 余録)沢山のツール 今回は主にTestDiskを利用したが他にも使えそうなツールがある Debian/Ubuntuだとメタパッケージ forensic* に沢山ツールが (TestDiskは forensics-extra に含まれる)

    デジタルフォレンジック特化ディストリビューションとかも もっと調べたい diskに余裕があると複数のツールが並列実行できて効率良さそう forensic-artifacts - knowledge base of forensic artifacts (data files) forensics-all - Debian Forensics Environment - essential components (metapackage) forensics-all-gui - Debian Forensics Environment - GUI components (metapackage) forensics-colorize - show differences between files using color graphics forensics-extra - Forensics Environment - extra console components (metapackage) forensics-extra-gui - Forensics Environment - extra GUI components (metapackage) forensics-full - Full forensics station (metapackage) forensics-samples-all - Set of files to help learn/test forensics tools and techniques (metapa 44 / 46
  45. / まとめ まとめ 運良くハンダゴテとTestDiskのおかげでパーティション情報の復元 が出来た 大事なデータをバックアップなし通常のハードディスクのみに格 納するのはかなり怖い RAID1/5/6/10とかなら耐障害性upするので少し安心だけどバック アップ重要 災害を考えると遠隔バックアップも欲しい

    ランサムウェア対策にはオフラインバックアップ クラウドバックアップ……財布や回線と相談(G Suite容量無制限死 んだ.画像は未だAmazon PhotosがRAWも含め無制限) バックアップ重要(たまには復元も試そう) 45 / 46
  46. / 奥付 奥付 発表 2020-10-31(土) 発表者 ライセンス CC BY-NC-SA 4.0

    鹿児島Linux勉強会 2020.10(オンライン開催) Kenichiro Matohara(matoken) 46 / 46