使用
dd
命令配合只读参数安全查看 MBR:sudo dd if=/dev/sda of=mbr_backup.bin bs=512 count=1
,务必指定正确硬盘标识符(如 sda),仅读取不写入,操作后通过hexdump
或xxd
分析备份文件,切勿直接修改原始磁盘。
MBR(Master Boot Record,主引导记录)是存储在计算机硬盘最开头(通常是第一个扇区,512字节)的一段特殊代码和数据结构,它包含了引导操作系统的关键信息以及硬盘的分区表,了解如何查看 MBR 对于系统管理员、高级用户进行故障诊断、学习引导过程或验证磁盘结构非常有用,本文将详细介绍在 Windows 和 Linux 操作系统下,如何使用内置的命令行工具安全地查看 MBR 的原始内容。
重要安全警告:
- 操作磁盘需谨慎: 本指南涉及直接读取磁盘底层扇区。绝对不要尝试使用
dd
或diskpart
的clean
等命令写入磁盘扇区(尤其是 MBR 所在扇区),除非你完全清楚后果,错误的写入操作会导致数据丢失、系统无法启动! - 强烈建议备份: 在进行任何磁盘操作之前,请务必备份重要数据。
- 管理员/root 权限: 以下所有命令都需要在管理员权限(Windows)或 root 权限(Linux)下运行。
- 理解输出: 查看 MBR 得到的是原始的二进制或十六进制数据,需要一定的知识(下文会简要解释结构)才能解读分区表等信息,我们的目标是安全地读取
在 Windows 系统中查看 MBR
Windows 没有直接输出 MBR 十六进制内容的单一命令,但可以通过组合命令或 PowerShell 实现。
方法 1:使用 diskpart
和 dd
(适用于 Windows 10/11)
- 以管理员身份打开命令提示符 (CMD) 或 PowerShell。
- 运行
diskpart
:diskpart
- 列出磁盘:
list disk
记下你想查看 MBR 的磁盘编号(
Disk 0
)。 - 选择目标磁盘: (请极其小心选择正确的磁盘编号!)
select disk X
(将
X
替换为你的目标磁盘编号,select disk 0
)。 - 不退出 diskpart,打开另一个管理员权限的 CMD 或 PowerShell 窗口。
- 使用
dd
命令读取 MBR: (Windows 10/11 内置了dd
)dd if=\\.\physicaldriveX of=C:\mbr_backup.bin bs=512 count=1
if=\\.\physicaldriveX
: 输入文件,指定要读取的物理磁盘。X
必须与你在diskpart
中选择的磁盘编号完全一致(\\.\physicaldrive0
)。of=C:\mbr_backup.bin
: 输出文件,将读取的 512 字节 (MBR) 保存到C:\mbr_backup.bin
,你可以更改保存路径和文件名。bs=512
: 块大小设置为 512 字节(一个扇区)。count=1
: 只读取一个块(即第一个扇区,MBR)。
关键: 这个命令是读取并备份到文件,不会修改磁盘。
- 使用十六进制查看器查看文件: 现在你有了一个包含 MBR 原始数据的
.bin
文件,你需要一个十六进制编辑器来查看其内容,Windows 没有内置的纯命令行十六进制查看器,但你可以:- 使用图形化工具(如 HxD, WinHex, Notepad++ 配合 Hex Editor 插件)打开
mbr_backup.bin
。 - 在 PowerShell 中查看(输出可能不完美):
Format-Hex -Path C:\mbr_backup.bin
- 使用图形化工具(如 HxD, WinHex, Notepad++ 配合 Hex Editor 插件)打开
方法 2:使用 PowerShell (Get-Content)
PowerShell 的 Get-Content
结合 -Encoding Byte
和 -TotalCount
也可以读取前 512 字节,但输出需要转换。
- 以管理员身份打开 PowerShell。
- 读取 MBR 到变量并显示为十六进制:
$mbrBytes = Get-Content -Path "\\.\physicaldrive0" -Encoding Byte -ReadCount 512 -TotalCount 512 $hexString = [System.BitConverter]::ToString($mbrBytes) $hexString -replace '-', ' '
- 将
\\.\physicaldrive0
替换为目标磁盘路径。 - 这个命令将 MBR 的 512 字节读入变量
$mbrBytes
。 - 然后使用
[System.BitConverter]::ToString
将字节数组转换为由连字符分隔的十六进制字符串(如"A1-B2-C3..."
)。 -replace '-', ' '
将连字符替换为空格,使输出更易读(每两个字符代表一个字节)。
- 将
- 解读输出: 你会看到一长串十六进制数字(512字节 * 2字符/字节 = 1024个字符,加上空格),这就是 MBR 的原始十六进制表示。
在 Linux 系统中查看 MBR
Linux 提供了强大的命令行工具 dd
和 hexdump
(或 xxd
, od
)来直接读取和查看 MBR。
方法:使用 dd
和 hexdump
(或 xxd
)
- 以 root 用户身份打开终端。 (使用
sudo -i
或sudo su
,或在命令前加sudo
)。 - 识别目标磁盘:
lsblk -f
或
fdisk -l
找到你要查看 MBR 的磁盘设备(通常是
/dev/sda
,/dev/nvme0n1
,/dev/vda
等)。务必确认设备名! 操作错误的磁盘会导致灾难。 - 使用
dd
读取 MBR 并直接通过管道用hexdump
查看: (最常用)sudo dd if=/dev/sdX bs=512 count=1 status=none | hexdump -Cv
if=/dev/sdX
: 输入文件,指定目标磁盘设备(/dev/sda
)。bs=512
: 块大小 512 字节。count=1
: 读取一个块(第一个扇区)。status=none
: 抑制dd
的统计信息输出(可选,使输出更干净)。- : 管道符,将
dd
的输出传递给hexdump
。 hexdump -Cv
:-C
: 规范格式(Canonical),左侧显示偏移地址,中间显示 16 个字节的十六进制,右侧显示对应的 ASCII 字符(不可打印字符显示为 )。-v
: 显示所有数据(不省略重复行),对于 MBR 这种小数据很有用。
- 解读输出 (示例片段):
00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| ... (共 512 字节,32 行) ... 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
- 左侧 (
00000000
,00000010
…): 十六进制偏移地址(从 MBR 开始的字节位置)。 - 中间 (每行 16 个字节): 两个十六进制数字表示一个字节(如
fa
,b8
)。 - 右侧: 对应中间 16 个字节的 ASCII 表示,可打印字符显示出来,不可打印字符(如
00
)显示为 ,注意 MBR 主要是代码和数据,大部分区域显示为 是正常的。 - 关键位置:
- 偏移
0x1BE - 0x1FD
(446 – 509 字节): 这是 4 个分区表项的位置,每个分区表项 16 字节,这里包含了分区的类型、起始扇区、大小等关键信息。 - 偏移
0x1FE - 0x1FF
(510 – 511 字节): MBR 结束标志。必须是55 AA
(十六进制),如果不是,表明 MBR 可能损坏或该磁盘/分区没有使用 MBR 分区方案(可能使用了 GPT)。
- 偏移
- 左侧 (
方法变体:使用 xxd
如果你更喜欢 xxd
的输出格式:
sudo dd if=/dev/sdX bs=512 count=1 status=none | xxd
xxd
默认输出与 hexdump -C
类似。
方法变体:备份 MBR 到文件
如果你想先备份再查看(推荐):
sudo dd if=/dev/sdX of=~/mbr_backup.bin bs=512 count=1
然后使用任何十六进制编辑器查看 ~/mbr_backup.bin
文件,或者用 hexdump -Cv ~/mbr_backup.bin
或 xxd ~/mbr_backup.bin
查看。
理解 MBR 结构(简要)
查看原始十六进制后,了解 MBR 的大致结构有助于解读:
- 引导代码 (Bootstrap Code Area): 偏移
0x000
–0x1BD
(前 440 字节左右),这是计算机 BIOS/UEFI (在 Legacy BIOS 模式下) 启动时加载并执行的第一段代码,负责查找并加载活动分区的引导扇区(VBR)。 - 磁盘签名 (Optional Disk Signature): 偏移
0x1B8
–0x1BB
(4 字节),Windows 使用它来唯一标识磁盘。 - 空 (通常为 Null): 偏移
0x1BC
–0x1BD
(2 字节),通常为00 00
。 - 分区表 (Partition Table): 偏移
0x1BE
–0x1FD
(64 字节),包含 4 个分区表项,每个 16 字节,每个表项定义了分区的状态(是否活动)、起始 CHS/LBA 地址、分区类型、结束 CHS/LBA 地址、总扇区数等,这是查看 MBR 时最常关注的部分。 - 结束标志 (Boot Signature): 偏移
0x1FE
–0x1FF
(2 字节)。必须是55 AA
(十六进制),这是 BIOS 识别有效 MBR 的标志。
- 查看 MBR 的核心是安全地读取硬盘的第一个扇区(512 字节)。
- Windows: 使用
diskpart
+dd
备份到文件后用十六进制编辑器查看,或使用 PowerShell 的Get-Content
读取字节并转换。 - Linux: 使用
dd if=/dev/sdX bs=512 count=1 | hexdump -Cv
是最直接、常用的方法。xxd
是很好的替代品。 - 务必:
- 使用 管理员/root 权限。
- 100% 确认目标磁盘设备。
- 理解操作风险,避免写入命令 (
of=
指向磁盘设备)。 - 考虑先备份 (
of=filename.bin
)。
- 解读输出需要关注分区表 (
0x1BE - 0x1FD
) 和结束标志 (55 AA
),完整的解读需要参考 MBR 结构规范。
通过遵循这些步骤,你可以安全地查看硬盘的 MBR 内容,这对于理解系统引导过程、诊断启动问题或学习磁盘结构非常有价值,谨慎操作是关键。
引用与进一步学习:
- MBR 结构详解:
- Wikipedia: Master Boot Record (https://en.wikipedia.org/wiki/Master_boot_record) – 提供标准 MBR 布局和技术细节。
- OSDev Wiki: MBR (x86) (https://wiki.osdev.org/MBR_(x86)) – 更偏向于开发视角,结构描述清晰。
- 命令手册 (Man Pages):
- Linux:
man dd
,man hexdump
,man xxd
,man fdisk
,man lsblk
- Windows: 在命令行中执行
diskpart /?
,dd /?
(如果可用), PowerShell 中执行Get-Help Get-Content
,Get-Help Format-Hex
。
- Linux:
- Microsoft Docs:
- About DiskPart (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/diskpart) – 官方
diskpart
命令参考。 - PhysicalDrive paths (https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#win32-device-namespaces) – 解释
\\.\physicaldriveX
的命名空间。
- About DiskPart (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/diskpart) – 官方
- 十六进制编辑器:
- HxD (Windows, Freeware): https://mh-nexus.de/en/hxd/
- WinHex (Windows, Commercial): https://www.x-ways.net/winhex/
- GHex (Linux/GNOME), Okteta (Linux/KDE),
xxd
/hexdump
/od
(命令行)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4935.html