ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

30GB老机装Windows Linux双系统:分区与GRUB引导配置指南

30GB老机装Windows Linux双系统:分区与GRUB引导配置指南

简介:面向希望在 Windows XP 基础上并行体验 Linux 的桌面用户与入门学习者,内容围绕 Red Hat Linux 9.0 与 XP 搭建双系统展开,涉及用分区魔术师无损腾出空间、把自由空间从 Windows 扩展分区中剥离、GRUB 引导装载器配置与启动选单管理等实际问题,适合具备基本硬盘分区概念的初中级读者对照操作。整份资料为 1 个 docx 文档,压缩包约 421KB,单文件即完整图文说明,含分区工具界面示意与 Disk Druid 手工分区步骤截图,便于边看边执行。已有 340 人学习下载。文档讲清双硬盘、GRUB 接管、ntldr 引导、启动盘引导四类方案各自取舍,并拆解 /boot、swap 与根分区的划分及容量建议,还给出修改默认启动项、手工添加系统条目等配置细节,以及自由空间未脱离扩展分区导致 Windows 变慢等故障成因。

1. 一台 30GB 老机器上的双系统:先想清楚引导权归谁

一台 30GB 硬盘的老机器,C 盘装 XP 办公,E 盘还剩 7GB,想把 Linux 塞进去又不想动 XP——这是很多人第一次接触“双系统 windows linux”时的真实起点。这件事的难点不在安装本身,而在三件事的配合:分区要把空间从 Windows 扩展分区里剥出来,Linux 要按挂载点重新组织磁盘,引导管理器要决定开机菜单归谁管。适合手里有老机器或虚拟机、需要保留 XP 环境、又想低成本把 Linux 跑起来的人。下面按“先分区、再安装、最后处理引导”的顺序拆一遍,每一步都给出可复现的参数和失败时该看哪里。

2. 分区先行:从 Windows 扩展分区里抠出 7GB 自由空间

2.1 为什么 Linux 不能直接住在 Windows 分区里

Windows 用的是 FAT32 或 NTFS,Linux 常用 ext3 和 swap,文件系统不是一回事。Linux 安装程序不会把文件解压到 NTFS 目录里,它需要独立的分区,再把分区挂到/、/boot这些挂载点上。更麻烦的是分区表结构:Windows 的 C、D、E 三个盘,通常 C 是主分区,D 和 E 是扩展分区里的逻辑分区。扩展分区像一条链,逻辑分区挂在链上,Linux 内核对这种链式分区的识别和 Windows 不完全一致。

很多教程只说到“缩小 E 盘”,但缩出来的空间仍然挂在扩展分区下面。此时 Linux 安装程序看到的是一块“扩展分区里的自由空间”,装进去以后,引导记录、分区编号、内核参数都容易对不上。常见表现是装完 Linux 后 Windows 启动变慢,或者 GRUB 能起来但进 XP 时卡住。根因不是 Linux 抢资源,而是分区归属没理清。

我一般会先把目标定死:从 E 盘的 7GB 可用空间里切 7GB 出来,并且让这块空间脱离 Windows 扩展分区,变成主分区表里的自由空间。只有走到这一步,后面的 Disk Druid 才能把它当成一块干净的领地。

2.2 用无损分区工具把 E 盘的可用空间拖出来

操作顺序不复杂,关键是第二步不能漏。下面按界面路径走一遍,工具以经典的分区魔术师为例。

步骤界面位置操作注意
1主窗口右侧详细窗格单击分区 E 选中它确认选的是 E,不是整个扩展分区
2左侧任务列表单击“调整一个分区的容量”弹出“调整容量/移动分区”对话框
3对话框顶部条状图拖拽右侧绿色条,把 E 盘缩到只剩已用空间绿色条代表可用空间,别拖过黑色已用部分
4对话框单击“确定”回到主界面此时多出一块自由空间,但还在扩展分区里
5主界面单击扩展分区选中它这一步是原文反复强调的关键
6左侧任务列表再次调整容量,把刚空出来的 7GB 划出扩展分区划出后自由空间应显示在扩展分区之外

