ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CentOS 7安装与初始化实战:镜像校验、分区规划、软件源替换及故障排查

CentOS 7安装与初始化实战:镜像校验、分区规划、软件源替换及故障排查

1. 先想清楚:现在还装 CentOS 7 的合理场景与版本选型

CentOS 7 操作系统安装这件事,听起来像是十年前的老话题,但我这两年接到的咨询里,问它的频率一点没降。原因很现实:大量存量业务系统、教学实验环境、老旧硬件上的自建服务,长期跑在这套系统上,重建成本远高于新装一台。所以这篇不谈"该不该用新版本"的价值观问题,只解决一件具体的事——怎么把 CentOS 7 干净、可复现地装出来,并且装完之后能立刻投入实际使用。

先说清楚这内容适合谁。如果你是完全没碰过 Linux 的新手,照着这里的步骤从头走一遍,能独立完成一次带分区规划、网络配置、软件源替换的完整安装;如果你是经常帮人救火的老手,可以重点看分区容量计算、软件源替换的坑、以及第五节的问题排查表,那些是文档里通常不写、但现场一定会遇到的东西。

安装本身其实二十分钟就能跑完,真正决定成败的是装之前的那几个判断:装哪个镜像版本、分几个区、每个区给多大、虚拟资源怎么配。这几件事想错了,装完之后要么空间不够,要么网络不通,要么软件装不上,返工的时间是安装本身的好几倍。下面就从这几个判断开始拆。

1.1 哪些场景下它仍然是合适的选择

我把实际遇到的场景归了三类。第一类是存量环境复现:某个业务系统运行多年,供应商只提供基于 CentOS 7 的部署包和依赖清单,你不可能为了"用新系统"去改人家的一整套运行环境。第二类是教学与实验:很多课程材料、实验指导书、脚本示例都是围绕这套系统的命令体系写的,学生需要的是一个行为一致的环境,而不是最新版本。第三类是离线内网的自建服务:监控、日志归档、文件共享、内部构建机,这些角色的软件生态对系统版本不敏感,稳定压倒一切。

反过来说,如果是要面向公网提供新服务、要跑最新版本的容器运行时、或者要用到近两年才成熟的工具链,那这套系统就不合适,硬上只会一路打补丁。判断标准不是"新旧",而是"你的依赖链长什么样"。我一般会问自己三个问题:现有软件包能不能直接拿到?运行环境有没有必须的新内核特性?后续三年的维护由谁负责?三个问题里有两个答不上来,就别急着装。

还有一个容易被忽略的点:安装介质的选择会直接决定你能不能用上全部功能。很多人随手下了个精简镜像,装完发现缺一堆开发工具和驱动,又得联网补,而内网机器根本没网。这个后面 1.2 节细说。

1.2 镜像类型怎么挑:完整版、精简版、网络安装版

官方提供的安装镜像有好几种形态,名字相近但用途差很远,选错了要么浪费几个 G 的下载流量,要么装完缺组件装不上东西。我按实际使用频率排了个序:

镜像类型体积量级内置软件范围适合的场景我的使用频率
完整版(DVD)4GB 以上基础系统 + 常用软件包全集离线环境、要装图形界面、不确定后续需要什么高
精简版(Minimal)1GB 左右仅基础系统,无图形界面服务器角色明确、后续能联网补包最高
网络安装版(NetInstall)几百 MB无本地软件包,全靠网络源内网有本地源、要精细控制安装内容中
完整版加全部包(Everything)9GB 以上仓库里几乎所有包需要搭本地源、做离线仓库低

我自己的习惯是:能联网的服务器装精简版,离线或需要图形界面的装完整版。精简版的好处不只是体积小,更重要的是装完系统干净,没有一堆用不上的服务在后台跑,systemctl list-unit-files --state=enabled一看就几条,排查问题的时候干扰少。

注意:精简版装完默认没有net-tools、wget、vim这些常用工具,连ifconfig都敲不出来。第一次装完发现命令不存在,别以为装坏了,是本来就没带。

