いくつかの論理パーティションを拡張パーティションに変換したいと思いました。この回答は許可されました。。ところで、現在パーティションテーブルをバックアップする段階で、誤って書かれていた内容ではなく、次のように入力するようになりました。
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 バイト。
ただし、この問題を手動で解決しようとするのではなく、このようなツールを使用することを真剣に検討する必要があります。テストディスク。ディストリビューションにインストールした可能性がありますが、そうでない場合はリポジトリに配置する必要があります。