第 3 步拖绿色条时,界面会实时显示调整后的容量。E 盘原有 16.6GB,已用约 9.6GB,可用约 7GB,所以最小容量就是已用空间,再小就会破坏数据。拖到目标值后先别急着点“应用”,回到主界面确认自由空间的位置。如果它仍然缩在扩展分区下面,说明第 5、6 步没做,后面安装一定会出问题。

第 6 步完成后,主界面上的自由空间应该和扩展分区平级,而不是挂在扩展分区内部。这个视觉差异很小,但决定了 Linux 分区能不能被正常识别。操作前把重要数据备份到外置盘,分区工具再稳,也不给意外留机会。

2.3 分区后的验证清单与扇区号记录

调整完分区,先别急着插安装盘。做四件事,能省掉后面一半的排错时间。

第一,确认 XP 还能正常启动。分区工具调整的是分区表,如果 XP 起不来,先修 XP,别继续装 Linux。第二,确认自由空间不在扩展分区下面。在主界面点中那块自由空间,看它的父级关系,应该是独立的。第三,记录 Linux/boot分区的起始物理扇区号,后面用 Dskprobe 备份引导扇区时要填这个数。第四,确认 C 盘根目录可写,后面要放bootsect.rh和改boot.ini。

检查项怎么看不通过怎么办
XP 能否启动重启一次,正常进桌面先用 XP 安装盘修复引导,再继续
自由空间是否独立主界面看它是否与扩展分区平级回到 2.2 第 5、6 步重新划出
/boot起始扇区号右键/boot分区看属性里的 First physical sector记下来,Dskprobe 要用十进制
C 盘根目录可写在 C 盘新建一个临时文件检查权限和磁盘空间

扇区号这一步很多人会跳过,等到 Windows 下要备份引导扇区时又回头找。我习惯在分区工具里直接抄下来,写在便签上,后面填 Dskprobe 的 Starting Sector 时直接照抄,避免手抖输错一位。

3. 安装盘启动与 Disk Druid 分区:/boot、swap、/ 怎么摆

3.1 BIOS 光盘引导与定制安装类型

把第一张 Linux 安装盘放进光驱,重启,进 BIOS 把光驱调到硬盘前面。保存退出后,屏幕出现安装欢迎界面,直接按回车进图形安装。第一步选语言,选简体中文;接着是鼠标和键盘配置,一般自动检测,不对再手动改。这些屏幕不用纠结,真正要盯的是后面的磁盘和分区。

安装类型有五个选项:个人桌面、工作站、服务器、定制、升级现存系统。这里选“定制”。个人桌面会替你决定装哪些包,工作站和服务器会按预设角色裁剪,定制给的是最大控制权——分区自己划、引导自己配、软件包自己选。对于双系统场景,控制权比省事重要,因为你要确保安装程序不去碰 Windows 分区。

选完定制,安装程序会问分区方式。不要选“自动分区”,自动分区可能把整块盘重新规划,XP 就没了。选“用 Disk Druid 手工分区”,接下来的页面会列出当前磁盘的所有分区和自由空间。如果这里看不到那 7GB 自由空间,或者它仍然显示在扩展分区下面,退回第 2 章重新处理分区,不要在安装程序里硬来。

3.2 安装程序里必须盯住的磁盘识别屏幕

Disk Druid 打开后,先看磁盘设备名。单硬盘通常是/dev/hda,下面列出 hda1、hda2 这些分区。Windows 的 C 盘可能是 hda1,扩展分区是 hda2,逻辑分区从 hda5 开始编号。这个编号不是随便给的,后面dd命令的if=参数、GRUB 的root参数都要对上。

屏幕/区域要看什么异常处理
磁盘列表是否只有一块 hda,容量是否 30GB 左右多出磁盘先确认是不是读卡器或第二块盘
分区列表Windows 分区是否都在,类型显示为 ntfs 或 fat32分区缺失先退出,回 Windows 检查分区表
自由空间是否有约 7GB 的 free space,且不在扩展分区下看不到就回第 2 章重做剥离
设备编号记下/boot将要落在 hda 几后面 dd 和 grub.conf 都要用

