sfdiskを使用しておおよそのパーティションテーブルバックアップを実行する

sfdiskを使用しておおよそのパーティションテーブルバックアップを実行する

いくつかの論理パーティションを拡張パーティションに変換したいと思いました。この回答は許可されました。。ところで、現在パーティションテーブルをバックアップする段階で、誤って書かれていた内容ではなく、次のように入力するようになりました。

sfdisk -f /dev/sda > /mnt/parts.txt

結果は次のとおりです。

Disk /dev/sda: 30401 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1          0+    304-    304-   2441214+  82  Linux swap / Solaris
/dev/sda2   *    304+    565-    262-   2097152   83  Linux
/dev/sda3        565+   4486-   3921-  31495168   83  Linux
/dev/sda4       4486+  30401-  25916- 208163840    5  Extended
/dev/sda5       4486+  24026-  19540- 156954624   83  Linux

ご覧のとおり、単位は円筒とブロックなので、正しいセクタのエクスポートに比べて精度が低下する可能性があります。

問題は、パーティションテーブルが破損しているため、この不完全な(または元ですか?)バックアップを活用する必要があることです。

これまで、1つのブロックが2つのセクタであることを知って、セクタごとにパーティションテーブルを書き換えてみました(シリンダはどこにも接続されていません) 1024バイト...)。

root@debian:/home/user# sfdisk -u S /dev/sda
Checking that no-one is using this disk right now ...
OK

Disk /dev/sda: 30401 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sda1             1   4882429    4882429  82  Linux swap / Solaris
/dev/sda2       4882430   9076733    4194304  83  Linux
/dev/sda3       9076734  72067069   62990336  83  Linux
/dev/sda4      72067070 488394749  416327680  83  Linux
Input in the following format; absent fields get a default value.
<start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
Usually you only need to specify <start> and <size> (and perhaps <type>).

/dev/sda1 :1 4882429 S
/dev/sda1             1   4882429    4882429  82  Linux swap / Solaris
/dev/sda2 :4882430 4194304 L *
/dev/sda2   *   4882430   9076733    4194304  83  Linux
/dev/sda3 :9076734 62990336
/dev/sda3       9076734  72067069   62990336  83  Linux
/dev/sda4 :72067070 416327680 E
/dev/sda4      72067070 488394749  416327680   5  Extended
/dev/sda5 :72067071 313909248
/dev/sda5      72067071 385976318  313909248  83  Linux
/dev/sda6 :
/dev/sda6     385976320 488394749  102418430  83  Linux
/dev/sda7 :
No room for more
New situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sda1             1   4882429    4882429  82  Linux swap / Solaris
/dev/sda2   *   4882430   9076733    4194304  83  Linux
/dev/sda3       9076734  72067069   62990336  83  Linux
/dev/sda4      72067070 488394749  416327680   5  Extended
/dev/sda5      72067071 385976318  313909248  83  Linux
/dev/sda6     385976320 488394749  102418430  83  Linux
Warning: partition 1 does not end at a cylinder boundary
Warning: partition 2 does not start at a cylinder boundary
Warning: partition 2 does not end at a cylinder boundary
Warning: partition 3 does not start at a cylinder boundary
Warning: partition 3 does not end at a cylinder boundary
Warning: partition 4 does not start at a cylinder boundary
Warning: partition 4 does not end at a cylinder boundary
Warning: partition 5 does not end at a cylinder boundary
Warning: partition [6] does not start at a cylinder boundary
Warning: partition [6] does not end at a cylinder boundary
Warning: partition 6 does not end at a cylinder boundary
Do you want to write this to disk? [ynq] y
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

シリンダ境界にはパーティションの開始/停止はありません。これはどういう意味なのかわかりませんが、+そして-、これは数値が丸められたことを意味し、元のエクスポートではこれが正常だと思います。

また、出力が同じであることを確認するために同じエラーコマンドを発行しました。

Disk /dev/sda: 30401 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1          0+    303-    304-   2441214+  82  Linux swap / Solaris
/dev/sda2   *    303+    565-    262-   2097152   83  Linux
/dev/sda3        565+   4485-   3921-  31495168   83  Linux
/dev/sda4       4485+  30401-  25916- 208163840    5  Extended
/dev/sda5       4485+  24025-  19540- 156954624   83  Linux
/dev/sda6      24025+  30401-   6376-  51209215   83  Linux

近いですが、全く同じではありません。また、gpartedはパーティションファイルシステムを認識していないようです(すべてが「不明」)。

また、/dev/sda1が304本のシリンダーと同じくらい大きいのですが、最終的に303本のシリンダーだけが残るのはどのように可能ですか?


解決策に近づいたと思いますが、必要な正確な数字を取得できません。計算が間違っているか、間違っている可能性があります。しかし、どの組み合わせが動作しているかを確認するために1つずつ変更することはできません(できますが、bashのコーディングと処理に時間がかかり、何が間違っているのかわかりません)。

最近このディスクの最も重要な内容をバックアップしましたが、再インストールやファイルのコピーなしで回復できる場合は本当に良いと思います。

答え1

この問題を直接解決するのは難しいかもしれません。作成した破損したパーティションテーブルに加えて、そのディスクのデータを変更しないことを願っています。

sfdisk、fdiskなどを使用してパーティションテーブルのバックアップを作成することをお勧めします(誤って間違ったコマンドを入力しなかった場合:))。しかし、さらなる保険のために、ddを使用してドライブのブートセクタをバックアップするのが好きです。

誰ですか確かにsda1はブロック1から始まりますか、それとも推測ですか?以前はMBRテーブルと(デフォルト)パーティションテーブルの両方を保持するために必要であったため、ディスクの先頭に1つのブロックしか使用しないことが一般的でしたが、最近ではパーティションソフトウェアが最初のパーティションのためにより多くのスペースを予約することがよくあります。セクター63は珍しいことではありません。また、パーティショニングソフトウェア(gparted、IIRC)はドライブの先頭にメガバイトを予約し、その後のすべてのパーティションをメガバイトの境界に強制することを見ました。

以前のシステムでは、パーティションがシリンダ境界で開始および停止されることが重要です。 IOW、ディスクの先頭の未分割領域は整数個のシリンダーでなければならず、各後続の基本パーティションも整数個のシリンダーでなければなりません。通常、ディスクの終わりにも割り当てられていない領域があります。しかし、これは一般的に何年も問題ではありませんが、興味がある場合に備えて、多くのパーティショニングソフトウェアでまだこの問題に言及しています。 :)

ただし、パーティションするセクタ境界で開始および停止する必要があります。これにより、最初のリストのブロック指向データをより簡単に分析できます。したがって、2441214個以上のブロックが可能です。ただ参照 2441214.5 ブロック = 4882429 セクタ = 2499803648 バイト。

ただし、この問題を手動で解決しようとするのではなく、このようなツールを使用することを真剣に検討する必要があります。テストディスク。ディストリビューションにインストールした可能性がありますが、そうでない場合はリポジトリに配置する必要があります。

関連情報