网络安装版我一般只在内网已经有本地仓库的情况下用,因为它把软件包的选择权完全交给了安装时配置的源地址,源配错了整个安装就卡死,对新手不友好。

1.3 虚拟资源与磁盘容量的分配计算

装虚拟机的时候,向导里那几个滑块很多人是随手拖的。我给一套实际能用的算法。

内存:纯命令行服务器 1GB 起步够用,但要跑数据库或者编译构建,给 2GB 到 4GB。图形界面至少 2GB,否则装完你会发现桌面卡得没法操作。有个容易被忽略的细节——安装过程本身比日常运行更吃内存,完整版镜像的图形安装器在 1GB 内存下会直接报内存不足,所以装的时候可以临时给大一点,装完再调回去。

CPU:1 核能跑,2 核是甜点。编译类任务给 4 核。注意虚拟机的 CPU 核数不要超过物理机的逻辑核数的一半,否则宿主机自己会卡。

磁盘:这是最容易算错的地方。我的经验公式是这样的——系统本体打完补丁大概占 8GB 到 10GB,/var目录因为日志和缓存会持续增长,需要预留更多;/home取决于有没有用户数据;swap 的容量按物理内存来推:

  • 内存 ≤ 2GB:swap 给内存的 2 倍
  • 内存 2GB ~ 8GB:swap 给和内存同样大小
  • 内存 8GB ~ 64GB:swap 给 8GB 到内存的一半之间
  • 内存 > 64GB:swap 给 8GB 足够,再大意义不大

这套规则不是拍脑袋来的,它对应的是休眠镜像大小和内存压力下的换页需求。现代服务器内存都大,swap 更多是兜底角色,配太小出问题时没缓冲,配太大浪费磁盘。

磁盘总量我建议20GB 起步,40GB 舒服。如果你只给 10GB,装完系统再打一轮补丁,df -h一看根分区 90% 以上,后面装什么都提心吊胆。这个坑我踩过不止一次,后来干脆把虚拟磁盘做成 40GB 按需增长,既不吃宿主机空间,也不会中途爆掉。

2. 安装前的准备工作:镜像、介质与分区规划

准备工作这块,真正花时间的不是下载,是验证和规划。我见过太多"装到 60% 卡住不动""分区表报错""引导装不上"的案例,回头一查,镜像下载不完整占了相当大的比例。所以这一节的重点放在两个地方:怎么确认镜像没坏,以及分区表怎么排。

2.1 镜像完整性校验与校验值计算

下载完之后第一件事是校验。官方在每个镜像旁边会放一个校验值文件,里面是 SHA256 或者 MD5 的哈希。你要做的是在本地算一遍,和文件里的对照。命令很简单,Windows 上可以用自带的证书工具或者任意哈希计算小工具,Linux 和 macOS 上直接:

# 计算 SHA256 校验值 sha256sum CentOS-7-x86_64-DVD-2009.iso # 或者算 MD5 md5sum CentOS-7-x86_64-DVD-2009.iso

算出来的那一长串和校验文件里的比对,一个字符都不能差。差一个字符就说明下载过程中有字节错了,这种镜像装出来会出现各种诡异问题:安装到某个包突然报解压失败、装完系统起不来、文件系统校验不过。这类问题的可怕之处在于它不报"镜像损坏",而是报一堆看起来像硬件或者配置问题的错误,让你在错误的方向上排查半天。

提示:校验值对不上就重下,别抱侥幸心理去试装。重下几分钟,排查几小时,账很好算。

还有个细节:校验文件本身也可能下载出错,如果你发现算出来的值和文件里完全不同,先看看是不是下载工具把校验文件当网页保存了(比如存成了一堆 HTML),这种情况很常见。

2.2 启动介质的制作与实际写入验证