这一步最容易翻车的是“自由空间还在扩展分区里”。Disk Druid 可能能显示它,也能在上面建分区,但装完后 Windows 会变慢,或者 GRUB 引导时找不到根分区。判断方法很简单:看自由空间的父级是不是 extended。如果是,退出安装,回 Windows 用分区工具重新剥离。

另一个细节是分区编号。如果你把/boot建成 hda5,dd的if就是/dev/hda5;如果建成 hda6,就是/dev/hda6。编号错一位,备份出来的就不是引导扇区,后面 boot.ini 指向的文件也没用。我一般会在 Disk Druid 里建完分区后,把编号抄在纸上,安装完再核对一遍。

3.3 在 7GB 自由空间上创建 /boot、swap、/

选中那块自由空间,点“新建”,弹出添加分区对话框。初学者分三个分区就够用:/boot、swap、/。下面这张表是 128MB 内存、7GB 空间的配置,参数可以直接照抄,容量按实际自由空间微调。

挂载点文件系统容量用途
/bootext3100MB放内核和引导文件,独立出来方便引导和备份
无(swap)swap256MB交换分区,类似 XP 的页面文件,不挂载到目录树
/ext3剩余约 6.6GB根分区,至少 1.5GB,剩余空间全给它但留一点余量

先建/boot。在“挂载点”填/boot,文件系统选 ext3,容量填 100MB,确定。然后建 swap:文件系统选 swap,挂载点留空,容量填 256MB。128MB 内存给 256MB 交换分区是常见做法,内存大可以按 1 到 2 倍给,但老机器不用太大。最后建根分区:挂载点填/,文件系统 ext3,容量把剩余空间填进去,但别把最后一点空间吃干净,留几十 MB 余量,否则安装程序可能报空间不足。

这里解释两个概念。挂载点是 Linux 目录树上的位置,分区必须挂到某个目录才能被访问,不像 Windows 给盘符。/是目录树的根,必须存在;/boot单独分出来,是为了内核文件和引导记录不被根分区的变动影响。swap 没有挂载点,它不出现在目录树里,只作为内存的延伸。

文件系统选 ext3 的理由是当时的安装程序默认支持、带日志、出问题恢复快。如果安装程序只给 ext2,也能用,但异常断电后检查时间会长一些。不要选 Windows 的 vfat 给根分区,Linux 的权限和符号链接在 vfat 上跑不起来。

3.4 分区表回看与三个常见误操作

建完三个分区,别急着点下一步。在 Disk Druid 主界面回看一遍:Windows 的 hda1 还在不在,类型有没有被改;/boot是不是独立分区,编号是几;swap 的文件系统是不是 swap;/的容量是不是还剩余量。确认无误再继续。

常见误操作有三个。第一,把/boot建成主分区,导致主分区表用完,后面想再加分区没位置。老机器的主分区表只有四项,Windows 已经占了 C 和扩展分区,剩下两项要省着用。/boot可以建在主分区,也可以建在逻辑分区,但编号会不同,dd 时要对应。第二,给 swap 填了挂载点,安装程序会报错或把它当普通分区格式化,swap 不需要挂载点。第三,根分区把自由空间全部吃满,安装程序解压软件包时空间不够,报一个很模糊的错误。留 100MB 到 200MB 余量,老硬盘不差这一点。

分区确认后,安装程序会问引导管理器配置。这一步先别急着往下走,下一章专门处理 GRUB 和 ntldr 的取舍。

4. 引导管理器:GRUB 装 MBR 还是用 ntldr 接管的取舍

4.1 两条路线的边界与选择

双系统的引导有两条主路线。第一条,把 GRUB 装在主引导记录 MBR 上,开机先出 GRUB 菜单,菜单里列 Windows 和 Linux。第二条,GRUB 不占 MBR,只把 Linux 的引导扇区备份成文件,挂到 Windows 的boot.ini里,开机先出 XP 的启动菜单,选 Linux 再跳过去。

路线引导流程优点代价
GRUB 装 MBR开机 → GRUB 菜单 → 选 XP 或 Linux配置简单,GRUB 能自动识别多数系统重装 XP 会覆盖 MBR,需要重装 GRUB
GRUB 装分区 + ntldr开机 → XP 启动菜单 → 选 Linux 跳转删除 Linux 方便,符合 Windows 使用习惯要备份引导扇区,改 boot.ini,步骤多

