本地硬盘安装CentOS需先分区存放ISO,再通过GRUB2配置引导项加载ISO内核与初始化镜像,指定安装源为本地硬盘分区,重启后进入安装界面完成系统部署。

从本地硬盘安装CentOS系统,核心在于巧妙地引导安装程序找到硬盘上的ISO镜像文件。这通常涉及预先在硬盘上划出一个分区存放ISO,然后通过修改启动引导器(如GRUB2)的配置,让系统启动时加载ISO中的内核和初始化内存盘,并指明安装源路径。相比U盘或光盘安装,它确实需要多一点点前期配置的耐心和细致,但一旦掌握,会发现这种方式在特定场景下非常高效且实用。
解决方案
本地硬盘安装CentOS的详细步骤,我个人总结下来,主要分以下几个阶段:
准备工作:下载ISO与硬盘分区 首先,你需要从CentOS官方网站下载你想要安装的CentOS版本ISO镜像文件。我通常会选择Stream版本,因为它更新更快,更贴近RHEL的开发前沿。 接下来,是硬盘分区。你需要一个独立的、足够大的分区来存放这个ISO文件。这个分区可以是现有Linux系统中的一个分区,也可以是你专门为此次安装创建的新分区。我习惯用
ext4
格式,因为它兼容性好,而且稳定性也不错。比如,你可以创建一个/dev/sda4
这样的分区,将其挂载到/mnt/iso
,然后把下载好的ISO文件复制进去。确保这个分区有足够的空间,CentOS的ISO文件通常有好几个GB。-
配置GRUB2引导安装程序 这是整个过程中最关键的一步。我们需要编辑GRUB2的配置文件,添加一个引导项,让它能够启动ISO中的安装程序。 如果你当前系统已经安装了Linux,并且使用GRUB2作为引导器,你可以编辑
/etc/grub.d/40_custom
文件,添加如下内容(请根据你的实际情况修改分区设备名、ISO文件名和分区标签):menuentry 'Install CentOS Stream from Hard Drive' { set isofile="/CentOS-Stream-8-x86_64-latest-boot.iso" # ISO文件名,确保路径正确 set root=(hd0,4) # 假设ISO文件放在/dev/sda4,hd0代表第一块硬盘,4代表第四个分区(从1开始计数) # 或者使用UUID更稳妥:set root=UUID=<你的ISO分区UUID> loopback loop $isofile linux (loop)/images/pxeboot/vmlinuz inst.stage2=hd:LABEL=<你的ISO分区标签> quiet # 替换为你的ISO分区标签 # 如果你的ISO文件放在分区的某个子目录下,比如/iso/CentOS.iso,那么inst.stage2=hd:LABEL=<你的ISO分区标签>:/iso initrd (loop)/images/pxeboot/initrd.img }这里有几个需要注意的点:
set root=(hd0,4)
:hd0
通常指第一块硬盘(/dev/sda
),4
指第四个分区(/dev/sda4
)。GRUB的分区计数是从1开始的,与Linux的sda
后面数字一致。inst.stage2=hd:LABEL=<你的ISO分区标签>
:这一行至关重要,它告诉安装程序去哪个分区找第二阶段的安装文件。我个人更倾向于使用LABEL
或UUID
而不是设备名(如/dev/sda4
),因为设备名在系统启动时可能会变,而标签或UUID则固定不变,这能大大增加引导的稳定性。你可以用sudo blkid
命令查看分区标签和UUID。images/pxeboot/vmlinuz
和images/pxeboot/initrd.img
:这是CentOS ISO中安装程序的核心文件路径,对于CentOS Stream 8/9通常是这个路径。
保存文件后,别忘了更新GRUB配置:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
如果你是UEFI系统,路径可能是/boot/efi/EFI/centos/grub.cfg
,具体请根据你的系统来。 -
启动安装与系统配置 重启计算机,在GRUB菜单中选择你刚刚添加的“Install CentOS Stream from Hard Drive”选项。 如果一切顺利,系统将进入CentOS的图形安装界面。接下来的步骤就和U盘安装大同小异了:
- 选择语言和键盘布局。
-
安装源: 这一步很关键。安装程序通常会自动检测到你通过
inst.stage2
参数指定的本地硬盘作为安装源。如果它没有自动识别,你需要手动选择“本地硬盘”,然后指定你存放ISO文件的分区(比如/dev/sda4
)和ISO文件在分区内的路径(如果ISO直接放在根目录,就留空或/
)。 - 软件选择、分区配置(小心不要覆盖存放ISO的分区!)、网络配置、设置root密码和创建用户。
安装完成与清理 安装完成后,系统会提示你重启。重启后,新安装的CentOS系统就应该能够正常启动了。你可以选择删除GRUB中为本地硬盘安装添加的引导项,也可以删除存放ISO文件的分区,释放空间。
本地硬盘安装CentOS有哪些优势和局限性?
在我看来,本地硬盘安装CentOS这种方式,既有它独特的魅力,也存在一些不容忽视的局限。
优势:
- 无需外部介质: 这是最显而易见的优点。当手头没有U盘、光驱,或者机器本身就没有这些接口时(比如一些老旧的服务器或者虚拟机),本地硬盘安装就成了救命稻草。我曾经在没有物理访问权限的服务器上,通过现有Linux系统远程配置GRUB,然后进行系统重装,效率非常高。
- 安装速度可能更快: 理论上,从本地硬盘读取数据比从USB2.0接口的U盘读取要快得多,尤其是在硬盘本身性能不错的情况下。虽然实际体验可能差异不大,但心理上总觉得更顺畅一些。
- 重复安装便捷: 如果你需要在一台机器上多次安装或测试CentOS,比如进行不同配置的实验,将ISO文件保留在硬盘上,可以省去反复制作启动盘的麻烦。
局限性:
- 配置复杂性高: 相比直接用工具制作启动U盘,本地硬盘安装需要手动配置GRUB引导,理解分区、文件系统、内核参数等概念。这对于新手来说,确实是个不小的门槛。我刚开始尝试时,光是GRUB参数就试了好几种才搞定。
- 操作风险: 涉及到硬盘分区和GRUB配置,一旦操作失误,轻则无法启动安装程序,重则可能导致现有系统无法启动,甚至数据丢失。所以,动手前备份数据是金科玉律。
- 需要现有系统或救援环境: 如果你的硬盘是全新的,或者上面没有任何可用的操作系统来配置GRUB,那么你还是需要一个临时的启动介质(比如一个Live CD/USB)来进入救援模式,手动设置GRUB。这多少有点“脱裤子放屁”的感觉,但有时候就是没办法。
如何为本地硬盘安装CentOS准备引导环境和ISO文件?
准备引导环境和ISO文件是本地硬盘安装成功的基石,可以说,这一步做好了,后面就成功了一大半。
首先,ISO文件的放置。我通常会选择一个独立的分区来存放ISO文件,而不是直接放在某个现有系统的根目录下。这样做的原因有二:一是避免在安装过程中误操作删除;二是在GRUB配置时,指定一个独立分区的LABEL或UUID,会更清晰,也更不容易出错。你可以用
fdisk或
gparted等工具创建一个新的
ext4或
xfs分区,然后挂载它,把CentOS的ISO文件完整地复制进去。记住,不要解压ISO,直接复制整个文件。
其次,GRUB引导环境的配置。这块是技术含量最高的地方。 核心思路是利用GRUB的
loopback功能来模拟光盘。
loopback命令可以让GRUB把一个ISO文件当作一个块设备来处理,然后我们就可以从这个“虚拟设备”中加载内核和initrd。
具体到GRUB配置,我们前面给出的
menuentry模板就是最好的范例。我再强调几个关键点:
-
set isofile="/CentOS-Stream-8-x86_64-latest-boot.iso"
: 确保这个路径是相对于你ISO文件所在分区的根目录而言的。如果你把ISO放在了/mnt/iso/my_isos/CentOS.iso
,那么在GRUB配置中,如果你的ISO分区挂载点是/mnt/iso
,那么set isofile="/my_isos/CentOS.iso"
。 -
set root=(hd0,4)
或set root=UUID=<你的ISO分区UUID>
: 这里的root
变量指定了GRUB去哪个物理分区寻找$isofile
。我强烈建议使用UUID
。你可以通过lsblk -f
或blkid
命令来获取分区的UUID。例如,如果你的ISO分区UUID是a1b2c3d4-e5f6-7890-1234-567890abcdef
,那么就写set root=UUID=a1b2c3d4-e5f6-7890-1234-567890abcdef
。 -
linux (loop)/images/pxeboot/vmlinuz inst.stage2=hd:LABEL=<你的ISO分区标签>
:inst.stage2
参数是告诉CentOS安装程序,去哪里找它的第二阶段安装文件。hd:
表示从硬盘寻找。LABEL=<你的ISO分区标签>
:这是最常用且稳妥的方式,因为分区标签不容易变。确保你为存放ISO的分区设置了一个唯一的标签,比如CENTOS_ISO
。UUID=<你的ISO分区UUID>
:同样非常稳妥,语法是inst.stage2=hd:UUID=<你的ISO分区UUID>
。/dev/sdXN
:也可以用设备名,如inst.stage2=hd:/dev/sda4
,但正如我之前所说,设备名有变动的风险。- 如果ISO文件在分区的子目录下,比如
/my_isos/CentOS.iso
,那么参数应该是inst.stage2=hd:LABEL=<你的ISO分区标签>:/my_isos
。
配置完成后,运行
sudo grub2-mkconfig -o /boot/grub2/grub.cfg更新GRUB配置。这一步是把你的自定义条目整合到主引导菜单中。如果没有这一步,你重启后是看不到新添加的引导项的。
本地硬盘安装CentOS过程中常见的疑难杂症与解决方案
在实际操作中,本地硬盘安装CentOS确实会遇到一些小麻烦,但大多数都有章可循。
1. GRUB菜单中看不到新的引导项,或者选择后无法启动:
- 问题诊断: 最常见的原因是GRUB配置文件没有正确更新。
-
解决方案: 仔细检查你是否运行了
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
(或对应UEFI路径的命令)。此外,检查/etc/grub.d/40_custom
文件中是否有语法错误,比如引号不匹配、路径写错等。有时候,一个简单的手误就能导致整个引导失败。我个人就经常因为少打一个斜杠而抓狂。
2. 安装程序启动后,提示找不到安装源("Error setting up base repository"或类似错误):
-
问题诊断: 这通常意味着
inst.stage2
参数有问题,安装程序没能正确找到ISO文件或其内部的安装文件。 -
解决方案:
-
检查
inst.stage2
参数: 确认你提供的LABEL
或UUID
是否与存放ISO文件的分区完全匹配。大小写、拼写都不能错。 -
ISO文件完整性: 检查ISO文件是否损坏。你可以用
sha256sum
命令计算下载文件的哈希值,然后与官方提供的哈希值进行比对。如果哈希值不一致,那就需要重新下载ISO了。 -
ISO文件路径: 确认ISO文件是否直接放在分区的根目录。如果放在子目录,
inst.stage2
参数需要加上子目录路径,例如`inst.stage2=hd:LABEL=CENTOS_ISO
-
检查










