☰
CentOS 7 安装全流程:镜像校验、Anaconda分区与装后配置避坑
2026/10/27 3:41:51 网站建设 项目流程

上个月接手一台离线内网的业务机,系统盘突然挂了。机房没有外网、没有 PXE 服务器、更没有远程管理卡,备件只有一块新硬盘,手里能用的系统镜像还是几年前存下来的 CentOS 7 DVD。那种场景下,网上搜出来的“三分钟装完”教程几乎全都不作数——它们默认你有网络源、默认你熟悉分区、默认你不会在介质校验这一步翻车。这篇就把 CentOS 7 的安装从头到尾拆一遍,从镜像怎么选、启动盘怎么写,到 Anaconda 安装器里每一步该点哪里、为什么这么点,再到装完之后必须补的那几个配置。适合两类人看:一类是第一次独立装服务器的,另一类是装过很多次但总在某些环节莫名其妙卡住的。文中涉及的虚拟化平台、硬件型号都用通用表述,你对照自己手头的环境套就行。

1. 为什么今天还有人在装 CentOS 7

1.1 存量环境把这条路堵死了

CentOS 7 的首个正式版本发布于 2014 年,最后一个维护版本是 7.9.2009,官方在 2024 年 6 月底正式停止维护。按理说这个系统早该退休了,但现实里它依然活跃在大量场景中:跑了七八年的业务系统、只在内网运行的实验环境、某些商业软件的兼容性矩阵就写到 CentOS 7 为止、教学用的机房统一镜像。这些环境的共同特点是——换系统的成本远高于继续用老系统的风险。

我在实际项目里遇到过不止一次这种情况:一台机器的系统盘故障,重装时发现业务软件的安装包只认 CentOS 7 的 glibc 版本,升级到更新的发行版就要连带升级整个中间件栈。这种时候,“装一个 CentOS 7”不是一个技术选择,而是一个被现实约束住的结果。所以了解它的安装流程不是怀旧,是维持存量环境运转的基本功。

另外一个现实因素是资料断层。CentOS 7 的安装器 Anaconda 和现在主流发行版用的安装器在交互逻辑上差别不小,尤其是分区那一步——CentOS 7 里你改完分区必须点左上角的“完成”才算生效,只点右下角的“开始安装”是不行的,很多人就是在这里白装一遍。这种细节在新版安装器里已经改掉了,所以新手照新教程操作,反而容易出错。

1.2 安装环节里 CentOS 7 和后来者不一样的地方

把 CentOS 7 的安装流程和后来的发行版对照一下,有几处差异是必须提前知道的,否则会反复返工。

第一是网卡默认关闭。CentOS 7 的安装器里,网络配置界面上每块网卡默认都是灰色的 OFF 状态,需要手动拨到 ON 才会在安装过程中启用。很多人装完进系统发现没网,回头以为是驱动问题,实际上就是安装时没打开。

第二是默认文件系统是 XFS。CentOS 7 开始把 XFS 作为默认的根文件系统,不再是 ext4。XFS 在处理大文件和高并发写入时表现更好,但它不支持收缩,只能扩容。这意味着分区的时候给根目录留多少空间,后面基本只能加不能减,规划时要比以前保守一点。

第三是网络管理换成了 NetworkManager 体系,配置文件在/etc/sysconfig/network-scripts/下,命名规则是可预测网卡名(比如 ens33、eno1),不再是 eth0、eth1。这个变化会连锁影响一堆脚本和文档,后面第 7 节会专门讲怎么处理。

第四是最小化安装真的什么都不给。ifconfig、netstat、wget、vim全部没有,装完连网络都不好查。如果打算用最小化安装,必须提前准备好一套“第一课”命令。

下面这张表把几个关键差异集中列一下,装之前扫一眼能省不少事:

