ブロックデバイスからパーティション情報を回復する

ブロックデバイスからパーティション情報を回復する

私は最近、ddコマンドを使用して1TBの外付けハードドライブの最初の100MBを上書きしました。これは、私のパーティションテーブルが失われた可能性があることを意味します。 fdisk -l はパーティション情報を表示しません。

ただし、ddコマンドを実行すると実際にドライブがマウントされているため、ファイルエクスプローラを使用してドライブ(すべてのパーティション)のデータにアクセスできます。外付けハードドライブがまだコンピュータに接続されています。これにより、パーティションテーブルが回復可能であると考えられました。

このトピックの検索では、パーティションテーブルを復元できるデータ復旧ツールをお勧めしますが、これらのオプションはドライブがコンピュータから切断されたと想定しています。

/proc/partitionsを見ると、各ブロックデバイスのサイズは提供されますが、セクタのオフセットは提供されません。

Nautilusでファイル構造を見ることができるので、パーティションオフセットを知る必要があるとします。この情報を公開する方法はありますか?

答え1

/sys正確に言うと、パーティション情報を取得できます/sys/block/<disk>/<partition>/{start,size}

このシェル機能は次のように役立ちます。

print_partitions()
{
    local disk="$1"
    local part
    local template="%-6s %16s %16s %16s\n"

    printf "$template" Part. "First sector" "Last sector" "# sectors"
    for part in "/sys/block/$disk/"sd*; do
        st="$(cat "$part/start")"
        sz="$(cat "$part/size")"
        end=$((st + sz - 1))
        printf "$template" "${part##*/}" "$st" "$end" "$sz"
    done
}

使用法:

$ print_partitions sdd
Part.      First sector      Last sector        # sectors
sdd1               2048          2099199          2097152
sdd3            2099200       3907029167       3904929968

注:ここのセクターは512バイトのセクターです。

パーティション全体のダンプの場合:

for disk in /sys/block/sd*; do
    print_partitions "${disk##*/}"
    echo
done

最初のパーティションの始めに外部のスーパーブロックなどの貴重な情報を上書きすることができますが、これは別のの問題です。

関連情報