让我们尝试一下修改MBR中起始位置,将其修改为1/8倍
找到第一个分区的记录位置0x1BE

分区表为:
0x80 00 21 02 83 08 28 22 00 08 00 00 00 80 00 00

0x80 = bootable
0x002102 = start CHS = 0000 0000 0010 0001 0000 0010 = 0x0 Head 0x21 Sector 0x002 Cylinder
这里CHS本来就是错的,正确的应该是0x20 head 0x21 sector 0x000 cylinder
0x21 = start sector
0x02 = start track
0x83 = os indicator
0x08 = end head
0x28 = end sector
0x22 = end track
0x00080000 = start LBA (little endian) = 0x800 
0x00800000 = length LBA (little endian) = 0x8000

将上述起始位置除8,变成:
(CHS我是通过disk genius直接找到扇区对应的CHS的)
(CHS只有非常旧的系统才会用,搞错了其实也无所谓)
(但bios可能就是非常旧的系统,所以还是会出问题...)
0x80 = bootable
0x04 = start head
0x05 = start sector
0x00 = start cylinder
0x83 = os indicator
0x69 = end head
0x06 = end sector
0x00 = end cylinder
0x00010000 = start LBA (little endian) = 0x100 
0x00100000 = length LBA (little endian) = 0x1000

也就是 0x80 040500 83 690600 00010000 00100000

CHS如何编码:

https://thestarman.pcministry.com/asm/mbr/PartTables.htm

修改完可以正常看到分区



接下来修改第二个分区0x1CE

0x 00 090A24 83 07071C 00900000 00601F00
0x00 = not bootable
0x090A24 = start CHS
0x83 = os type
0x07071C = end CHS
0x00900000 = start LBA = 0x9000
0x00601F00 = length LBA = 0x1F6000

将LBA除以8,然后直接用disk genius找到对应的CHS
0x00
0x490A00
0x83
0x483910
0x00120000  = 0x1200
0x00EC0300 = 0x03EC00

修改完成



尝试在linux中挂载这个盘:

尝试去访问文件的话:

但如果尝试用这个盘启动:
提示是No Bootable Device

原因大概竟然是,在使用grub启动的时候,GRUB会把core.img放到MBR记录的后面一个扇区中


看一个正常硬盘的第二个扇区内容:

和core.img文件的内容,其实是一样的

所以问题是我们得把core.img放到第二个扇区里

dd if=core.img of=/dev/sde obs=4096 seek=1

写完之后,第一个扇区的数据已经变了

还是没法启动。。

One thought to “【实验】通过修改MBR分区的起始扇区能否使4k硬盘兼容512镜像”

Leave a comment

您的电子邮箱地址不会被公开。