1.
sun@ubuntu:/tmp$ sudo dd if=/dev/sdb1 of=dbr bs=512 count=2
http://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E8%AE%B0%E5%BD%95
一、利用磁盘镜像测试fat32
1.1 步骤如下:
1.2 查看DBR
1.3 查看 FSINFO
//装入第一个FAT表扇区号到FirstFATSector 中
arg->FirstFATSector=lb2bb((bpb->BPB_RsvdSecCnt) ,2)+arg->BPB_Sector_No;
0 reserved--> 0x4000 FAT1 -->0x104000FAT2 -->0x204000 root_dir --->
未写入任何东东之前的分区表 0x4000开始
1025 0004000: f8ff ff0f ffff ff0f f8ff ff0f 0000 0000 ................
1026 0004010: 0000 0000 0000 0000 0000 0000 0000 0000
加入文件之后:
1025 0004000: f8ff ff0f ffff ff0f f8ff ff0f ffff ff0f ................
1026 0004010: 0000 0000 0000 0000 0000 0000 0000 0000
//第3个簇变成 ffff ff0f, 只占用了一个簇
数据区的开始: 023b000
sun@ubuntu:/tmp$ sudo dd if=/dev/sdb1 of=dbr bs=512 count=2
偏移 | 长度(字节) | 意义 |
---|---|---|
00H | 1 | 分区状态:00-->非活动分区;80--> 活动分区; 其它数值没有意义 |
01H | 1 | 分区起始磁头号(HEAD),用到全部8位 |
02H | 2 | 分区起始扇区号(SECTOR),占据02H的位0-5; 该分区的起始磁柱号(CYLINDER),占据 02H的位6-7和03H的全部8位 |
04H | 1 | 文件系统标志位 |
05H | 1 | 分区结束磁头号(HEAD),用到全部8位 |
06H | 2 | 分区结束扇区号(SECTOR),占据06H的位0-5; 该分区的结束磁柱号(CYLINDER),占据 06H的位6-7和07H的全部8位 |
08H | 4 | 分区起始相对扇区号 |
0CH | 4 | 分区总的扇区数 |
- 第一个分区是VFAT
- [00] --> 00
- [01] --> 0x21起始磁头号
- [02-03] --> 0x0003
- [04] --> 0x83
- [05] --> 0xcb
- [06-07] --> 0x022a=554
- [08] --> 0x0800=2048 --> 起始扇区号
- [0C] --> 0xa000=40960 --> 分区总的扇区数 (40960*512/1024/1024=20M 正确)
-
- 第二个分区是EXT3
- [00] --> 00
- [01] --> 0x21起始磁头号
- [02-03] --> 0x0
- [04] --> 0x83
- [05] --> 0xcb
- [06-07] --> 0x022a=554
- [08] --> 0x0800=2048 --> 起始扇区号
- [0C] --> 0xa000=40960 --> 分区总的扇区数 (40960*512/1024/1024=20M 正确)
1.1 步骤如下:
- //创建一个1024M的文件
- sun@ubuntu:/work/6410/test/fat32$ dd if=/dev/zero of=fatimg bs=1M count=1024
-
- //分区
- sun@ubuntu:/work/6410/test/fat32$ sudo fdisk ./fatimg
- //查看分区
- sun@ubuntu:/work/6410/test/fat32$ sudo fdisk -l ./fatimg
-
- Disk ./fatimg: 1073 MB, 1073741824 bytes
- 139 heads, 8 sectors/track, 1885 cylinders, total 2097152 sectors
- Units = sectors of 1 * 512 = 512 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disk identifier: 0xe79e9e10
-
- Device Boot Start End Blocks Id System
- ./fatimg1 2048 2097151 1047552 83 Linux
-
- //将镜像与loop设备关联
- sun@ubuntu:/work/6410/test/fat32$ sudo losetup -o 1048576 /dev/loop0 fatimg
- 注意: losetup 中的-o是跳过多少个字节: 1048576=2048*512 (2048是从fdisk中看出)
-
- //格式化
- sun@ubuntu:/work/6410/test/fat32$ sudo mkfs.vfat /dev/loop0
-
- //查看fat32分区表
- sun@ubuntu:/work/6410/test/fat32$ sudo dd if=/dev/loop0 of=fat bs=512 count=5000
-
- //挂载
- sun@ubuntu:/work/6410/test/fat32$ sudo mount /dev/loop0 /mnt/test
- 【1】0x00~0x02:3B, 跳转指令
- 【2】0x03~0x0A:8B, 文件系统标志和版本号,这里为 mkdosfs
- 【3】0x0B~0x0C:2B, 每扇区字节数,(02 00)=512B
- 【4】0x0D~0x0D:1B, 每簇扇区数,8(08)
- 【5】0x0E~0x0F:2B, 保留扇区数,(2000)32个扇区=0x4000
- 【6】0x10~0x10:1B, FAT 表个数,2
- 【7】0x11~0x12:2B, 根目录最多可容纳的目录项数,FAT12/16(为512), FAT32不使用此处值,置 0
- 【8】0x13~0x14:2B, 扇区总数,小于32MB 时使用,超过 32MB 时使用0x20~0x23处的4字节
- 【9】0x15~0x15:1B, 介质描述符,0xF8 表示本地硬盘
- 【10】0x16~0x17:2B, 每个 FAT 表的大小扇区数(FAT12/16 使用,FAT32 不使用此处,置 0)
- 【11】0x18~0x19:2B, 每磁道扇区数,(2000)=32个
- 【12】0x1A~0x1B:2B, 磁头数, (4000)=64个
- 【13】0x1C~0x1F:4B, 分区前已使用扇区数, (00000 000)=0个
- 【14】0x20~0x23:4B, 文件系统大小扇区数, (00f8 1f00)=1ff800=1023M
- 【15】0x24~0x27:4B, 每个 FAT 表的大小扇区数, (0008 0000)=0800=2048*512=0x100000
- 【16】0x28~0x29:2B, 标记
- 【17】0x2A~0x2B:2B, 版本号
- 【18】0x2C~0x2F:4B, 根目录簇号,(0200 0000)=2
- 【19】0x30~0x31:2B, FSINFO(文件系统信息扇区)扇区号,1, 该扇区为操作系统提供关于空簇总数及下一可用簇的信息
- 【20】0x32~0x33:2B, 备份引导扇区的位置,6备份引导扇区总是位于文件系统的 6 号扇区
- 【21】0x34~0x3F:12B, 未使用
- 【22】0x40~0x40:1B, BIOS INT 13H 设备号,0x80
- 【23】0x41~0x41:1B, 未用
- 【24】0x42~0x42:1B, 扩展引导标志0x29
- 【25】0x43~0x46:1B, 卷序列号通常为一个随机值
- 【26】0x47~0x51:11B, 卷标(ASCII 码),如果建立文件系统的时候指定了卷标,会保存在此
- 【27】0x52~0x59:8B, 文件系统格式的 ASCII 码,FAT32
- 【28】0x5A~0x1FD:410B, 未使用该部分没有明确的用途
- 【29】0x1FE~0x1FF:签名标志“55 AA”
- 【1】0x200~0x203: 4B, 扩展引导标志“52526141”
- 【2】0x204~0x3E3:480B, 未使用,全部置 0
- 【3】0x3E4~0x3E7: 4B, FSINFO 签名“72724161”
- 【4】0x3E8~0x3EB: 4B, 文件系统的空簇数, (fafc)=0300
- 【5】0x3EC~0x3EF: 4B, 下一可用簇号,(0300 0000)=3,第3个簇开始
- 【6】0x3F0~0x3FD: 14B, 未使用
- 【7】0x3FE~0x3FF: 2B, “55 AA”标志
//装入第一个FAT表扇区号到FirstFATSector 中
arg->FirstFATSector=lb2bb((bpb->BPB_RsvdSecCnt) ,2)+arg->BPB_Sector_No;
0 reserved--> 0x4000 FAT1 -->0x104000FAT2 -->0x204000 root_dir --->
未写入任何东东之前的分区表 0x4000开始
1025 0004000: f8ff ff0f ffff ff0f f8ff ff0f 0000 0000 ................
1026 0004010: 0000 0000 0000 0000 0000 0000 0000 0000
加入文件之后:
1025 0004000: f8ff ff0f ffff ff0f f8ff ff0f ffff ff0f ................
1026 0004010: 0000 0000 0000 0000 0000 0000 0000 0000
//第3个簇变成 ffff ff0f, 只占用了一个簇
数据区的开始: 023b000