环节CentOS 7 的行为常见误判
网卡安装界面默认 OFF以为驱动缺失
文件系统默认 XFS,不可收缩以为和 ext4 一样能缩容
网卡命名ens33 / eno1 这类可预测名脚本里写死 eth0 导致失效
最小化安装无 net-tools、无 wget装完发现连 IP 都查不了
分区生效必须点“完成”才写入直接点“开始安装”,分区没生效
软件源官方源已下线,需切归档源yum 一直报 Could not resolve host

2. 镜像、介质和启动盘:动手前该定的三件事

2.1 选哪个 ISO,DVD 还是 Minimal

CentOS 7 的镜像有好几种,名字很像,用途差很远。最常见的是三种:DVD ISO(大约 4.4 GB)、Everything ISO(大约 10 GB)、Minimal ISO(大约 1 GB 上下)。

DVD ISO 是最主流的选法。它包含了完整的基础软件包集合,安装时可以在“软件选择”里挑“带 GUI 的服务器”或者“开发及生成工作站”,不需要额外联网就能把图形界面装起来。对于内网离线环境,这是唯一稳妥的选择。

Minimal ISO 只包含最基础的系统组件,装出来的系统体积小、攻击面小,适合做容器宿主机或者纯命令行服务节点。但它的短板也明显:安装时“软件选择”里没有图形界面可选,装完一堆常用工具要自己补。如果你的机器后面要接显示器做本地操作,Minimal 会让你很难受。

Everything ISO 包含全部软件包,好处是离线装什么都有,坏处是体积大、写入 U 盘慢、安装器扫描包的时间也长。除非你有明确的全离线装大量软件包的需求,否则没必要。

还有一个容易忽略的点:镜像的版本号。CentOS 7.9.2009 是最终版,文件名类似CentOS-7-x86_64-DVD-2009.iso。有些老镜像站还挂着 7.6、7.7 的版本,这些版本的软件包比较旧,装完之后要打大量更新,而官方源已经下线,更新过程会很痛苦。能拿到 7.9 就用 7.9。

2.2 校验这一步为什么不能省

镜像下载完之后第一件事是校验哈希,不是直接写盘。这一步被跳过得太频繁了,但它是后面一堆玄学问题的根源。

官方会提供每个 ISO 对应的 SHA256 值。Linux 下直接sha256sum CentOS-7-x86_64-DVD-2009.iso,Windows 下用 PowerShell 的Get-FileHash -Algorithm SHA256 文件名或者命令行certutil -hashfile 文件名 SHA256。比对一下输出的字符串和官方公布的是否一致,不一致就重新下。

为什么这一步重要?因为 ISO 有几个 GB,下载过程中任何一个字节出错,写入 U 盘后都可能表现为安装到一半报“包校验失败”,或者更糟——装完了但系统里某个关键文件是坏的,运行几天才暴露。我在早期吃过这个亏,一个包损坏导致系统装完后 systemd 起不来,排查了大半天才想起来是镜像问题。

另外,安装器启动菜单里有一个“Test this media & install CentOS 7”选项,它会先扫描安装介质再进入安装。多花三到五分钟,但能在安装开始前就发现介质问题,比装到 80% 报错强得多。物理机上我基本都会选这一项,虚拟机里因为用的是 ISO 文件,出错概率低,可以直接跳过。

2.3 启动盘写入模式选错的代价

U 盘启动盘制作工具很多,但写入模式是关键。以常见的几个工具为例:

用dd命令最直接:dd if=CentOS-7-x86_64-DVD-2009.iso of=/dev/sdX bs=4M status=progress && sync。注意of=后面是整块设备(比如/dev/sdb),不是分区(/dev/sdb1),写错会毁掉本机硬盘数据。写完必须执行sync,否则拔盘时缓冲区没落盘,U 盘内容是不完整的。

图形化工具里,Rufus 在写入 CentOS 7 时会弹窗问用 ISO 模式还是 DD 模式,选 DD 模式成功率更高。ISO 模式会尝试重建文件系统结构,对某些老版本的引导文件处理不好,容易出现启动后卡在黑屏光标闪烁。