如果这台机器长期用、Linux 只是学习环境,我倾向 GRUB 装 MBR,省事,菜单也直观。如果 Linux 是临时装的、以后可能删掉,或者使用者只熟悉 XP 的启动菜单,走 ntldr 路线更稳。两条路线不冲突,可以先用 GRUB 装 MBR,之后再把引导扇区备份出来挂到 boot.ini,但一开始就选定一条,别中途混着改。

原文还提到双硬盘方案:Linux 装第二块盘,GRUB 装第二块盘的主引导扇区,开机在 BIOS 里选从哪块盘启动。这个方案适合有两块硬盘的用户,隔离性好,但老机器不一定有第二块盘,这里不展开。

4.2 安装时配置 GRUB 默认项与菜单标签

选 GRUB 装 MBR 的话,安装程序会出现引导装载器配置页面。列表里通常有两个选项:一个被识别成 DOS,一个是你刚装的 Linux。DOS 其实就是 XP,因为 GRUB 的检测逻辑把 NT 系归到 DOS 类。这里可以做三件事。

第一,改默认启动系统。默认是 Linux,如果你更常用 XP,勾选 XP 前面的“默认”复选框。第二,改菜单标签。选中 DOS 那一项,点“编辑”,把标签改成“Windows XP”,开机菜单看起来清楚。第三,添加没识别出来的系统。如果列表里只有 Linux,没有 XP,点“添加”,标签填 Windows XP,设备选 XP 系统分区所在位置,类型选 DOS 或相应项。

安装完成后,这些配置落在/boot/grub/grub.conf,有的版本用menu.lst。改这个文件也能达到同样效果。下面是一个片段示例,分区编号要按实际改。

# /boot/grub/grub.conf 片段:默认第二项,十秒超时 default=1 timeout=10 title Windows XP rootnoverify (hd0,0) chainloader +1 title Linux 9.0 root (hd0,5) kernel /vmlinuz-2.4 ro root=/dev/hda7 initrd /initrd-2.4.img

default=1表示默认启动菜单里的第二项,GRUB 菜单从 0 开始数,第一项是 0,第二项是 1。timeout=10是等待十秒,不操作就进默认项。rootnoverify (hd0,0)指向第一块硬盘的第一个分区,chainloader +1表示把引导权交给那个分区的引导记录,这是引导 XP 的常见写法。Linux 项的root (hd0,5)和kernel后的root=/dev/hda7要按你实际的分区编号改,写错就进不了系统。改完保存,重启看菜单是否生效。

4.3 用 dd 备份 Linux 引导扇区并挂到 boot.ini

走 ntldr 路线,核心是把 Linux 分区的引导扇区读成一个 512 字节的文件,放到 C 盘根目录,再在boot.ini里加一行指向它。假设/boot分区是/dev/hda6,在 Linux 下打开终端执行:

# 把 /boot 所在分区的引导扇区读出来,存成 512 字节的文件 dd bs=512 count=1 if=/dev/hda6 of=bootsect.rh # 确认文件大小,应该是 512 字节 ls -l bootsect.rh

bs=512表示一次读写一个扇区,也就是 512 字节;count=1表示只读一个扇区;if=/dev/hda6是输入设备,必须指向/boot所在分区,不是整块硬盘;of=bootsect.rh是输出文件名。执行完用ls -l看大小,512 字节才对。如果文件明显大于 512 字节,说明if指到了整盘/dev/hda,或者count写错了,备份出来的不是引导扇区,后面 boot.ini 指向它也没用。

把bootsect.rh拷到 C 盘根目录。然后改boot.ini:先去属性里去掉“只读”和“系统”,用记事本打开,在[operating systems]段加一行。

[boot loader] timeout=10 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP" /fastdetect C:\bootsect.rh="Linux 9.0"

C:\bootsect.rh是备份文件在 C 盘根目录的路径,等号后面是开机菜单显示的文字。改完保存,把boot.ini和bootsect.rh的属性设回只读、隐藏、系统,避免误删误改。重启后应该先出 XP 的启动菜单,多出一项 Linux 9.0,选它就能跳进 Linux。

