FAT32文件系统有自己的格式,其中比较重要的概念包括:
=== MBR ===
MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令(<font color=red>在我们的操作中BIOS负责LOAD内核,并且跳转到内核加载地址,并不涉及硬盘的MBR,MBR可能与GRUB有关</font>)。将系统的控制权交由mbr来执行。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字 节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
在Linux下使用dd命令获得MBR
root@llc-loongson:~# fdisk -l
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe467e467
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3901 31334751 c W95 FAT32 (LBA)
/dev/sda2 3902 9125 41961780 7 HPFS/NTFS
/dev/sda3 9126 17001 63263970 7 HPFS/NTFS
/dev/sda4 17002 19458 19729409 5 Extended
/dev/sda5 17002 19215 17776640 83 Linux
/dev/sda6 19215 19458 1951744 82 Linux swap / Solaris
root@llc-loongson:~# dd if=/dev/sda of=./MBR count=1 bs=512
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000296544 秒,1.7 MB/秒
然后使用vim查看MBR
root@llc-loongson:~# vim MBR
在vim中使用底行模式
:%!xxd查看二进制
由于前446字节为引导程序,从1BEH开始为DPT(分区表)
00001b0: cd10 ac3c 0075 f4c3 67e4 67e4 0000 8001 …<.u..g.g…..
00001c0: 0100 0cfe ffff 3f00 0000 be42 bc03 0000 ……?….B….
00001d0: c1ff 07fe ffff fd42 bc03 6892 0005 0000 …….B..h…..
00001e0: c1ff 07fe ffff 65d5 bc08 c4a9 8a07 00fe ……e………
00001f0: ffff 05fe ffff fe7f 4710 0218 5a02 55aa ……..G…Z.U.
字节位移
字段长度
值
字段名和定义
0x01BE
BYTE
0x80
引导指示符(Boot Indicator) 指明该分区是否是活动分区。(0x80表示活动,0x00表示非活动)
0x01BF
BYTE
0x01
开始磁头(Starting Head)
0x01C0
6位
0x01
开始扇区(Starting Sector) 只用了0~5位。后面的两位(第6位和第7位)被开始柱面字段所使用
0x01C1
10位
0x00
开始柱面(Starting Cylinder) 除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023
0x01C2
BYTE
0x0c
系统ID(System ID) 定义了分区的类型,详细定义,请参阅图4
0x01C3
BYTE
0xFE
结束磁头(Ending Head)
0x01C4
6位
0xFF
结束扇区(Ending Sector) 只使用了0~5位。最后两位(第6、7位)被结束柱面字段所使用
0x01C5
10位
0x1FF
结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。结束柱面是一个10位的数,最大值为1023
0x01C6
DWORD
0x0000003F 相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算
0x01CA
DWORD
0x03BC42B