有些工具默认用“USB-HDD+”之类的模式,写入后 U 盘分区表会变,机器 BIOS 认不出来。判断方法很简单:写完之后看 U 盘的卷标,正常应该是CentOS 7 x86_64,如果变成别的名字或者容量显示异常,多半是模式选错了。

还有一点:U 盘本身的容量和速度。4.4 GB 的 ISO 至少要用 8 GB 的盘,而且写入过程会完全擦除原有数据。用杂牌 U 盘经常出现写入速度掉到几百 KB/s 的情况,一个镜像写半小时,写完还有可能是坏的。这种事没有技术含量,但确实会浪费一整个下午。

3. 从开机自检到 Anaconda 主界面

3.1 启动菜单三个选项背后的区别

U 盘插好、BIOS 里把启动顺序调成 U 盘优先,开机后会看到一个黑底的菜单,三个选项:

  • Install CentOS 7
  • Test this media & install CentOS 7
  • Troubleshooting

第一项是正常安装,直接进图形化安装器。第二项先扫描介质完整性,扫描通过后自动进入安装。第三项是排障入口,里面有“救援模式”“内存测试”等子项。

这里有一个容易踩的坑:如果机器是 UEFI 启动模式,但 U 盘是按 Legacy 方式写入的,或者反过来,开机后可能根本看不到这个菜单,直接进 BIOS 或者黑屏。判断方式是进 BIOS 看启动项里 U 盘前面有没有“UEFI:”前缀。CentOS 7 的 ISO 是双模式支持的,同一个 U 盘在两种模式下都能启动,但启动后的安装器行为会有区别——UEFI 模式下必须用 GPT 分区表并单独划一个/boot/efi,Legacy 模式下用 MBR 就行。这个区别在第 4 节分区时直接影响方案。

如果菜单出现了但选完第一项就黑屏只有光标在闪,大概率是显卡驱动或者显示模式的问题。可以回到菜单,按e编辑启动参数,在linuxefi那行末尾加上nomodeset再按Ctrl+X启动。这个参数让内核不去加载显卡的 KMS 驱动,用最基本的显示模式跑安装器。装完系统后如果还是黑屏,需要在 GRUB 配置里也加上这个参数,或者装好显卡驱动后再去掉。

3.2 语言和时区的选择顺序会影响结果

进入安装器后第一个界面是语言选择。界面左侧是语言列表,中文简体在比较靠下的位置。选定之后点“继续”。

这里有个细节值得说清楚:语言选择不仅影响安装器界面,还会影响装出来的系统的默认 locale。如果你选了中文,装完后系统的LANG就是zh_CN.UTF-8,命令行里执行某些命令时提示信息会变成中文。这对日常使用没影响,但对日志分析和脚本解析有影响——中文提示混在日志里,grep 关键字会很麻烦。

我的习惯是:安装器界面选“English (United States)”,然后在“本地化”那一段里单独把时区设成 Asia/Shanghai。这样界面是英文的,操作路径好对照,系统 locale 也是英文的,日志干净。如果确实需要中文界面,装完系统后单独装中文语言包并设置LANG更可控。

时区设置界面里,除了点选地图上的位置,还要注意右上角的“网络时间”开关。打开它,系统会用 NTP 自动同步时间;关掉它,时间就得手动设。内网环境如果没有可达的时间服务器,这个开关打开后反而会导致启动时等待超时,装完系统后建议检查一下chronyd服务的状态。

3.3 软件选择决定后面补多少课

“软件选择”这一步在安装器主界面的“软件”区域里。默认选的是“最小安装”,只装最基础的系统组件。

可选项大致包括:最小安装、基础设施服务器、文件及打印服务器、基本网页服务器、虚拟化主机、带 GUI 的服务器、GNOME 桌面、开发及生成工作站等。选中某一项后,右侧会出现“已选环境的附加选项”,可以进一步勾选具体的包组。