如果装在物理机上,需要把镜像写到 U 盘。写入工具各平台都有,选一个能"以镜像方式写入"的就行,千万别直接把 ISO 文件拖进 U 盘——那样 U 盘里只是一个文件,机器根本不会从它引导。

写入完成后有个很多人会跳过的步骤:回读验证。部分写入工具自带验证选项,勾上它,工具会把刚写进去的数据读回来和源文件比对。不勾的话,写入过程中 U 盘掉速、供电不稳导致的写入错误不会被发现,症状是引导菜单能出来,选了安装之后就黑屏或者报找不到安装源。

U 盘容量建议 8GB 以上。有个小坑:老主板对 U 盘的引导支持不好,可能需要进 BIOS 关掉"安全引导"模式或者切换引导模式(传统模式和 UEFI 模式),具体看主板。我在一台老机器上折腾了半小时,最后发现是 UEFI 模式下的引导项没选对。

如果是装在虚拟机里,这一步就简单多了——直接在虚拟机的光驱设置里挂载 ISO 文件即可,不需要制作任何介质,也就绕过了写入错误的风险。所以我给新手的第一台练习机,一律建议先用虚拟机。

2.3 分区方案的推演与容量计算

分区是安装过程中唯一一个"选错了要重来"的环节。安装器默认给的是自动分区,它会用 LVM 把整块盘划成一个大的根分区加一个 swap,能用但不优雅。我一般选手动分区,按角色来排。

先给两套可以直接抄的方案。

方案 A:通用服务器(40GB 磁盘)

挂载点容量文件系统说明
/boot1GBxfs内核和引导文件,别用 LVM
swap4GBswap按内存推算
/12GBxfs系统和软件包
/var10GBxfs日志、缓存、数据库数据
/home剩余xfs用户数据

方案 B:极简测试机(20GB 磁盘)

挂载点容量文件系统说明
/boot1GBxfs
swap2GBswap
/剩余全部xfs单分区最省事

为什么/boot单独分并且必须给 1GB?因为内核更新时会保留多个版本,每个内核加初始化镜像大概 100MB 出头,留 500MB 在多内核并存时会紧张,1GB 是安全线。为什么/boot不用 LVM?因为引导加载器对 LVM 的支持需要额外的引导分区配合,新手手动配置很容易装完起不来,直接给裸分区最稳。

为什么/var要单独分?日志、容器镜像、数据库数据、yum 缓存全在这里,一个日志疯长的服务能把根分区写满,进而导致系统无法登录。单独分出来,最多是那个分区满了,系统本身还活着。这个设计在救火场景下价值极高。

注意:分区规划要一次性想清楚,装完之后调整分区容量涉及数据搬迁,风险不小。宁可多花五分钟推演,也别装完再改。

3. 安装向导逐屏拆解:从引导菜单到第一次重启

准备工作做完,正式进入安装。这一节我按屏幕顺序走,把每一屏的选择、以及选错之后的后果讲清楚。有些屏幕看着无关紧要,实际上会影响后面的一堆事。

3.1 引导菜单的选择与安装器启动

挂载好镜像启动后,第一屏是引导菜单。默认项是高亮的那条,直接回车就会进入图形化安装流程。这里有几个选项值得知道:

第一条是标准安装,走图形界面;第二条是"测试介质并安装",它会先扫一遍安装源是否完整,在你不确定镜像好坏的时候强烈建议选这条,多花一两分钟,能省掉后面装到一半失败的痛苦。还有一条是救援模式,系统起不来的时候用,第五节会讲。

如果机器内存不足或者显卡驱动不兼容,图形安装器可能直接黑屏或花屏。这时候在引导菜单按 Tab 键,在命令行末尾加一个inst.text参数,就能切到文本安装模式。文本模式的界面朴素,但功能完整,我在低配虚拟机上基本都走这条路。

引导菜单下面还有一行小字,提示你可以按某个键修改内核参数。这一行在排查硬件兼容问题时非常有用,比如某些阵列卡需要额外驱动、某些机器需要禁用某个内核特性,都在这里加参数。

