web-dev-qa-db-ja.com

外付けハードディスクにアクセスできません。 「ディスク構造が破損していて読み取り不可能です」

1 TB AgentGoFlex Seagate外付けHDDを持っています。

最近、データのあるいくつかのフォルダにファイルが表示されないなどの問題が発生していました。いくつかのフォルダーが開かなかったなど。

Windows 8でchkdskを実行してみましたが、正常に完了しませんでした。それで、HDDを外しました。 HDDをシステムに接続すると、認識されません。 Linuxではまったく認識されていません。

Win8でコマンドプロンプトからディスクにアクセスしようとすると、「ディスク構造が破損していて読み取り不可能」と表示されます。

chkdskでもエラーで失敗しました:「ファイルシステムはNTFSです。ボリュームのバージョンと状態を判別できません。chkdskが中止されました。」

F:→右クリック→プロパティ→ツール→チェックから「チェックユーティリティ」を実行しようとすると、以下のエラーが発生します。

Error screenshot: The disk check could not be performed because Windows can't access the disk

私は非常に重要なデータを持っているので、ディスクをフォーマットすることはオプションではありません。

ハードディスクへのアクセスを可能にするために何ができるかを提案してください。

11
Anurag Rana

まず、ディスク上でこれ以上何もしない(少なくとも決してwriteしないでください)。ディスク認識されていない(「認識されて空であるか、データを読み取れない」とは対照的に)は、chkdskが実行しない完全にブラストされたディスク、または何か問題があることを示しているようですディスクのパーティションテーブルまたはジオメトリ、またはUSBエンクロージャがディスクを処理する方法。ハードウェア障害も考えられます。

これは発生する可能性があり、発生しますUSBエンクロージャーがディスクとそれらが接続されているコンピューターとの間でネゴシエートしようとするとき。したがって、最初に行うことは、Linuxでddを使用して、可能な限り物理レベルに近い(明らかに大きい)ディスクでディスクのイメージを取得することです。その後、実際のディスクをさらに損傷するリスクなしに、心ゆくまでイメージコピーをいじることができます。

更新:Linuxでのデバイス認識

「外部ディスク」には以上のエンティティがあります。 USBエンクロージャーハードウェア。ブロックデバイスとして公開されます。エンクロージャー内の物理ディスク。物理デバイス、つまり最初から最後までのLBAセクターのシーケンス。そして最後に、ファイルシステムをホストする0個以上のデータパーティション。 「認識」されてデスクトップに表示されるには、チェーンのすべてのリンクが機能している必要があります。ただし、物理デバイスのイメージを取得するには、最初の2つだけが必要です。デバイスを接続し、コマンドラインdmesgを(rootとして)実行すると、次のようになります。

[4984939.028491] usb 8-6: new high speed USB device using ehci_hcd and address 3
[4984939.166658] usb 8-6: configuration #1 chosen from 1 choice
[4984939.170660] scsi7 : SCSI emulation for USB Mass Storage devices
[4984939.172003] usb-storage: device found at 3
[4984939.172005] usb-storage: waiting for device to settle before scanning

...これは、エンクロージャーが認識され、それ自体とその内容を識別します。

[4984939.170660] usb 8-6: New USB device found, idVendor=1058, idProduct=1021
[4984939.170660] usb 8-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[4984939.170660] usb 8-6: Product: Ext HDD 1021
[4984939.170660] usb 8-6: Manufacturer: Western Digital
[4984939.170660] usb 8-6: SerialNumber: 574D43305431303831303734
[4984944.400970] usb-storage: device scan complete

次に、ドライバーがそのジオメトリ、性質、および暗黙的にそのデバイスノードを通知していることがわかります。ここではsdd(SCSI Disk Fourの場合、sdasdb、およびsdcが既に使用されているため):