选哪个取决于用途:

  • 纯命令行服务节点、容器宿主机:选“最小安装”,装完按需补包,系统最干净
  • 需要本地图形界面操作:选“带 GUI 的服务器”或“GNOME 桌面”
  • 开发测试机:选“开发及生成工作站”,会带上一整套编译工具链

这里有一个实际经验:如果选“最小安装”,务必在装完之后第一时间确认能不能联网、能不能装包。因为最小化安装没有wget,yum又是唯一能补包的工具,一旦网络配置有问题,会陷入“要装工具先要联网,要联网先要装工具”的死循环。我的做法是:最小化安装的同时,先在“软件选择”里勾上“兼容性库”和“开发工具”里的几个基础包组(比如net-tools),或者干脆在安装器的网络配置里把网卡配好,装完后直接用yum补。

另外,安装器界面右下角的“开始安装”按钮,在分区没做完之前是灰色的。这是 CentOS 7 安装器的一个保护机制,同时也提醒你——分区没完成,其他都白搭。下一节专门讲这个。

4. 分区:装完最后悔的一步

4.1 挂载点规划的实际取舍

点“安装目的地”进入分区界面,默认是“自动配置分区”。自动分区能跑,但它给的方案往往是:一个/boot分区、一个/分区、一个 swap。这个方案在小机器上够用,但服务器上后面一定会后悔——尤其是/var和/混在一起的情况,日志一涨就把根目录撑满,系统直接进入只读状态。

所以服务节点我一律用手动分区。手动分区的核心思路是把“会持续增长的东西”单独拆出去,让任何一个目录爆掉都不影响系统运行。

一个通用性比较好的方案:

挂载点建议容量文件系统说明
/boot1 GBext4内核和引导文件,不需要太大,但放 LVM 上 GRUB 读不到
/boot/efi200 MBEFI System Partition仅 UEFI 启动时需要,Legacy 模式不需要
swap见 4.3swap内存不足时的兜底
/30–50 GBXFS系统本体,装完占 2–4 GB,留余量给后续升级
/var20–100 GBXFS日志、数据库、容器镜像都可能放这里,按业务估
/home视情况XFS多用户环境或需要保留用户数据时单独分
/data剩余空间XFS业务数据专用,方便独立备份和扩容

分区的实操顺序是:先选“我要配置分区”,点“完成”进入手动界面;在“新挂载点将使用以下分区方案”里选“标准分区”或“LVM”;然后点“+”逐个添加挂载点,填容量,点“添加挂载点”。全部加完之后,必须点左上角的“完成”,弹出摘要窗口再点“接受更改”,分区方案才会真正写入。

这一步是 CentOS 7 安装过程中最容易出问题的地方。很多人加完挂载点直接点右下角“开始安装”,结果安装器用的还是自动分区的默认方案,前面手动加的全白费。装完进系统一看,分区和计划完全不一样。这个交互在新版安装器里改过了,所以看新教程的人反而容易在这里翻车。

4.2 LVM 用在哪一层,不用在哪一层

LVM(逻辑卷管理)在服务器上几乎是标配,但它不是无脑全用。

LVM 的结构是三层:物理卷(PV,就是一块硬盘或一个分区)、卷组(VG,把多个 PV 合成一个池子)、逻辑卷(LV,从池子里切出来的可用空间)。好处很实在:可以在线扩容、可以做快照、可以跨盘组合空间。坏处也实在:多了一层抽象,硬盘出问题时数据恢复工具对 LVM 的支持不如对裸分区好,误操作删掉卷组后恢复难度大得多。

我的实际取舍是:

  • /boot绝对不放 LVM。GRUB 在引导阶段读不了 LVM 里的内核文件,放进去直接开不了机。这是硬约束,不是偏好。
  • /可以放 LVM,但要考虑一个风险:如果根卷出问题进不了系统,救援模式下要激活 LVM 才能挂载,多一步操作。
  • /var、/data这类数据卷放 LVM 收益最大。业务跑起来之后发现空间不够,在线扩一下就行,不用停机重装。
  • 单盘小机器、内存和存储都很固定的场景,标准分区更简单直接,出问题时排查路径短。

