怎么从硬盘安装CentOS_本地硬盘安装CentOS系统步骤教程

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

怎么从硬盘安装centos_本地硬盘安装centos系统步骤教程

从本地硬盘安装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=    loopback loop $isofile    linux (loop)/images/pxeboot/vmlinuz inst.stage2=hd:LABEL= quiet # 替换为你的ISO分区标签    # 如果你的ISO文件放在分区的某个子目录下,比如/iso/CentOS.iso,那么inst.stage2=hd:LABEL=:/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=

:这一行至关重要,它告诉安装程序去哪个分区找第二阶段的安装文件。我个人更倾向于使用

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文件是本地硬盘安装成功的基石,可以说,这一步做好了,后面就成功了一大半。

帮衣帮-AI服装设计 帮衣帮-AI服装设计

AI服装设计神器,AI生成印花、虚拟试衣、面料替换

帮衣帮-AI服装设计 106 查看详情 帮衣帮-AI服装设计

首先,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=

: 这里的

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=

:

inst.stage2

参数是告诉CentOS安装程序,去哪里找它的第二阶段安装文件。

hd:

表示从硬盘寻找。

LABEL=

:这是最常用且稳妥的方式,因为分区标签不容易变。确保你为存放ISO的分区设置了一个唯一的标签,比如

CENTOS_ISO

UUID=

:同样非常稳妥,语法是

inst.stage2=hd:UUID=

/dev/sdXN

:也可以用设备名,如

inst.stage2=hd:/dev/sda4

,但正如我之前所说,设备名有变动的风险。如果ISO文件在分区的子目录下,比如

/my_isos/CentOS.iso

,那么参数应该是

inst.stage2=hd:LABEL=:/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

以上就是怎么从硬盘安装CentOS_本地硬盘安装CentOS系统步骤教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/585218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 12:54:26
下一篇 2025年11月10日 12:55:30