3.2 语言、时间与安装源的配置

进到安装器主界面,左边一列是配置项,右边是"开始安装"按钮。很多人急着点开始,结果装完发现系统时区不对、语言是英文、想装的软件没装。右边那个按钮什么时候点?所有带感叹号的项都处理完之后。

语言和键盘:语言选中文或英文都行,我一般选英文,因为报错信息在网上搜到的资料以英文为主,而且终端里中文路径和中文提示在部分工具下会乱码。键盘布局保持默认的英文布局就行,选错了的后果是敲某些符号出来的字符不对,比如管道符和引号。

时间和时区:这一屏一定要进去看一眼。默认时区往往不是你要的,时区错了会导致日志时间戳对不上、定时任务在错误的时间触发、证书校验出问题。选对时区之后,把"网络时间"开关打开,让系统装完就能自动同步时间。我见过一个案例,两个节点时间差了几分钟,集群一直起不来,查了一整天才发现是时区设错了。

安装源:如果你用的是完整版镜像,这里默认就是本地介质,不用动。如果用的是网络安装版,这里要填源的地址,填错了会直接报"无法获取软件包信息"。校验方式让安装器自己检测就行,手动指定容易因为证书问题失败。

3.3 软件选择:最小化安装还是带图形界面

这一屏是"软件选择",决定了系统里装哪些软件组。默认是"最小化安装",只有基础系统。

我的建议很明确:服务器角色一律选最小化安装。理由有三个。第一,装的包越少,攻击面和漏洞面越小,这是运维的基本盘。第二,包越少,依赖关系越简单,出问题时排查路径短。第三,装完系统后按需补装,你能清楚知道每个包是什么时候、为什么装的,而不是面对一屏陌生软件猜哪个是必需的。

如果需要图形界面,在左侧选"带图形界面的服务器"或者"GNOME 桌面",右侧的附加选项里可以勾选开发工具、系统管理工具等软件组。这里有个坑:勾选了开发工具,安装时间会成倍增加,因为要装编译器和一堆头文件,几个 G 的内容。如果你只是临时需要编译一个东西,不如装完系统再单独装gcc和make,按需加载。

右侧还有个"兼容库"和"开发工具"之类的附加项,一般不用勾。勾了只会在系统里多出一堆用不上的东西。

3.4 安装位置与手动分区的实操

点进"安装位置",会看到磁盘列表。这里有两个关键选择:是自动配置分区,还是我要手动配置。

自动配置会给你一个基于 LVM 的方案,能启动,但结构不透明。我建议选手动,然后点"完成",进入分区界面。界面下方有"标准分区"和"LVM"两个选项,前面 2.3 节的方案就是按标准分区写的。

手动分区界面的操作逻辑是:点"+"号新建,选挂载点、填容量、选文件系统,然后点"添加挂载点"。依次把/boot、swap、/、/var、/home建出来。最后一个分区可以把容量留空,安装器会自动分配剩余空间,这样不用自己算减法。

几个必须注意的点:

  • /boot的文件系统选 xfs 或 ext4 都行,但不要给它加 LVM 卷组,直接裸分区。
  • swap的挂载点固定选swap,文件系统类型会自动变成 swap。
  • 如果磁盘上原来有数据,界面里可能会显示旧的分区表,需要先点"回收空间"或者手动删除旧分区。这一步会真的清空数据,操作前确认这块盘是空的。
  • 分区完成后,安装器会问要不要格式化,看清楚列出来的分区是不是你建的那几个。

注意:手动分区界面里有个"重新扫描"按钮,改完分区表之后如果界面没刷新,点一下它。另外,某些虚拟机磁盘控制器类型下会识别不到磁盘,需要在虚拟机的磁盘设置里换一个控制器类型。

3.5 网络、主机名与安全策略

网络这一屏在安装阶段就可以配置,建议直接配好,省得装完再折腾。