LVM 扩容的实际操作是三步:pvcreate加新盘(如果是新盘)、vgextend把盘加进卷组、lvextend扩逻辑卷,最后xfs_growfs让文件系统识别新容量。XFS 只能扩不能缩,这点再强调一次——lvreduce对 XFS 是无效的,缩了会直接损坏数据。

4.3 swap 容量怎么估,MBR 还是 GPT

swap 的容量规则这些年一直在变。老的说法是“内存的两倍”,这个规则来自内存普遍只有 512 MB 到 2 GB 的年代。放在 32 GB 内存的机器上,分 64 GB swap 完全是浪费。

现在比较实用的估算方式:

物理内存建议 swap说明
≤ 2 GB内存的 2 倍内存紧张,swap 使用频率高
2–8 GB等于内存平衡方案
8–64 GB4–8 GB仅作兜底,有休眠需求另算
> 64 GB4 GB 或不设主要靠内存本身,swap 意义有限

如果这台机器要跑内存密集型的应用(比如 Java 服务、数据库),swap 不要太抠,给它留个 8 GB 兜底,避免 OOM Killer 直接杀进程。反过来,如果机器是容器宿主机,容器里的应用通常不适合被 swap,那 swap 小一点甚至关掉更合适。

分区表的选择取决于启动模式:

  • Legacy BIOS 启动:用 MBR 分区表,最大支持 2 TB 单盘,分区数不超过 4 个主分区
  • UEFI 启动:必须用 GPT 分区表,并且需要一个 200 MB 左右的/boot/efi分区,文件系统选 EFI System Partition

这两者是强绑定的,配错了开不了机。判断当前机器的启动模式,最直接的办法是开机时看 BIOS 界面有没有 UEFI 字样,或者在安装器启动菜单出现时看一下——UEFI 模式下的菜单项文字通常带UEFI前缀。更稳的办法是进安装器后开一个终端(Ctrl+Alt+F2),执行ls /sys/firmware/,如果有efi目录就是 UEFI 模式。

有一个细节容易被忽略:MBR 分区表下,如果一块盘已经被别的系统用过,盘上可能有残留的分区表和引导记录。安装前点一下“回收空间”,或者直接在分区界面点“删除全部”,把旧数据清掉,避免新旧分区表冲突导致引导失败。

5. 网络与主机名:在安装器里就配好的好处

5.1 网卡默认是关的这件事

安装器主界面的“网络和主机名”这一项,很多人会跳过,装完进系统才发现没网。原因是 CentOS 7 的安装器里,所有网卡默认是 OFF 状态,必须手动拨开。

进入配置界面后,左侧是网卡列表。以太网卡通常显示为ens33、eno1这样的名字,后面跟着 MAC 地址和状态。选中一块,点右上角的开关拨到“打开”,状态会变成“已连接”。这时候默认走 DHCP,如果网络里有 DHCP 服务器,几秒钟后就能拿到 IP,界面会显示出来。

如果是固定 IP 的内网环境,点“配置”按钮,切到 IPv4 设置页,方法选“手动”,点“添加”,填地址、子网掩码、网关、DNS。这里有一个小坑:网关和 DNS 要分开填,不能只填一个。CentOS 7 的安装器里网关填在“网关”栏,DNS 填在“DNS 服务器”栏,只填网关会导致能连内网但解析不了域名。

为什么建议在安装器里就配好网络?三个理由:

第一,装完之后可以直接用yum补包。最小化安装缺少的工具全靠yum装,如果网络不通,后面所有配置都卡住。

第二,安装过程中可以指定网络源,从内网的镜像站拉包,省去装完再换源的麻烦。

第三,装完重启后网卡配置已经写好,不需要在命令行里手工编辑ifcfg-文件。手写这个文件很容易漏掉ONBOOT=yes,导致重启后网卡又是关的。

