いくつかの論理パーティションを拡張パーティションに変換したかったので、次のようにしました この受け入れられた答え 。しかし、現在のパーティションテーブルをバックアップする段階で、私は混乱して、書かれたものの代わりに次のように入力しました。
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つのセクターであることを知って、セクターを1つの単位として使用してパーティションテーブルを書き直そうとしました(シリンダーはどこにもつながりません)(一般的かどうかはわかりませんが、セクターでパーティションテーブルをエクスポートするとわかります) 1セクター= 512バイト、1ブロック= 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のコーディングと処理に時間がかかり、何が問題だったのかわかりません)。
このディスクにとって最も重要なものの最近のバックアップがありますが、ファイルを再インストールしてコピーせずに修正できれば、それは素晴らしいことです。
これは手作業で修正するのが難しいでしょう。書き込んだパーティションテーブルが壊れていることを除いて、このディスクのデータをこれ以上変更していないことを願っています。
Sfdisk、fdiskなどを使用してパーティションテーブルのバックアップを作成することをお勧めします(誤って間違ったコマンドを入力しない場合:))。しかし、追加の保険のために、ddを使用してドライブのブートセクターをバックアップするのが好きです。
Sda1がブロック1から始まることを確信していますか、それは推測でしたか? MBRと(プライマリ)パーティションテーブルを保持するために必要なのはそれだけなので、ディスクの先頭で1ブロックだけが使用されるのが一般的でしたが、最近では、パーティションソフトウェアがより多くのスペースを予約するのが一般的です。 1番目のパーティションの開始セクターが63であることは珍しいことではありません。また、パーティション分割ソフトウェア(gparted、IIRC)がドライブの開始時にメガバイトを予約し、後続のすべてのパーティションをメガバイト境界に強制することも確認しました。
古いシステムでは、パーティションがシリンダー境界で開始および停止することが重要でした。 IOW、ディスクの開始時のパーティション化されていない領域は整数のシリンダーである必要があり、後続の各プライマリパーティションも同様である必要があります。通常、ディスクの端にも未割り当てのスペースがあります。しかし、それは一般的に何年もの間問題ではありませんでした、しかしあなたが興味を持っている場合に備えて、多くのパーティション分割ソフトウェアはまだそれについて言及しています。 :)
ただし、パーティションdoは、セクター境界で開始および停止する必要があります。これにより、最初のリストのブロック指向データの分析がはるかに簡単になります。したがって、2441214 +ブロックはonly2441214.5ブロック= 4882429セクター= 2499803648バイトを参照できます。
ただし、これを手動で修正するのではなく、 testdisk のようなツールの使用を真剣に検討する必要があります。すでにディストリビューションにインストールされている場合もありますが、そうでない場合は、リポジトリにインストールする必要があります。