打开网络开关,网卡会尝试获取地址。虚拟机默认走 NAT 或桥接,DHCP 一般能直接拿到地址。如果要配静态地址,点"配置",在 IPv4 设置里选手动,填地址、掩码、网关、DNS。DNS 一定要填,不填的话装完系统yum会报"无法解析主机",这个错误信息看起来像源配置问题,实际是 DNS 没配。

主机名在左下角,建议改成有意义的名字,比如web-node-01这种。主机名会影响一堆服务的默认配置和证书生成,装完之后改虽然能改,但有些服务需要重启才生效。

安全策略这一屏,默认开着的是 SELinux 的强制模式。关于 SELinux 我在 4.3 节会细讲,这里的选择是:如果你不确定,就保持默认的强制模式,装完系统后如果某些服务被拦,再单独排查;不要一上来就关掉,关掉之后系统实际上是"裸奔"状态,而且以后再想打开,积累的一堆配置可能都不兼容。

3.6 root 口令与普通用户创建

这两屏放在一起说,因为它们是同一件事的两面。

root 口令:安装器会校验复杂度,太简单的直接拒绝。这里有个实际建议——测试环境可以用简单口令方便记忆,但只要这台机器有可能接触任何真实数据,就用长口令并且记在密码管理工具里。生产环境更好的做法是:root 设置一个长随机口令并封存,日常操作用普通用户加sudo。

普通用户:一定要创建。界面里有个"将此用户设为管理员"的勾选框,勾上之后这个用户就在wheel组里,可以用sudo提权。不要图省事只留 root 登录,原因有两个:一是 SSH 默认配置下 root 远程登录的风险更高,二是所有操作都带 root 身份,一旦敲错命令没有缓冲。

口令设完之后,点"开始安装"。这时候安装器会开始往磁盘写数据,进度条走完大约十几分钟,取决于选的软件包多少和磁盘速度。

3.7 安装执行与首次重启

进度条走的过程中,可以看下面的日志窗口,它会实时显示正在装哪个包。如果卡在某一个包上超过五分钟不动,大概率是介质有问题(回到 2.1 节的校验)或者磁盘有问题。

装完之后会提示重启。重启前先做一件事:把安装介质断开。虚拟机里在光驱设置里取消挂载,物理机把 U 盘拔掉。不拔的话,重启后机器可能又从安装介质引导,进到安装界面,你会以为系统没装上。这个坑新手踩得特别多。

重启后第一次进入系统,会有一个初始化流程,要求接受许可协议、完成一些配置。接受许可这一步不能跳过,跳过了系统功能会受限。走完这个流程,才算是真正装好。

4. 首次登录后的收尾配置

装完系统只是拿到了一个能开机的空壳。真正让它好用的,是登录后的这几步配置。我把它们按优先级排:网络 → 软件源 → 服务 → 基础工具。

4.1 网卡、静态地址与 DNS 的确认

先在安装阶段配了网络的,这里主要是确认。命令用ip addr看地址是否生效,ping一个外网地址看通不通。如果不通,按这个顺序查:

# 1. 看网卡状态 ip link show # 2. 看地址和路由 ip addr show ip route show # 3. 测 DNS 解析 cat /etc/resolv.conf ping -c 2 www.example.com # 4. 测网络连通性(不走 DNS) ping -c 2 223.5.5.5

如果 IP 地址有但 ping 不通外网,多半是网关或路由问题;如果 IP 能 ping 通但域名解析不了,就是 DNS 的问题。CentOS 7 的网络管理有两套:老的network服务和新的NetworkManager。装完默认是 NetworkManager 接管,配置文件在/etc/sysconfig/network-scripts/目录下,文件名形如ifcfg-ens33。

用命令行改静态地址,我更推荐nmcli,比手改配置文件不容易出错:

# 查看连接名 nmcli connection show # 设置静态地址 nmcli connection modify "ens33" ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "192.168.1.1 8.8.8.8" # 重载生效 nmcli connection down "ens33" && nmcli connection up "ens33"