安装器的网络配置界面里还有一个“主机名”输入框,默认是localhost.localdomain。改成有意义的 FQDN 格式,比如node01.example.internal,点“应用”。这个主机名会写入/etc/hostname,重启后生效。

5.2 主机名命名和 hosts 的配合

主机名这件事,单机环境无所谓,多机环境里命名规范能省大量沟通成本。我的习惯是按“角色+序号+域”三段式命名,比如web01.lab.internal、db02.lab.internal。好处是看主机名就知道这台机器干什么、属于哪个环境。

安装器里设了主机名之后,还要确认/etc/hosts里有一行把主机名解析到本机 IP。CentOS 7 的安装器会写一行127.0.0.1 localhost localhost.localdomain,但不会自动写你的主机名。如果某些服务启动时做反解,找不到主机名对应的 IP,就会卡住几十秒然后超时失败,日志里报Unable to resolve host之类的错误。

标准的/etc/hosts写法是:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.10 node01.example.internal node01

第三行是本机 IP 和主机名的对应关系,装完系统后手工补上。如果是集群环境,把所有节点的主机名和 IP 都写进去,能避免大量因为解析失败导致的启动超时。

另外一个实践建议:主机名不要用下划线。虽然 Linux 内核本身允许,但很多应用层协议(比如 DNS 记录、某些 HTTP 客户端)对下划线主机名支持不好,会出现莫名其妙的连接失败。用短横线或者点分隔都行。

6. 首次登录后的基础配置

6.1 用户、sudo 和 SSH 的初始姿态

安装器在配置阶段会要求设置 root 密码,如果密码太简单(比如纯数字、字典词),会弹出一个黄色提示要求点两次“完成”才能通过。这个提示不是错误,是提醒你密码强度不够。生产环境建议至少 12 位、包含大小写和符号。

root 密码设好之后,强烈建议在安装器的“创建用户”界面里建一个普通用户,并勾选“将此用户设为管理员”。这样这个用户会被自动加入wheel组,可以用sudo提权。日常操作走普通用户,需要特权时用sudo,比一直用 root 安全得多,也能留下操作审计记录。

装完登录后的第一件事,是把 SSH 的初始姿态调整好。编辑/etc/ssh/sshd_config:

PermitRootLogin no PasswordAuthentication yes MaxAuthTries 3

第一行禁止 root 直接 SSH 登录。第二行保留密码登录(刚装完还没配密钥,先留着,配好密钥后再改成 no)。第三行限制密码尝试次数。

改完执行systemctl restart sshd生效。改之前务必确认普通用户的sudo是通的,否则禁止 root 登录之后可能把自己锁在外面。

配密钥登录的流程是:本地ssh-keygen -t rsa -b 4096生成密钥对,然后ssh-copy-id user@host把公钥推到服务器,最后把PasswordAuthentication改成 no 并重启 sshd。这个顺序不能反,先关密码登录再推密钥就推不上去了。

6.2 软件源:EOL 之后必须换到归档源

CentOS 7 停止维护之后,官方镜像站下线,默认的mirrorlist.centos.org已经无法解析。这导致装完系统第一次执行yum时直接报Could not resolve host: mirrorlist.centos.org。

解决办法是把源指向归档地址。归档地址的路径结构是https://vault.centos.org/7.9.2009/,下面按组件分目录:os/x86_64/、updates/x86_64/、extras/x86_64/。

最省事的做法是直接替换 repo 文件。进入/etc/yum.repos.d/,把默认的几个 repo 文件备份一下,然后新建一个文件,内容类似:

[base] name=CentOS-7.9.2009 - Base baseurl=https://vault.centos.org/7.9.2009/os/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 [updates] name=CentOS-7.9.2009 - Updates baseurl=https://vault.centos.org/7.9.2009/updates/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 [extras] name=CentOS-7.9.2009 - Extras baseurl=https://vault.centos.org/7.9.2009/extras/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1

