誤って/ Part / sdaパーティションテーブルをGParted で上書きしました(AskUbuntuの全容)。まだリブートしておらず、ファイルシステムは完全に使用可能なので、カーネル内のメモリからパーティションテーブルを回復できる可能性があると言われました。それは可能ですか?もしそうなら、どのようにそれを回復し、復元しますか?
誤って/ Part / sdaパーティションテーブルをGParted で上書きしました(AskUbuntuの全容)。まだリブートしておらず、ファイルシステムは完全に使用可能なので、カーネル内のメモリからパーティションテーブルを回復できる可能性があると言われました。それは可能ですか?もしそうなら、どのようにそれを回復し、復元しますか?
回答:
はい、/sys
ファイルシステムでこれを行うことができます。
/sys
カーネルとカーネルドライバーによって動的に生成される偽のファイルシステムです。
この特定のケースでは、に移動でき/sys/block/sda
、ドライブ上の各パーティションのディレクトリが表示されます。そこあなたが必要とするこれらのフォルダで2つの固有のファイルがある、start
とsize
。start
ドライブの先頭からのオフセットが含まれ、size
パーティションのサイズです。パーティションを削除し、で見つかったものとまったく同じ開始とサイズでパーティションを再作成します/sys
。
たとえば、これは私のドライブがどのように見えるかです:
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 133119 65536 83 Linux
/dev/sda2 * 133120 134340607 67103744 7 HPFS/NTFS/exFAT
/dev/sda3 134340608 974675967 420167680 8e Linux LVM
/dev/sda4 974675968 976773167 1048600 82 Linux swap / Solaris
そして、これは私が持っているものです/sys/block/sda
:
sda1/
start: 2048
size: 131072
sda2/
start: 133120
size: 134207488
sda3/
start: 134340608
size: 840335360
sda4/
start: 974675968
size: 2097200
実行中のシステムでパーティションテーブルを変更した後、情報が正確であることを確認するためにこれをテストしました
/dev/sdb/start
。名前が変更されましたext_range
か?カーネル:4.8.15-1-MANJARO
/sys/block/sdb/start
はない/dev/sdb/start
stat
ありませんstart
。
fdisk
は、セクターの数を直接入力でき、ディスクに書き込む前に値を確認できるため、usindをお勧めします。ディスクを正常に復元しました。最初のパーティションを作成し、存在を受け入れ、最後に「+ size」(上から)を入力start
し、2番目のパーティションを/ sys ...から入力し、「+ size」を再度入力します。新しいテーブルを書き込む前のパーティションのサイズ。幸運を!
NO WARRANTYを使用して、この問題の解決に役立つスクリプトを作成しました。(ただし、仮想マシンでテストしました)
最初のパラメーターで破損したHDを使用して、次のスクリプトを実行します:$ ./repart.sh sda
#!/bin/bash
HARDDISK=$1
PARTITIONS=$(ls -d /sys/block/${HARDDISK}/${HARDDISK}?/)
echo "unit: sectors"
for i in $PARTITIONS; do
DEVICE=$(basename $i)
START=$(cat $i/start)
SIZE=$(cat $i/size)
echo "/dev/$DEVICE : start=$START, size=$SIZE, type=XX"
done
出力はsfdisk形式です。しかし、注意、このファイルを使用するように変更する必要があります。拡張パーティションタイプ= 5で、すべての論理スペースに加えて、拡張の開始から最初の論理パーティションの開始までのスペースを使用して、サイズを増やします。
unit: sectors
/dev/sda1 : start=63, size=2040192, type=XX
/dev/sda2 : start=2040255, size=20482875, type=XX
/dev/sda3 : start=22523130, size=19197675, type=XX
/dev/sda4 : start=41720805, size=2, type=XX
/dev/sda5 : start=41720868, size=208782, type=XX
typeをXXからパーティションタイプの数に変更する必要があります。入れて起動可能な最初の行でパーティションを。
unit: sectors
/dev/sda1 : start=63, size=2040192, type=83, bootable
/dev/sda2 : start=2040255, size=20482875, type=83
/dev/sda3 : start=22523130, size=19197675, type=fd
/dev/sda4 : start=41720805, size=208845, type=5
/dev/sda5 : start=41720868, size=208782, type=82
この変更を適用する
cat repart.sfdisk | sfdisk -f /dev/sda
パーティションテーブルの再読み込み
partprobe
/sbin/blockdev --rereadpt
GRUBを再インストールする
grub-install /dev/sda