nmcli的好处是它会把配置同时写到配置文件和内存,不用重启整个网络服务,也不会把自己 SSH 连接断掉(除非你改的就是当前连接,那就提前准备好物理终端)。

4.2 软件源替换与缓存重建

官方源的访问速度在国内环境下往往很慢,替换成国内公共镜像站是常规操作。这一步值得做,但要注意方法。

新的写法是直接用sed批量替换仓库文件里的地址,或者用curl下载现成的仓库配置覆盖过去。这里有个关键细节:先备份原文件。

# 备份原有仓库配置 mkdir -p /etc/yum.repos.d/backup mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/backup/ # 写入新的仓库配置(以 base 仓库为例,地址换成你要用的镜像站) cat > /etc/yum.repos.d/CentOS-Base.repo <<'EOF' [base] name=CentOS-$releasever - Base baseurl=http://mirrors.example.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [updates] name=CentOS-$releasever - Updates baseurl=http://mirrors.example.com/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [extras] name=CentOS-$releasever - Extras baseurl=http://mirrors.example.com/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 EOF # 清理缓存并重建 yum clean all yum makecache

写完先yum repolist看一下列出来的仓库数量和包数量。如果包数量是 0 或者明显偏少,说明地址不对或者网络不通,不要继续装东西。

提示:$releasever和$basearch是 yum 的变量,会自动替换成版本号和架构。如果你的镜像站目录结构和默认不同,这里要改成写死的值,否则会 404。

还有一个常见问题:系统装完之后,官方源的地址可能已经停止维护,yum makecache会报一堆 404。这时候需要把地址指向归档目录,具体路径按你用的镜像站的实际结构来。这类问题在装老系统时几乎必然遇到,提前准备好能省很多时间。

4.3 防火墙、SELinux 与服务的取舍

这三块经常被一起讨论,因为它们都跟"服务起不来"有关。我的处理原则是先理解再决定,不要无脑关。

防火墙:默认开着,只放行了 SSH。这意味着你的 Web 服务装上去之后,本机 curl 能通,外部访问不通。正确的做法是放行端口,而不是关掉防火墙:

# 放行 80 和 443 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload # 查看当前放行规则 firewall-cmd --list-all

在完全隔离的内网、且你确认没有其他防护措施的情况下,关掉防火墙是可以接受的取舍,但一定要写进变更记录,别让下一个人接手时一脸茫然。

SELinux:默认强制模式。它拦下来的东西通常表现为"服务启动失败,日志里报权限被拒绝,但文件的权限明明是对的"。这种时候不要急着setenforce 0,先看审计日志:

# 查看最近的拒绝记录 tail -50 /var/log/audit/audit.log | grep denied # 临时切到宽容模式(重启后恢复) setenforce 0

临时切宽容模式是为了验证问题是不是 SELinux 引起的。如果是,正确的解法是用semanage或chcon调整策略标签,而不是永久关掉。永久关闭需要改/etc/selinux/config里的SELINUX=disabled并重启,这个操作会让系统在下次启动时做一次文件系统重打标签,耗时可能很长,机器多的时候这点特别容易踩坑。

不需要的服务:装完系统后跑一遍systemctl list-unit-files --state=enabled,看看哪些开机自启的服务你用不上。比如打印服务、蓝牙相关的(服务器上没有这些硬件)都可以关掉。少一个跑着的服务,就少一个潜在的问题源。

4.4 时间同步、常用工具与基础加固

基础的几件事,一次做完。

时间同步:

timedatectl set-timezone Asia/Shanghai timedatectl set-ntp true timedatectl status

时区设置不对,日志时间戳全是错的,排查问题时会被误导。这个我在 3.2 节提过一次,装完之后再确认一遍不亏。

常用工具:最小化安装的系统缺很多顺手工具,一次性装上:

yum install -y vim wget net-tools lsof telnet tree bash-completion \ bind-utils sysstat unzip