两个注意点:一是把默认 repo 文件里mirrorlist=那一行注释掉,或者直接把整个文件重命名为.bak,避免 yum 仍然去读它;二是如果机器在内网、访问不了外网,就把baseurl换成内网镜像站的地址,结构保持一致。

改完之后执行yum clean all && yum makecache刷新缓存。如果报Cannot find a valid baseurl,先ping vault.centos.org确认网络通不通,再检查baseurl末尾有没有多写或漏写斜杠。

换完源之后把常用工具补上:yum install -y net-tools vim wget lsof telnet bash-completion epel-release。这几个包在最小化安装里都没有,装完之后日常操作才顺手。

6.3 时间、SELinux、防火墙三件套的落地命令

这三项是装完系统后必做的基础配置,每一项都有踩坑点。

时间同步用chronyd。CentOS 7 默认装了chronyd,检查状态:systemctl status chronyd。配置文件在/etc/chrony.conf,把server那一行改成内网可达的时间服务器,或者用公共时间服务器的 IP。改完systemctl restart chronyd,然后chronyc sources -v看同步状态,^*开头的那一行表示当前同步源。

时区单独设置:timedatectl set-timezone Asia/Shanghai。设置完用timedatectl确认。时区错了会导致日志时间对不上,排查问题时非常误导——我曾经因为一台机器的时区设成了 UTC,日志时间比实际早 8 小时,跟另一台机器的日志对不上,白查了两个小时。

SELinux 的状态查询用getenforce,返回值是Enforcing、Permissive、Disabled三种之一。临时切换用setenforce 0(切到 Permissive)或setenforce 1(切回 Enforcing),重启后失效。永久修改要改/etc/selinux/config里的SELINUX=那一行,改成permissive或disabled,重启生效。

这里给一个实际建议:不要急着把 SELinux 关掉。很多“服务起不来”的问题被归因到 SELinux,实际上是不了解上下文标签的机制。正确的做法是先用ausearch -m avc -ts recent看有没有拒绝记录,再用semanage fcontext或chcon修正标签。实在搞不定再临时切到 Permissive 排查,而不是直接 Disabled。Disabled 之后再想开回来,需要对整个文件系统做重新打标签(touch /.autorelabel然后重启),耗时很长。

防火墙用firewalld。查看状态systemctl status firewalld,查看已开放规则firewall-cmd --list-all。放行端口的命令是:

firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload

注意--permanent和--reload这一对必须配合使用。只加--permanent不 reload,规则不生效;只加不带--permanent的,规则立即生效但重启后丢失。这个双段式设计很多人第一次用会懵。

放行服务用firewall-cmd --permanent --add-service=http,内置的服务名可以用firewall-cmd --get-services查。如果是要放行一整个网段访问某个端口,用富规则:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'。

7. 安装环节真实踩过的坑

7.1 黑屏只有光标闪

现象:开机选完安装项,屏幕上只有一个白色光标在左上角闪,没有任何输出,等十分钟也不动。

这个问题的成因有两类。一类是显示模式问题,前面第 3.1 节提过,在启动菜单按e编辑,在linuxefi或linux16那行末尾加nomodeset,然后Ctrl+X启动。这个参数让内核不加载 KMS 显示驱动,用最基本的 VESA 模式跑安装器。装完系统后如果重启还是黑屏,需要在/etc/default/grub的GRUB_CMDLINE_LINUX里加上nomodeset,然后grub2-mkconfig -o /boot/grub2/grub.cfg重新生成配置。

另一类是介质或引导模式问题。表现为按e加了参数也没用,启动到某个阶段直接停住。这时候要检查的是:U 盘写入模式对不对、BIOS 里的启动模式(UEFI / Legacy)和安装介质是否匹配、机器的安全启动(Secure Boot)有没有关掉。CentOS 7 的安装介质在某些机器上不支持 Secure Boot,没关掉会直接拒绝引导。

