gparted を使用して「デバイス > パーティション テーブルの作成...」をクリックして適用し、NTFS (Windows) パーティション テーブルを消去しましたが、NTFS パーティションを回復する方法はありますか?
このコマンドを使用してみるgpart /dev/sda
と、次の出力が得られました。
Begin scan...
End scan.
Checking partitions...
Ok.
Guessed primary partition table:
Primary partition(1)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
Primary partition(2)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
Primary partition(3)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
Primary partition(4)
type: 000(0x00)(unused)
size: 0mb #s(0) s(0-0)
chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r
この出力はどういう意味ですか? 回復する方法はありますか?
答え1
パーティション テーブルを回復できる可能性はありますが、次の 2 つの条件を満たす必要があります。
- マシンを再起動していません。
- テーブルが変更された時点でドライブは使用中でした。
これは、カーネルがパーティション レイアウトをメモリ内に保持することによって機能します。パーティションが使用中の場合、パーティションの開始位置を知る必要があるため、使用されなくなるまで新しいテーブルの再読み込みを拒否します。
これを行う方法:
に移動します/sys/block/sda
。その中に、各パーティションのディレクトリ ( sda1
、など) があります。それぞれのディレクトリ内には、および(つまり)sda2
というファイルがあります。これらの開始位置とサイズを正確に使用してパーティション テーブルを再作成すると、問題はありません。start
size
/sys/block/sda/sda1/start
パーティション タイプは保持されないことに注意してください。Linux はこの情報を気にしません。したがって、再作成後に、パーティション タイプが何に設定されていたか (NTFS など) を覚えておく必要があります。
例
オリジナルディスク:
# fdisk -l /dev/sdc ディスク /dev/sdc: 8006 MB、8006926336 バイト、15638528 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト ディスク識別子: 0x000ce29c デバイス ブート 開始 終了 ブロック ID システム /dev/sdc1 2048 2099199 1048576 83 Linux /dev/sdc2 2099200 15638527 6769664 83 Linux
# マウント | grep sdc /mnt/tmp 上の /dev/sdc2 タイプ xfs (rw)
# cat /mnt/tmp/world こんにちは
パーティションテーブルの消去
# fdisk /dev/sdc fdisk (util-linux 2.22.2) へようこそ。 変更は、書き込むことを決定するまで、メモリ内にのみ残ります。 書き込みコマンドを使用する前に注意してください。 コマンド(ヘルプの場合はm):d パーティション番号(1-4):1 パーティション1が削除されました コマンド(ヘルプの場合はm):d 選択されたパーティション 2 パーティション2が削除されました コマンド(ヘルプの場合はm):p ディスク /dev/sdc: 8006 MB、8006926336 バイト、15638528 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト ディスク識別子: 0x000ce29c デバイス ブート 開始 終了 ブロック ID システム コマンド(ヘルプの場合はm):w パーティション テーブルが変更されました。 ioctl() を呼び出してパーティション テーブルを再読み取りします。 警告: パーティション テーブルの再読み取りに失敗しました。エラー 16: デバイスまたはリソースがビジーです。 カーネルは古いテーブルをまだ使用しています。新しいテーブルは 次回の再起動時またはpartprobe(8)またはkpartx(8)を実行した後 ディスクを同期しています。
まだマウントされていてアクセス可能であることに注意してください。
# cat /mnt/tmp/world こんにちは
オフセットを取得する
# cd /sys/class/block/sdc # ls alignment_offset デバイス@ events_poll_msecs 電源/ ro スレーブ/ bdi@ 破棄アラインメント ext_range キュー/ sdc1/ 統計 機能イベントホルダー/範囲sdc2/サブシステム@ dev events_async 飛行中の取り外し可能なサイズ uevent # sdc1/開始 2048 # 猫 sdc1/サイズ 2097152 # sdc2/開始 2099200 # 猫 sdc2/サイズ 13539328
パーティションテーブルを復元する
# fdisk /dev/sdc fdisk (util-linux 2.22.2) へようこそ。 変更は、書き込むことを決定するまで、メモリ内にのみ残ります。 書き込みコマンドを使用する前に注意してください。 コマンド(ヘルプの場合はm): n パーティションタイプ: p プライマリ (プライマリ 0、拡張 0、フリー 4) 拡張 選択(デフォルトp):p パーティション番号(1~4、デフォルト1):1 最初のセクター (2048-15638527、デフォルト 2048): 2048 最後のセクター、+セクターまたは+サイズ{K,M,G} (2048-15638527、デフォルト 15638527): +2097151 タイプLinux、サイズ1GiBのパーティション1が設定されています コマンド(ヘルプの場合はm): n パーティションタイプ: p プライマリ (プライマリ 1、拡張 0、フリー 3) 拡張 選択(デフォルトp):p パーティション番号(1~4、デフォルト2): 2 最初のセクター (2099200-15638527、デフォルト 2099200): 2099200 最後のセクター、+セクターまたは+サイズ{K,M,G} (2099200-15638527、デフォルト 15638527): +13539327 タイプLinux、サイズ6.5GiBのパーティション2が設定されています コマンド(ヘルプの場合はm):p ディスク /dev/sdc: 8006 MB、8006926336 バイト、15638528 セクタ 単位 = 1 セクター * 512 = 512 バイト セクターサイズ(論理/物理):512バイト/512バイト I/O サイズ (最小/最適): 512 バイト / 512 バイト ディスク識別子: 0x000ce29c デバイス ブート 開始 終了 ブロック ID システム /dev/sdc1 2048 2099199 1048576 83 Linux /dev/sdc2 2099200 15638527 6769664 83 Linux コマンド(ヘルプの場合はm):w パーティション テーブルが変更されました。 ioctl() を呼び出してパーティション テーブルを再読み取りします。 警告: パーティション テーブルの再読み取りに失敗しました。エラー 16: デバイスまたはリソースがビジーです。 カーネルは古いテーブルをまだ使用しています。新しいテーブルは 次回の再起動時またはpartprobe(8)またはkpartx(8)を実行した後 ディスクを同期しています。
!!最後のセクターを指定するときは、サイズ - 1 を使用することに注意してください。!!
検証
ドライブをアンマウントし、 を実行してpartprobe
カーネルに新しいテーブルを取得するように指示し、再度マウントしてファイルにアクセスできることを確認しましょう。
# /mnt/tmp/ をアンマウントする # パーツプローブ /dev/sdc # /dev/sdc2 /mnt/tmp をマウントします # cat /mnt/tmp/world こんにちは
答え2
使ってみてもいいかもしれませんテストディスクパーティション テーブルを回復します。Testdisk はディスクの表面を読み取り、パーティションの開始位置と終了位置を特定しようとします。
答え3
parted
大まかな場所がわかっている場合は、ファイルシステムの開始位置と長さを嗅ぎ回ることができる rescue コマンドがあります。
答え4
NTFS ディスクのサイズがわかっている場合は、fdisk または parted を使用してこれらをリセットできる可能性がありますが、運が悪いと思います。