这几样各有用途:net-tools提供ifconfig和netstat(虽然新命令更好用,但很多老脚本依赖它们);lsof查端口占用;bind-utils提供nslookup和dig;sysstat提供sar,事后复盘性能问题全靠它。

基础加固:至少做三件事。第一,SSH 禁止 root 直接登录,改/etc/ssh/sshd_config里的PermitRootLogin no,然后用普通用户加sudo;第二,关掉密码登录改用密钥(如果环境允许);第三,检查sudo权限配置,确保普通用户在wheel组里。

改完 sshd 配置千万别直接重启服务,先在另一个终端用新配置测试连接,确认能连上再断开旧连接。这个顺序反了会把自己锁在机器外面,如果机器在远端,那就得走救援流程了。

5. 高频问题排查实录

安装和使用过程中会遇到的问题,我按阶段归了类。每一条都是实际处理过的,不是查文档抄来的。

5.1 启动与安装阶段的典型故障

引导菜单出不来,直接进原来的系统或者黑屏。先确认启动顺序,BIOS 里的引导顺序是不是把安装介质排在了前面。如果顺序对但还是进不去,检查引导模式:老机器用传统模式,新机器用 UEFI 模式,模式和介质不匹配就引导不起来。另外,部分主板需要在 BIOS 里关闭"安全引导"才能从自定义介质启动。

进入安装界面后提示"找不到安装源"。完整版镜像出现这个提示,通常意味着介质读取有问题——刻录时出错、U 盘有坏块、或者虚拟机的 ISO 没挂对。虚拟机上还有一个可能:光驱设置里的"连接"选项没勾上,等于没插盘。

装到一半卡住,进度条不动。按 Ctrl+Alt+F2 可以切到另一个终端看详细日志,日志在/tmp/anaconda.log附近。如果日志显示某个包反复解压失败,基本就是镜像损坏,回到 2.1 节重新校验。如果卡在"正在格式化",可能是磁盘有坏道。

装完重启进不去系统,停在 grub 提示符。这是引导没装上或者装错了位置。在 grub 提示符下可以手动指定内核启动:

grub> root (hd0,0) grub> kernel /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/sda3 grub> initrd /initramfs-3.10.0-1160.el7.x86_64.img grub> boot

能起来的话,进去之后重新生成引导配置grub2-install /dev/sda && grub2-mkconfig -o /boot/grub2/grub.cfg。起不来的话,用安装介质的救援模式进去修,这是最稳的路子。

5.2 安装完成后的网络与服务问题

网卡起来了但没有地址。检查网卡配置文件里的ONBOOT是不是yes,默认可能是no,意思是不随系统启动启用。改成yes之后重启网络。这个问题在最小化安装里特别常见。

有地址但 ping 不通网关。检查虚拟机的网络模式:NAT 模式下虚拟网段和物理网段不同,网关地址也不一样,按宿主机虚拟网络适配器显示的网关来配。桥接模式下要确认物理网络允许这个地址。

能 ping 通 IP 但域名解析失败。/etc/resolv.conf里没有有效的 DNS 地址。注意这个文件可能被 NetworkManager 覆盖,正确的改法是在网卡配置里改DNS1=和DNS2=,或者用nmcli设置,直接编辑文件重启后可能丢失。

服务启动失败,日志报权限问题但文件权限正常。先查 SELinux,setenforce 0临时切宽容模式验证。如果确认是 SELinux 拦的,用semanage fcontext加restorecon修标签,具体做法取决于服务类型。

yum 装包报证书错误。系统时间不对会导致证书校验失败,先date看一眼时间,不对就同步时间。这个错误信息看起来像源的问题,实际上跟时间有关,很多人在这里绕圈子。

5.3 常见问题速查表