[4984944.404739] scsi 7:0:0:0: Direct-Access     WD      Ext HDD 1021    2021 PQ: 0 ANSI: 4
[4984944.404739] sd 7:0:0:0: [sdd] 1953519616 512-byte hardware sectors (1000202 MB)
[4984944.407367] sd 7:0:0:0: [sdd] Write Protect is off
[4984944.407369] sd 7:0:0:0: [sdd] Mode Sense: 17 00 10 08
[4984944.407371] sd 7:0:0:0: [sdd] Assuming drive cache: write through
[4984944.408741] sd 7:0:0:0: [sdd] 1953519616 512-byte hardware sectors (1000202 MB)

次に、カーネルはパーティションが存在することを認識します(これが表示されない場合、パーティションは存在しないか無効です)。

[4984944.411497]  sdd: sdd1

これでLinuxには必要なものがすべて揃い、アタッチが成功したことが報告されます。

[4984944.416739] sd 7:0:0:0: [sdd] Attached SCSI disk
[4984944.416739] sd 7:0:0:0: Attached scsi generic sg4 type 0

そして、データパーティションの検索が開始されます。つまり、sdd1がありますが、-そこには何がありますか?であり、答えは次のとおりです。

[4984997.498613] NTFS driver 2.1.29 [Flags: R/W MODULE].
[4984997.554613] NTFS volume version 3.1.
[4984997.568859] NTFS-fs error (device sdd1): load_system_files(): $LogFile is not clean.  Mounting read-only.  Mount in Windows.
[4985390.027808] NTFS-fs error (device sdd1): ntfs_remount(): Volume has errors and is read-only.  Cannot remount read-write.
[4985442.423299] NTFS volume version 3.1.
[4985442.425032] NTFS-fs error (device sdd1): load_system_files(): $LogFile is not clean.  Mounting read-only.  Mount in Windows.

これは「良い」マウントでした。しかし、デバイスがsddsdc、またはsdbであることを知っているだけで、バイナリコピーを作成できます(/mnt/backupdiskに十分な空き領域があると仮定):入力ファイル/dev/sdd、出力ファイルDiskImage.rawブロックサイズ1 MB

# dd if=/dev/sdd of=/mnt/backupdisk/DiskImage.raw bs=1M

入力ファイルは/dev/sddではなく/dev/sdd1(またはその他の数値)であることに注意してください。必要に応じて、DiskImage.raw内のデータパーティションのオフセットを確認し、ループデバイスを使用してマウントすることができます。 ここ あなたは汚い詳細を見つけるでしょう。

最初の回復の試み

2番目に行うことは、物理ディスクを別のエンクロージャーに配置して、エンクロージャーが良好であることを確認し、新しいエンクロージャーがディスクを正しく解釈できるようにすることです。ディスクが再表示される場合は、以前のエンクロージャが壊れていた可能性があります。念のため、新しく見つかったドライブの内容をすべてバックアップしますverifyバックアップ、ディスク上書きユーティリティを使用してディスクをゼロにします完全にダム(できません)デバイスチェーンに意見の異なる2つのデバイスがある場合)、Windowsからネイティブに再フォーマットしてデータを復元します。ラッキーショットですが、私はそれが起こるのを見ました。そして、その試みはあまり高くなく、約US $ 19,99の新しいエンクロージャーです。

元のエンクロージャが不良だった場合、ディスクを再フォーマットできないか、ディスクにアクセスできません。新しいエンクロージャーを再試行し、それが機能する場合は、古いエンクロージャーを交換するか、新しいエンクロージャーを使い続けることができます(ただし、新しいエンクロージャーがquite US $ 19.99 El Cheapoよりも優れている場合、これは価値があります) 。

専門家による回復