如果先装了 XP 再装 Linux,安装时一定要把 GRUB 装在分区而不是 MBR,否则 XP 的引导会被覆盖,boot.ini路线也走不通。装 Linux 时还要做一张启动盘,万一引导配置写错,还能用启动盘进系统修。

4.4 在 Windows 下用 Dskprobe 抓引导扇区

不想进 Linux 敲命令,也可以在 Windows 下抓引导扇区。分两步:先找/boot分区的起始物理扇区号,再用 Dskprobe 读那个扇区。

找扇区号用分区魔术师。右键/boot分区,选属性,切到 Partition Info 标签,找 First physical sector,记下十进制数值,比如 53014500。这个数就是 Dskprobe 的 Starting Sector。

Dskprobe 在 Windows 安装光盘的/SUPPORT/TOOLS目录下,SUPPORT.cab压缩包里。先关掉分区魔术师,再启动 Dskprobe,否则磁盘句柄被占用,读不到物理盘。

步骤菜单/按钮填什么注意
1Drives → Physical Drive选 PhysicalDrive0单硬盘只有这一项
2对话框双击物理盘,点 Set Active,再点 OK不点 Set Active 读不了
3Sectors → ReadStarting Sector 填刚才记的十进制扇区号别填十六进制
4Sectors → ReadNumber of 填 1只读一个扇区
5File → Save As保存到 C 盘根目录,文件名 bootsect.rh保存后确认大小 512 字节

读出来的界面会显示一串十六进制内容,这就是/boot分区的引导扇区。保存后,在boot.ini里加C:\bootsect.rh="Linux 9.0",步骤和 4.3 一样。Dskprobe 的优点是全程在 Windows 下操作,不用进 Linux;缺点是扇区号必须抄对,填错一位读出来的就是别的分区,引导文件自然不能用。

5. 避坑与排查:Windows 变慢、菜单丢失、引导文件不对

5.1 装完 Linux 后 Windows 奇慢

现象:装完双系统,进 XP 后开机慢、打开文件夹卡、磁盘灯长亮。很多人第一反应是 Linux 占了资源,其实不是。

原因:Linux 分区仍然落在 Windows 扩展分区里。扩展分区的逻辑分区链被 Linux 分区插了一脚,XP 启动时枚举磁盘的方式和以前不一样,容易反复读分区表,表现就是慢。原文专门点过这个坑,但很多人分区时只缩了 E 盘,忘了把自由空间从扩展分区里剥离。

解决:回 Windows,用分区工具确认 Linux 分区是否在扩展分区下。如果是,先备份 Linux 里的数据,删除 Linux 分区,把自由空间划出扩展分区,再重建 Linux 分区重装。已经装好的系统也可以不重装,用分区工具把扩展分区边界调整一下,但操作风险高,老机器上我宁愿重装一遍,省得提心吊胆。

5.2 重启直接进 Linux,XP 菜单不见了

现象:GRUB 装完重启,直接进 Linux,或者菜单里只有 Linux,没有 Windows XP。

原因:GRUB 没检测到 XP 分区,或者grub.conf里的 Windows 项被删了。另一种可能是 XP 装在扩展分区的逻辑分区里,GRUB 的自动探测没认出来。

解决:进 Linux,打开/boot/grub/grub.conf,手动加一段 Windows 启动项。rootnoverify (hd0,0)里的(hd0,0)要按 XP 系统分区实际位置改,第一块硬盘第一个分区是 0,第二个分区是 1。加完保存,重启看菜单。如果加了还是进不去,检查 XP 分区是不是主分区,chainloader +1对逻辑分区的支持有时不灵,可以试rootnoverify (hd0,1)配合chainloader +1,逐个试。

5.3 boot.ini 加了项却报错或没反应

现象:boot.ini里加了C:\bootsect.rh="Linux 9.0",重启菜单里也出现了这一项,但选中后黑屏、报错,或者又跳回 XP 菜单。

原因:三种常见情况。第一,bootsect.rh不是 512 字节,dd 的if指错了分区。第二,boot.ini里的路径写错,用了C:/bootsect.rh这种正斜杠,或者文件不在 C 盘根目录。第三,改完boot.ini没恢复属性,或者文件编码不对,XP 读不到这一行。