现象最可能的原因快速验证处理方向
引导菜单不出现启动顺序 / 引导模式不匹配进 BIOS 看引导项调整顺序或切换引导模式
找不到安装源镜像损坏或介质未挂载用"测试介质"选项启动重新校验或重新挂载
安装中途卡死介质坏块、磁盘问题看anaconda.log换镜像或换磁盘
重启后进 grub 提示符引导未正确安装手动指定内核启动修复引导配置
无 IP 地址ONBOOT=no看网卡配置文件改成 yes 后重启网络
域名解析失败DNS 未配置cat /etc/resolv.conf在网卡配置里加 DNS
yum 报证书错误系统时间偏差date同步时间
服务启动失败报权限SELinux 拦截setenforce 0后重试修策略标签而非关闭
磁盘空间告警/var日志增长du -sh /var/*加日志轮转或扩分区
忘记 root 口令——引导时进单用户模式重置

最后一行那个重置口令的操作,流程是:引导菜单按 e 编辑内核参数,在linux16那一行末尾加rd.break,然后Ctrl+X启动,进入紧急 shell 后重新挂载根分区为读写、chroot进去、用passwd改密码,最后处理 SELinux 的自动重标签文件。给/etc/shadow改完之后一定要touch /.autorelabel并重启,否则 SELinux 会把新密码文件当成异常,导致改完密码还是登不进去。这个坑我在第一次操作时就栽了,改完密码进不去,又得重来一遍。

6. 几次返工之后总结出的实操细节

聊几个只有实际动手才会注意到的细节,都跟"看起来没问题但其实有问题"有关。

第一件事关于虚拟磁盘的增长模式。我给虚拟机分配磁盘时一律选"按需分配"而不是"立即分配全部空间",理由是部署速度。但按需分配有个副作用:磁盘文件会随着写入逐渐变大,而且不会自动缩回,删了文件宿主机上的占用也不会减少。所以长期用的虚拟机,磁盘文件会比实际使用量只大不小,这一点在规划宿主机存储时要留出余量。

第二件事关于快照的时机。安装过程中我建议至少打两个快照:一个是分区配置完成、开始写数据之前,另一个是系统装完、收尾配置做完之后。第一个快照的价值在于分区方案错了可以立刻重来,不用从头走一遍引导流程;第二个快照是"干净基线",后面无论装什么软件出问题,回滚到这个点比重装快。我一般还会在基线快照的描述里写清楚网络配置和软件源地址,隔几个月再看也不至于忘了当时配了什么。

第三件事关于日志的自增长控制。最小化安装的systemd-journald默认会吃掉/var/log/journal里不少空间,如果不限制,一个跑得久的系统光是日志就能占几个 G。改法是在/etc/systemd/journald.conf里设SystemMaxUse=500M之类的上限,然后重启服务。这个配置文档里有,但大部分安装教程不提,等磁盘告警了才回头找原因。

第四件事是别在安装阶段贪多。我早期的习惯是一次把开发工具、数据库、监控代理全勾上,图省事。结果是系统里跑着一堆用不上的服务,出问题时排查路径变长,而且软件包之间的依赖冲突很难定位。后来改成最小化安装 + 按需补装,装完之后rpm -qa | wc -l的数量少了一大截,系统的行为也更可预测。这个习惯养成之后,重装和复现环境的成本反而降低了——你清楚知道每个东西是什么时候装的、为什么装的。

第五件事,关于文档记录。每装一台机器,我会用一个固定的模板记下这些:时区、主机名、IP 和网关、DNS、分区方案、替换的软件源地址、额外装的软件包清单。这个记录在机器出问题、需要重建或者交接的时候价值巨大。光靠记忆,三个月后你能想起 IP 网段就不错了,分区细节和源地址基本忘光。

这套流程走下来,从零到一台能用的机器,熟练的话半小时左右。新手第一次可能要一两个小时,卡住的地方通常是网络配置和分区规划这两块,多走两遍就顺了。真正省时间的不是手速,是装之前那几分钟的推演——分区怎么划、软件源用哪个、网络怎么配,这几件事想清楚了,后面基本不会返工。

返回列表