Googleで見つけられる専門の復旧サービス。正直すぎない方法は、物理ディスクを送信することです。「はい、ハードウェアの損傷はなく、すべてのデータをUS $ $$$、$で回復できます。 $$!」回答–ええと、あなたはknowデータがまだ回収可能であることを知っています。だから、あなたはあなたが取ったイメージバックアップでそれを自分で無料で試すことができ、診断とディスクのS&Hに対してのみ支払うことができます。あなたが失敗した場合でも、要求された生地を咳払いするオプションはまだあります。 isハードウェアの損傷がある場合、専門的なサービスは基本的にonlyオプションです。 「デッド」ディスクを(一時的に)復活させるいくつかのブードゥートリックがあります。多くの場合、少なくとも最も重要なデータを回復するのに十分な長さですが、なし毎回動作することが保証されています(ディスクを加熱、冷却、「回転」-固い表面に対してスマートにラップするよう提案されていることも確認しました)。それらのすべてがより多くのダメージを与えます。つまり、最初に機能する1つのトリックを必ず使用する必要があります。そうしないと、ディスクを永久に強制終了します。復活したディスクに関するサクセスストーリーが表示される理由を説明するために、これを追加しました。そこにはareのようなストーリーがあります。しかし、もしあなたが(たいてい)それが確実に起こりたいのであれば、あなたに起こるでしょう–まあ–専門家を雇ってください。

ハードウェアに問題がないと確信している場合-ディスクが回転したり、ガタガタしたり、奇妙な音やブザーが鳴ったり、クリック音が鳴ったりしません-発生した「すべて」は、chkdskがデータをめちゃくちゃにしたことです。

DIYリカバリー

「ホーム」リカバリは通常、次のようになります(基本的に、ハードウェアの損傷が軽減されたらプロの担当者が行うのと同じことです)、ディスクイメージコピーで作業します。

  • ディスクイメージの最初のセクターが有効なパーティションテーブルかどうかを確認します。そうでない場合は、ディスクイメージをスキャンして、ユニットのFSに応じて、有効なパーティションテーブルまたは認識可能なNTFSまたはFAT32ブートセクターを探します(1 TBのユニットの場合、NTFSが唯一の論理的な可能性のようです) )。どちらの方法でも、最初の数メガバイト内で何かを見つける必要があります。

  • パーティションテーブルが見つかった場合は、データパーティションがパーティションテーブルで指定されている場所にあることを確認します。そうでない場合、これは非常に朗報です。おそらくパーティションテーブルが間違っているだけです。修正は簡単で(いくつかのLinuxパーティションエディタがそれを行います)、ディスクは100%回復すると予想される場合があります。安全のために、読み取り専用モードのループデバイスを使用してLinuxにデータパーティションをマウントし、読み取り可能かどうかを確認してください。そうである場合、パーティションボーキングが確認され、ディスクが確実かつ完全に回復する途中で発音される可能性があります。そうでない場合は、パーティションが正しい可能性があり、データパーティション(の一部)が書き換えられています。これは悪いです;以下の「酸っぱいもの」を参照してください。

  • 見つかって有効な場合は、ドライブのジオメトリと照合してください。一致しない場合は、実際にはgoodの問題でもあります。問題の根本的な原因を見つけました。物理ジオメトリをカーネルに強制できます(そして Linuxの起動時に取得 )。新しいジオメトリによって、Linuxでディスクが認識されるかどうかを確認します。存在する場合は、データをバックアップし、バックアップが正しいことを確認し、ddでディスクをゼロにします(適切なsdデバイスに数メガバイトのゼロで十分です)。コンピューターの電源を切り(再起動だけでなく、大丈夫ですが、それは妄想的ですが、コストは低く、何かを成し遂げる可能性があります)、次にWindowsを起動して、無知なディスクを最適なフォーマットにフォーマットします。これにより、Windowsとの競合がなくなります。ディスク上のデータを復元します。楽しい。

  • ジオメトリトリックが機能しない場合、またはパーティションが見つからない場合、またはパーティションが空のように見える場合、問題は解決します。失われたデータのデータ領域(MFTなど)を検索するためのスキャンディスクイメージが可能な回復ツールが必要です。そして見つかったら、データを理解するためにそれらを解釈します。これは難しい仕事であり、常に完全に自動化できるとは限りません。より低く、より絶望的なレベルでは、これはindividualファイルの署名のスキャンを含み、それらがディスク内の連続したブロックにあることを期待しています。この種の操作は、専門家に喜んで任せます。古いFATディスクを使用して、何度か、常に成功しました。新しく、より大きく、より断片化したFAT32ディスクを使用して、約50%成功しました。私は試行済みより複雑なNTFSおよびext4ファイルシステムで、数回、結果は不良でした(ただし、完全なバックアップがあり、実際にはすべてを提供していませんでした)。