解决:先用ls -l或文件属性确认bootsect.rh是 512 字节;再确认文件在C:\根目录,不是某个文件夹里;boot.ini里用反斜杠C:\bootsect.rh;改完把只读、隐藏、系统属性设回去。如果还不行,用 XP 安装盘的恢复控制台跑一次bootcfg /rebuild,让 XP 重新生成启动菜单,再把 Linux 项加回去。

5.4 dd 出来的 bootsect.rh 不是 512 字节

现象:执行完 dd,ls -l看到bootsect.rh是 512 字节的整数倍但明显偏大,比如 1024、4096,或者大小对但引导不了。

原因:if=指向了整块硬盘/dev/hda,而不是/boot分区/dev/hda6。整盘第一个扇区是 MBR,里面是分区表和 GRUB 第一阶段,不是 Linux 分区的引导扇区。另一个原因是count写成了大于 1 的数,读了好几个扇区。

解决:确认/boot分区的设备编号。在 Linux 下用df -h看/boot挂载在哪个设备,或者用fdisk -l看分区列表。把if=改成对应分区,bs=512 count=1保持不变,重新 dd。执行前先删掉旧的bootsect.rh,避免覆盖不彻底。备份出来的文件拷到 C 盘前,再核对一次大小。

5.5 删除 Linux 后开机进 grub>

现象:不想用 Linux 了,直接把 Linux 分区删掉,重启出现grub>提示符,XP 也进不去。

原因:GRUB 装在 MBR 上,Linux 分区一删,GRUB 的配置文件和第二阶段的文件都没了,MBR 里的 GRUB 代码找不到后续,就停在命令行。此时 XP 的引导记录还在,只是被 GRUB 挡在前面。

解决:用 XP 安装盘启动,进恢复控制台,执行fixmbr和fixboot,把 MBR 和 XP 分区引导记录恢复成 NT 的。执行前确认 XP 系统分区没被误删。如果之前走的是 ntldr 路线,GRUB 没占 MBR,删 Linux 分区后只需把boot.ini里那一行删掉,再把bootsect.rh删掉,重启就不会有 Linux 菜单了。这也是 ntldr 路线的一个实际好处:删除干净,不留尾巴。

6. 装完先别装软件:三次重启验证与一份后悔药

双系统装完,很多人急着装开发工具、配环境,结果用了几天才发现某个系统进不去。我的习惯是先在引导层面做三次重启验证,再动软件。

第一次重启,选 Windows XP,进桌面后看设备管理器有没有异常,磁盘管理里分区表是否正常,关机再开。第二次重启,选 Linux,进系统后看/boot挂载、根分区读写、交换分区是否启用,用df -h和free各看一遍。第三次重启,把安装光盘和启动盘都拔掉,确认不依赖外部介质也能出菜单、进系统。三次都过,再开始装软件。

验证时可以顺手做一份“后悔药”:备份 MBR 和分区表。在 Linux 下执行:

# 备份整盘第一个扇区,含 MBR 和分区表,共 512 字节 dd if=/dev/hda of=mbr.bak bs=512 count=1 # 查看备份文件大小 ls -l mbr.bak

if=/dev/hda是整块硬盘,of=mbr.bak是备份文件名,bs=512 count=1只读第一个扇区。这个文件不要放在要删的分区里,拷到 U 盘或另一块盘。恢复 MBR 的命令是dd if=mbr.bak of=/dev/hda bs=512 count=1,但恢复比重装风险高,执行前确认备份文件是对的,最好在虚拟机里先练一遍。

验证项操作通过标准
XP 启动重启选 Windows XP进桌面,磁盘管理无异常
Linux 启动重启选 Linux进系统,df -h能看到/和/boot
无介质启动拔掉光盘和启动盘再重启菜单正常出现,两个系统都能进
引导备份dd备份 MBR 和bootsect.rh文件各 512 字节,存放在安全位置

从那以后我每次动分区表之前,都先用dd把 MBR 和 Linux 引导扇区各备一份,再拿一张启动盘当后悔药。老机器上装双系统,安装本身只要半小时,真正花时间的是分区归属和引导配置这两步。把这两步的参数记下来,下次换机器也能照着走。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进