从块设备恢复分区信息

从块设备恢复分区信息

我最近使用 dd 命令覆盖了 1TB 外部硬盘开头的约 100MB。这意味着我的分区表可能已经丢失。 fdisk -l 不显示分区信息。

但是,由于我在发出 dd 命令时实际上已经安装了驱动器,因此可以使用文件资源管理器访问驱动器上的数据(所有分区)。外部硬盘仍然连接到计算机。这让我相信分区表是可以恢复的。

关于此主题的搜索推荐可以恢复分区表的数据恢复工具,但这些选项假定驱动器已与计算机断开连接。

查看 /proc/partitions 会给出每个块设备的大小,但不会给出它们在扇区中的偏移量。

我假设由于我可以在 nautilus 中查看文件结构,因此必须知道分区偏移量。有没有办法公开这些信息?

答案1

您可以从 获取分区信息/sys,确切地说是从/sys/block/<disk>/<partition>/{start,size}

这个 shell 函数可能会帮助你::

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

请注意,您可能还覆盖了第一个分区开头的宝贵信息,例如 ext 超级块,但这是另一个故事问题。

相关内容