web-dev-qa-db-ja.com

gpartedを使用してパーティションテーブルをワイプしましたが、パーティションを回復する方法はありますか?

"デバイス->パーティションテーブルの作成...をクリックして適用"をクリックして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

この出力はどういう意味ですか?回復できる方法はありますか?

7
Mustafa

testdisk を使用してパーティションテーブルを復元してみてください。 Testdiskはディスクの表面を読み取り、パーティションの開始位置と終了位置を判別しようとします。

4
Curtis Gedak

パーティションテーブルをリカバリする可能性がありますが、2つの条件を満たす必要があります。

  1. マシンを再起動していません。
  2. テーブルが変更されたときにドライブは使用中でした。

これが機能する方法は、カーネルがパーティションレイアウトをメモリに保持することです。パーティションが使用中の場合、パーティションがどこから始まるかを知る必要があるため、新しいテーブルが使用されなくなるまで、新しいテーブルの再読み込みを拒否します。

これを行う方法:

/sys/block/sdaにアクセスします。そこには、各パーティションのディレクトリが表示されます(sda1sda2など)。これらのそれぞれの内部には、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 
/dev/sdc2 on/mnt/tmp type xfs(rw)
#cat /mnt/tmp/world
hello

パーティションテーブルのワイプ

#fdisk /dev/sdc
fdiskへようこそ(util-linux 2.22.2)。
 
書き込みを行うまで、変更はメモリにのみ残ります
 writeコマンドを使用する前に注意してください。
 
 
コマンド(ヘルプは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()を呼び出してパーティションテーブルを再読み取りします。
 
警告:パーティションテーブルを再読み取りしていますfaエラー16が発生しました:デバイスまたはリソースがビジーです。
カーネルはまだ古いテーブルを使用しています。新しいテーブルは、
次の再起動時、またはpartprobe(8)またはkpartx(8)を実行した後で使用されます
ディスクの同期。

まだマウントされていてアクセス可能であることに注意してください。

#cat/mnt/tmp/world 
 hello 

オフセットを取得する

#cd /sys/class/block/sdc

# ls 
 alignment_offset device @ events_poll_msecs power/ro slaves /
 bdi @ discard_alignment ext_range queue/sdc1/stat 
 capability events Holders/range sdc2/subsystem @ 
 dev events_async inflight removeable size uevent 
 
#cat sdc1/start 
 2048 
 
#cat sdc1/size 
 2097152 
 
#cat sdc2/start 
 2099200 
 
#cat sdc2/size 
 13539328 
 

パーティションテーブルを復元する

 
#fdisk /dev/sdc
fdiskへようこそ(util-linux 2.22.2)。
 
変更はメモリにのみ残ります。 
 writeコマンドを使用する前に注意してください。
 
 
コマンド(ヘルプはm):n 
パーティションタイプ:
 pプライマリ(0プライマリ、0拡張、4空き)
 e拡張
選択(デフォルトp):p 
パーティション番号(1-4、デフォルト1):1 
最初のセクター(2048-15638527、デフォルト2048):2048 
最後のセクター、+セクターまたは+ size {K、M、G}(2048-15638527、デフォルト15638527): +2097151 
 Linuxタイプでサイズ1のパーティション1 GiB is set 
 
 Command(m for help):n 
パーティションタイプ:
 pプライマリ(1プライマリ、0拡張、3フリー)
 e拡張
選択(デフォルトp):p 
パーティション番号(1- 4、デフォルト2):2 
最初のセクター(2099200-15638527、デフォルト2099200):2099200 
最後のセクター、+セクターまたは+ size {K、M、G}(2099200-15638527、デフォルト15638527 ):+13539327 
 Linuxタイプおよびサイズ6.5のパーティション2 GiB is set 
 
 Command(m for help):p 
 
ディスク/ dev/sdc:8006 MB、8006926336バイト、15638528セクター
単位= 1 * 512のセクター= 512バイト
セクターサイズ(論理/物理): 512バイト/ 512バイト
 I/Oサイズ(最小/最適):512バイト/ 512バイト
ディスク識別子:0x000ce29c 
 
デバイスブート開始エンドブロックID System 
/dev/sdc1 2048 2099199 1048576 83 Linux 
/dev/sdc2 2099200 15638527 6769664 83 Linux 
 
コマンド(ヘルプはm):w 
パーティションテーブルが変更されました!
 
 ioctl()を呼び出してパーティションテーブルを再読み取りします。
 
警告:パーティションテーブルの再読み取りに失敗しましたエラー16:デバイスまたはリソースがビジーです。
カーネルはまだ古いテーブルを使用しています。新しいテーブルは、
次の再起動時、またはpartprobe(8)またはkpartx(8)を実行した後で使用されます
ディスクの同期。

!!最後のセクターを指定する場合、サイズ-1を使用することに注意してください!!

検証

ドライブをアンマウントし、partprobeを実行してカーネルに新しいテーブルを取得するように指示してから、再マウントし、ファイルにアクセスできることを確認します。

#umount /mnt/tmp/

# partprobe /dev/sdc

# mount/dev/sdc2/mnt/tmp 
 
#cat/mnt/tmp/world 
 hello 
7
Patrick

partedには、ファイルシステムの開始位置と長さがおおよそわかっている場合に、ファイルシステムの開始位置と長さを探知できるレスキューコマンドがあります。

1
psusi

NTFSディスクのサイズを知っている場合、fdiskまたはpartedを使用してこれらをリセットできる可能性がありますが、運が悪いと思います。

0
slm