还有一个相对少见但确实存在的成因:机器内存有问题。安装器启动时需要把整个运行环境加载到内存里,内存有坏块的话会在加载阶段卡死。这种情况用安装器菜单里的“内存测试”跑一轮就能确认。我遇到过一次,换了内存条之后一切正常,前面折腾的 U 盘和参数全是在错误的方向上浪费时间。

排查这类问题的思路应该是从外到内:先换 U 盘接口(USB 2.0 和 3.0 口在部分老机器上兼容性不同),再检查 BIOS 的启动模式和安全启动,再加启动参数,最后测硬件。不要一上来就怀疑镜像。

7.2 网卡从 eth0 变成 ens33

现象:装完系统后ifconfig或者ip addr看不到eth0,只有一个ens33。按老文档改/etc/sysconfig/network-scripts/ifcfg-eth0,改完重启没效果。

原因是 CentOS 7 开始启用了一致性网络设备命名规则,根据网卡在主板上的物理位置(PCI 总线号)来命名,所以名字会变成ens33、eno1、enp3s0这类。这个设计的初衷是让网卡名在多块网卡的机器上保持稳定,不会因为插拔或者驱动加载顺序变化而乱掉。

要让网卡名回到eth0,需要改内核启动参数。编辑/etc/default/grub,在GRUB_CMDLINE_LINUX那行加上net.ifnames=0 biosdevname=0,然后重新生成 GRUB 配置:

grub2-mkconfig -o /boot/grub2/grub.cfg

如果是 UEFI 启动,路径是/boot/efi/EFI/centos/grub.cfg。执行前先确认路径存在,写错路径不会报错,但配置不生效,重启后还是老样子。

改完之后还要把/etc/sysconfig/network-scripts/ifcfg-ens33重命名为ifcfg-eth0,并把文件里的NAME和DEVICE两行都改成eth0。网卡名变了但配置文件没改,重启后网卡不会起来。

这里说明一个取舍:我不建议在新装环境里改回eth0。一致性命名是更好的设计,改回去只是为了兼容老脚本。如果你的自动化脚本里写死了eth0,更合理的做法是改脚本,用ip route get 1.1.1.1 | awk '{print $5}'这类方式动态获取出口网卡名,而不是把系统配置迁就脚本。

7.3 最小化安装后连 ifconfig 都没有

现象:选最小化安装,装完登录,敲ifconfig提示command not found,敲wget也没有,敲vim打开的是 vi 的残缺版本。

这是最小化安装的正常表现,不是故障。CentOS 7 最小化安装只装@core包组,net-tools(提供ifconfig、netstat、route)、wget、vim-enhanced都不在里面。

替代方案是先用手头有的命令:

  • 查 IP:ip addr或ip a(iproute包在 core 里,一定有)
  • 查路由:ip route
  • 查端口:ss -tlnp(替代netstat -tlnp)
  • 下载文件:curl -O(curl通常在 core 里)

确认网络通之后,用yum install -y net-tools wget vim-enhanced补齐。如果 yum 报源解析失败,就是第 6.2 节说的归档源问题,先解决源再装包。

另一个类似的坑是bash-completion。最小化安装没有它,命令补全只能补文件名,不能补命令参数。装上之后systemctl、yum、firewall-cmd的子命令和选项都能 Tab 补全,日常效率差别很大。这个包在 core 之外,需要单独装。

还有一个容易被忽略的:man手册页。最小化安装里很多包的手册页是分离的(man-pages包),不装的话man ls会报No manual entry for ls。在内网环境查资料不方便的时候,本地手册是最后的依靠,建议装上。

最后再补一个安装环节的细节:如果安装过程中断电或者强制重启,再次启动安装器可能会提示“已有的文件系统结构”,需要手动选择“回收空间”或者删除旧分区才能继续。这不是坏事,是安装器在保护你已有的数据。确认盘里没有要保留的东西之后,直接点“删除全部”清理干净再装,比在残留的分区表上折腾省事得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询