web-dev-qa-db-ja.com

/ dev / sdaのメモリ(カーネル)パーティションテーブルを読み取る方法は?

誤って/ dev/sdaパーティションテーブルをGPartedで上書きしました( AskUbuntuの全文 )。まだリブートしておらず、ファイルシステムはまだ完全に使用可能であるため、カーネル内のメモリからパーティションテーブルを回復できるかもしれないと言われました。それは可能ですか?もしそうなら、それをどのように回復して復元しますか?

enter image description here

15
Olivier Lalonde

無保証を使用して、この問題の解決に役立つスクリプトを作成しました。 (ただし、仮想マシンでテストしました)

次のように、最初のパラメーターでHDが破損している次のスクリプトを実行します。

user@Host:~$ ./repart.sh sda

の内容 repart.sh

#!/bin/bash

echo "unit: sectors" 
for i in /sys/block/$1/$1?/; do
    printf '/dev/%s : start=%d, size=%d, type=XX\n' "$(basename $i)" "$(<$i/start)" "$(<$i/size)"
done

出力はsfdisk形式です。しかし注意、このファイルは使用するために変更する必要があります。拡張パーティションのtype = 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からパーティションタイプの数に変更する必要があります。 bootableパーティションを最初の行に置きます。

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
11
fabceolin

testdisk を試しましたか?再起動した後でも、ディスクをスキャンして失われたパーティションテーブルを回復できます。

Debian用と、おそらくUbuntu用にもパッケージ化されて利用可能です。おそらく他のディストリビューションでしょう。

Gparted CDを起動する場合は、それがプリインストールされているかどうかを確認する価値があるでしょう。

4
cas