Linuxからの手動リカバリ

Linuxでパーティションをマウントしようとすると、エラーが発生します(通知/dev/sdcand/dev/sdcN別のもの–画像は/dev/sdcを参照しています。

# mount -t ntfs /dev/sdc1 /mnt/recovery
ntfs_mst_post_read_fixup_warn: magic: 0x00000000  size: 1024   usa_ofs: 0  usa_count: 65535: Invalid argument
Record 1 has no FILE magic (0x0)
Failed to open inode $MFTMirr: Input/output error

...これは、パーティションシステムがそれを認識しているが間違っているか、著しく損傷していることを示しているようです。最初のオプションをまずチェックしてみましょう:

# fdisk /dev/sdc

あなたはこのようなものを手に入れます:

Disk /dev/sdc: 1000.2 GB, 1000204885504 bytes
1 heads, 63 sectors/track, 31008335 cylinders, total 1953525167 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
Disk identifier: 0x9d2b7596

Device       Boot      Start    End          Blocks       Id  System
/dev/sdc1              63       1953520127   976760032+   7   HPFS/NTFS/exFAT

次のステップは、実際のパーティションの開始を確認することです。イメージファイル(または/dev/sdc)をシークして、NTFS署名を検索します。

  00000000:EB 52 90 4E 54 46 53 20 -20 20 20 00 02 08 00 00 .R.NTFS ........ 
  00000010:00 00 00 00 00 F8 00 00 -3F 00 FF 00 3F 00 00 00 ........?...?... 
  00000020:00 00 00 00 80 00 80 00 -4A F5 7F 00 00 00 00 00 ........J....... 

# dd if=/dev/sdc bs=512 count=1 skip=63 2>/dev/null | hexdump -C | head -n 1

...上記のデータでは、NTFSブートがセクター63にあると想定しているため、skipを設定しています。また、最初の(たとえば)メガバイトのeveryセクターで試してみます...

# dd if=/dev/sdc bs=512 count=2000000 2>/dev/null | hexdump -C | grep "00:EB 52 90 4E 54 46 53"

... only oneブートセクターがあることを確認するためだけです(これは私に起こりました。FAT32ディスクではstill)。読み取りエラーはありません。どこでも。

あなたの結果

00007e00  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|

セクター63は、63×512 = 32256 = 7e00の16進数のオフセットを提供します。 NTFSブートセクターがあり、パーティションテーブルは正しいようです

これで、/dev/sdc1の大きなチャンクを/tmp/mydisk.imgなどにコピーして、Linuxから修正することができます。これによって物理ディスクが損傷することはありません。物理ディスクは変更されずに他の試行に使用できます。そして、PTが正しいことがわかったので、コピーに/dev/sdc1を使用して、以前は不可能であった希望を楽しませることができます。

# dd if=/dev/sdc1 of=/tmp/mydisk.img bs=1G count=10
...after copying 10 gigabytes...

# ntfsfix /tmp/mydisk.img

NTFSfixが機能しない場合は、問題が発生しています。ただし、試してみることができる より正確なユーティリティ があります。また、JPEG画像ファイルを復元する必要があり、ファイルシステムが断片化されていなかった場合、JPEGヘッダーをシークすることでこれを自動的に行うことができます。 [〜#〜] i [〜#〜]それらを認識する方法がわからない(JPEGの場合、私は:-)を除いて、ほとんど同じです。 )。私が見つけた最後のオプションとして these guys –私はそれらを知りません、それらとは関係がなく、非難を受け入れません。ただし、これらのことを考えると、価格はveryが妥当です。

10
LSerni