相关推荐

  • 使用JavaScript File API与Axios模拟大文件上传

    本文介绍如何利用JavaScript的`File()`构造函数与Axios库,在无需真实文件的情况下,高效模拟大文件上传HTTP请求。此方法特别适用于测试文件大小限制、优化CI/CD流程,通过生成虚拟文件数据,实现自动化和无障碍的上传功能测试。 模拟大文件上传的必要性 在Web开发中,文件上传功能是…

    2025年12月20日
    000
  • 深入理解 Ajv 的 URI 格式校验:基于 RFC3986 的行为解析

    ajv 在进行 uri 格式校验时,严格遵循 rfc3986 规范,这可能导致其对某些看似不规范的 uri 字符串(如包含 `.` 和 `=` 的路径)判断为有效,与部分在线工具的校验结果不同。本文将深入探讨 ajv 的 uri 校验机制,并通过示例代码解析其行为,帮助开发者理解并正确使用 ajv …

    2025年12月20日
    000
  • Vue 2 中 await 的正确用法:处理并行请求与获取返回值

    本文深入探讨了 javascript 中 `async/await` 的核心机制,特别是在 vue 2 环境下如何正确获取 `await` 表达式的返回值,以及如何高效地处理多个并行异步请求。文章纠正了一个常见误区:`await promise;` 仅暂停执行,并不会将 promise 的解析值赋回…

    2025年12月20日
    000
  • 解决ExtJS Grid数据加载与显示:从API响应到最佳实践

    本文旨在解决extjs应用中`ext.grid.grid`组件与`ext.data.store`数据加载和显示过程中常见的错误与疑问。我们将深入探讨数据字段匹配、数据自动加载机制,以及store对象的最佳组织方式,并通过实际代码示例提供清晰的解决方案和专业建议,帮助开发者构建健壮的extjs数据展示…

    2025年12月20日
    000
  • JavaScript中访问嵌套JSON数组元素的正确姿势

    在javascript中处理嵌套json数据时,尤其是在解析http请求体时,开发者常会遇到`typeerror: cannot read properties of undefined`错误。这通常是因为将json数组误当作普通对象来访问其属性所致。解决此问题的关键在于准确识别json结构,并对数…

    2025年12月20日
    000
  • Axios中模拟大文件上传请求:无需实际文件操作的测试策略

    本文详细阐述了如何在不实际选择或存储大文件的情况下,利用javascript的`file`构造函数结合axios模拟大文件上传请求。通过创建指定大小和mime类型的虚拟文件对象,开发者可以在开发和ci/cd环境中高效测试文件大小限制和上传逻辑,显著简化测试流程并避免处理大型真实文件的复杂性。 在现代…

    2025年12月20日
    000
  • JavaScript与jQuery实现多输入框实时货币格式化教程

    本教程详细介绍了如何利用javascript的`intl.numberformat` api与jquery的事件处理机制,为网页中具有相同css类的多个输入框实现实时的货币格式化功能。通过监听用户输入事件,动态提取、验证并格式化数值,最终将符合本地货币习惯的格式化结果返回到用户正在操作的输入框中,从…

    2025年12月20日
    000
  • 深入理解Svelte的响应式系统:函数内部状态更新与外部声明的关联

    本文深入探讨Svelte中响应式语句(`$:`)不按预期触发的问题,特别是当变量在普通函数内部更新时。我们将剖析Svelte的依赖追踪机制,解释为何直接修改函数内部变量不会自动触发外部响应式声明,并提供两种核心解决方案:将函数本身声明为响应式,或确保函数在响应式上下文中被调用并依赖于响应式参数,从而…

    2025年12月20日
    000
  • 在React Native中安全高效地传递和显示动态图片路径

    本教程旨在解决react native应用中动态传递和显示图片时遇到的路径引用问题。文章将深入探讨`require()`与`image`组件`uri`属性的区别,分析服务器端相对路径在客户端的解析挑战,并提供一种将服务器端路径转换为客户端可访问的完整url的解决方案,附带详细代码示例和最佳实践。 引…

    2025年12月20日
    000
  • JavaScript Web组件开发实践

    Web组件通过自定义元素、影子DOM和HTML模板实现可复用、封装性强的UI组件。1. 使用customElements.define()定义自定义标签,如;2. 通过attachShadow()创建影子DOM实现样式隔离,防止全局污染;3. 利用预定义复杂结构,提升维护性;4. 支持插槽(slot…

    2025年12月20日
    000
  • Ajv uri 格式验证深度解析:理解 RFC3986 规范与常见误区

    本文深入探讨 ajv 库在处理 `uri` 格式验证时的行为。我们将解释为何 ajv 严格遵循 rfc3986 规范,即使某些看起来“无效”的 uri 字符串也能通过验证。通过示例代码,读者将理解 ajv 的设计哲学,并掌握正确使用 `uri` 格式进行数据验证的方法,避免因对规范理解偏差而产生的困…

    2025年12月20日
    000
  • AR.js地理位置增强现实:解决对象不显示问题的关键——海拔设置

    本文旨在解决ar.js地理位置(location-based)增强现实应用中,ar对象无法正确显示的问题。通过分析官方文档示例的常见误区,重点阐述了`position`属性中y轴(海拔)参数的重要性,并提供了一个包含海拔设置的完整代码示例,帮助开发者确保ar对象在指定gps坐标处正确且可见地渲染。 …

    2025年12月20日
    000
  • Node.js事件循环与异步I/O原理

    Node.js高效性源于事件循环与异步I/O。事件循环由libuv实现,分阶段执行回调:Timers→Pending→Poll→Check→Close,每轮循环处理宏任务(如setTimeout、I/O)并在阶段间优先执行微任务(Promise.then、process.nextTick)。异步I/…

    2025年12月20日
    000
  • JavaScript不可变数据实践

    使用不可变数据可避免副作用、简化状态管理并便于调试,通过展开运算符、filter、map等方法实现数组对象更新,结合Immer库可简化深层更新逻辑,提升React等框架下的性能优化效果。 在JavaScript开发中,不可变数据(Immutable Data)是一种重要的编程理念。它指的是创建后不能…

    2025年12月20日
    000
  • 怎样利用机器学习库(如TensorFlow.js)在浏览器中运行AI模型?

    使用TensorFlow.js可在浏览器中直接运行AI模型,无需安装软件。首先通过tf.loadLayersModel()加载预训练模型文件(如model.json),再将用户输入的图像、文本等数据转换为张量格式,调用model.predict()进行推理,并提取结果。为提升性能,应启用WebGL加…

    2025年12月20日
    000
  • AdSense 插页式广告:理解其触发机制与合规性指南

    AdSense插页式广告旨在用户导航时自动触发,以提供非侵入式的全屏广告体验。本文旨在阐明其工作原理,并强调严格遵守AdSense政策的重要性。任何尝试通过修改脚本来强制广告展示或干预其默认行为的做法都可能导致账户被禁用。强烈建议开发者避免此类操作,以确保账户安全和广告投放的合规性,应信赖AdSen…

    2025年12月20日
    000
  • AR.js位置感知AR开发指南:解决对象不显示问题与海拔高度设置

    本教程深入探讨ar.js位置感知增强现实开发中ar对象不显示的核心问题。通过分析官方文档示例,重点阐述`gps-entity-place`组件与`position`属性的协同作用,特别是y轴分量在设置对象海拔高度方面的关键角色。文章提供实用的代码示例,帮助开发者准确地在指定gps坐标和海拔高度处渲染…

    2025年12月20日
    000
  • ExtJS Grid数据加载与显示:常见问题及解决方案

    本文旨在解决extjs grid组件在数据加载和显示过程中遇到的常见问题,特别是关于`ext.data.store`的配置、`dataindex`与api响应字段的匹配,以及数据加载时机。通过详细的代码示例和最佳实践建议,帮助开发者避免“unrecognized alias”和“some reque…

    2025年12月20日
    000
  • AdSense插页式广告的正确触发方式与政策合规性

    本文旨在阐明adsense插页式广告的正确触发机制及其相关的政策合规性。文章将详细解释为何不应通过自定义javascript代码强制在页面加载时显示插页式广告,强调此类操作可能导致账户被封禁的严重后果。同时,将指导用户如何通过adsense官方界面合理配置和管理自动广告,确保广告投放既符合政策,又能…

    2025年12月20日
    000
  • 理解 npm-remote-ls 行为:为何特定版本依赖会“消失”

    npm-remote-ls 在查询模块依赖时,可能因指定版本与代码仓库最新状态不符而“遗漏”依赖。本文将深入探讨这一现象,解释 npm-remote-ls 的工作原理,并指导用户如何通过指定正确的版本来准确获取模块的依赖列表,强调版本匹配在依赖管理中的关键作用。 npm-remote-ls 的作用与…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信