创建磁盘镜像
使用 bochs 自带的 bximage 工具创建磁盘:
按提示依次输入:1 → hd → flat → 80 → hd80M.img
在 bochsrc.disk 中配置:
ata0-slave: …
创建磁盘镜像
使用 bochs 自带的 bximage 工具创建磁盘:
按提示依次输入:1 → hd → flat → 80 → hd80M.img
在 bochsrc.disk 中配置:
ata0-slave: type=disk, path="hd80M.img", mode=flat, cylinders=162, heads=16, spt=63
这样 bochs 虚拟机启动时就会识别并自动挂载这个磁盘。
分区操作
使用 fdisk 工具对磁盘进行分区:
分区类型
| 类型 | 说明 |
|---|
| 主分区 | 最多 4 个,可直接存储数据 |
| 扩展分区 | 最多 1 个,作为逻辑分区的容器 |
| 逻辑分区 | 在扩展分区内创建,突破 4 个分区限制 |
分区的本质,就是将多个连续的柱面划分为一个区域。最初磁盘只支持最多分 4 个区。后来由于需求增加,磁盘需要支持能分更多区,同时又为了能够兼容旧有的最多支持 4 个分区,就发明了扩展分区。扩展分区并不直接用于存储数据,而是作为一个容器,可以在其中创建多个逻辑分区。一个磁盘,最多一个扩展分区。
CHS 与扇区计算
磁盘参数 CHS = Cylinders(柱面)/ Heads(磁头)/ Sectors(每磁道扇区数)。
创建 hd80M.img 时会提示 Creating hard disk image 'hd80M.img' with CHS=162/16/63,意思是柱面 162 个,磁头 16 个,每个磁道 63 个扇区。
扇区号计算公式:结束扇区 = (结束柱面 + 1) × 磁头数 × 每道扇区数 - 1(-1 是因为扇区从 0 开始编号)。
fdisk 完整分区流程
fdisk ./hd80M.img 进入交互模式后,依次输入以下内容(输入一个,按一次回车):
m # 显示菜单
x # 使用额外功能
m # 显示菜单
c # 设定柱面
162
h # 设定磁头数
16
r # 返回上一级菜单
# --- 创建主分区 1 ---
n # 新增一个分区
p # 分区是个主分区
1 # 分区号设定为 1
2048 # 起始扇区
33263 # 结束扇区
# --- 创建扩展分区 4 ---
n # 新增一个分区
e # 分区是个扩展分区
4 # 分区号码设定为 4
33264 # 起始扇区 = 分区 1 结束扇区下一个扇区
163295 # 结束扇区 = 整个磁盘最后一个扇区
p # 查看现有分区
# --- 创建逻辑分区 5 ---
n # 创建逻辑分区(磁盘已被两个分区占满,只能建逻辑分区)
35312 # 工具允许的逻辑分区起始最小扇区
51407 # 结束柱面 50,结束扇区 = (50+1)*16*63 - 1
# --- 创建逻辑分区 6 ---
n
53456
76607 # 结束柱面 75,结束扇区 = (75+1)*16*63 - 1
# --- 创建逻辑分区 7 ---
n
78656
91727 # 结束柱面 90,结束扇区 = (90+1)*16*63 - 1
# --- 创建逻辑分区 8 ---
n
93776
121967 # 结束柱面 120,结束扇区 = (120+1)*16*63 - 1
# --- 创建逻辑分区 9 ---
n
124016
163295 # 设定最后一个可用扇区为逻辑分区 9 的结束扇区
p # 显示分区
# --- 修改逻辑分区类型 ID 为 0x66 ---
t # 设定分区类型 id
5 # 改变逻辑分区 5 的类型 id
66 # 设定类型 id 为 0x66
t
6
66
t
7
66
t
8
66
t
9
66
p # 显示分区
w # 将分区表写入磁盘,并退出 fdisk
最后用 fdisk -l hd80M.img 查看分区信息。
关键扇区计算说明
- 主分区 1 起始扇区 2048:作者的 1 分区起始柱面是 1,计算得起始扇区应该是
63 × 16 = 1008。但由于 fdisk 工具指定第一个分区最小起始扇区为 2048,所以只能设定 1 分区起始扇区为 2048。 - 主分区 1 结束扇区 33263:作者指定 1 分区结束柱面为 32,计算得结束扇区为
(32 + 1) × 16 × 63 - 1 = 33263。 - 逻辑分区 5~9 的结束扇区同理,分别对应结束柱面 50、75、90、120,最后一个逻辑分区 9 直接延伸到磁盘末尾。
分区类型 ID
使用 fdisk 的 t 命令修改分区类型 ID,例如 0x66 表示自定义文件系统类型。 收起