1. 项目概述:为什么服务器安装CentOS是运维的必修课
在数据中心、云平台或者你自己的机房里,一台裸金属服务器就像一块未经雕琢的璞玉。要让这块“玉”发挥价值,第一步就是给它安装一个稳定、可靠的操作系统。对于绝大多数企业级应用和互联网服务而言,Linux是毋庸置疑的首选,而在众多Linux发行版中,CentOS以其与Red Hat Enterprise Linux(RHEL)的二进制兼容性、长达十年的生命周期支持以及庞大的社区生态,长期占据着服务器操作系统领域的核心地位。尽管CentOS官方已经转向了CentOS Stream,但CentOS 7和其历史版本依然是当前生产环境中存量最大、最受信任的系统之一。掌握从零开始在一台物理服务器上安装CentOS,是每一位系统管理员、运维工程师乃至开发者的基础技能。这不仅仅是点几下鼠标、敲几行命令那么简单,它涉及到对服务器硬件架构的理解、启动流程的掌控、磁盘规划的智慧以及网络配置的精准性。一个成功的安装,能为后续所有服务的稳定运行打下坚实的基础;而一个疏忽,则可能埋下性能瓶颈甚至安全漏洞的隐患。本教程将带你完整走一遍这个流程,从制作启动盘到系统初始化,分享我十多年来在数百台服务器上安装系统时积累的实战经验和避坑指南。
2. 安装前的核心准备工作:细节决定成败
很多人觉得安装系统就是“下一步、下一步、完成”,但在服务器环境,尤其是远程无人值守安装时,准备工作的重要性远超安装过程本身。仓促上阵往往意味着后续要花数倍的时间去排查各种诡异问题。
2.1 硬件与镜像的精确匹配
首先,你需要获取CentOS的安装镜像。访问CentOS官方存档站点(如 vault.centos.org)或国内可靠的镜像源(如阿里云、腾讯云镜像站)。关键点在于选择与你的服务器硬件架构完全匹配的版本。目前主流服务器都是x86_64架构,务必下载标注为x86_64的ISO文件。对于生产服务器,我强烈推荐Minimal ISO(最小化安装镜像)。它只包含最基础的系统包,体积小,下载快,更重要的是,它强迫你从零开始构建所需的服务环境,避免了图形界面等无用组件带来的额外安全风险和资源占用。记住,服务器追求的是稳定、高效和安全,不是用户体验。
注意:务必核对下载镜像的校验和(SHA256或MD5)。从非官方源下载的镜像,一定要进行校验,确保文件完整且未被篡改。我曾遇到过因镜像损坏导致安装中途报错,排查了大半天才发现是下载的文件有问题。
2.2 启动介质制作与服务器引导设置
将ISO镜像刻录到U盘或通过网络引导(如PXE)是两种主要方式。对于单台或少量服务器,使用U盘最为便捷。不要使用Windows自带的“格式化+复制”方法,这制作出的U盘通常无法引导。应使用专业的工具,如Rufus(Windows)、dd命令(Linux/Mac)或Etcher(跨平台)。以Linux下的dd命令为例,这是一个需要高度谨慎的操作:
# 首先,使用 lsblk 或 fdisk -l 确认你的U盘设备名,例如是 /dev/sdb sudo dd if=/path/to/centos.iso of=/dev/sdb bs=4M status=progress oflag=sync这条命令会将ISO内容以“磁盘映像”模式写入U盘,bs=4M设置块大小以提高速度,oflag=sync确保数据完全同步写入。警告:务必确认of=参数后的设备名是你的U盘,写错会导致指定硬盘数据全部丢失!
制作好启动盘后,将其插入服务器。开机并进入BIOS/UEFI设置界面(通常按F2、Del、F12等键)。你需要调整几个关键设置:
- 启动模式:较新的服务器都支持UEFI。如果硬件支持,优先选择
UEFI模式,它比传统的Legacy BIOS启动更快、更安全,支持GPT分区表和大于2TB的硬盘。如果硬件较旧,则选择Legacy或BIOS模式。 - 启动顺序:将你的U盘(或网络引导)调整到第一启动项。
- 安全启动(Secure Boot):在某些情况下,安全启动可能会阻止非签名的系统加载。如果遇到无法引导的问题,可以尝试在BIOS中暂时禁用
Secure Boot。 - 虚拟化技术:如果后续需要在服务器上运行KVM虚拟机,确保CPU的虚拟化支持(Intel VT-x / AMD-V)在BIOS中是开启状态。
2.3 远程管理接口配置(至关重要)
这是服务器安装区别于个人电脑安装最核心的一环。你很可能不是在机房本地,而是通过远程来操作。服务器的带外管理接口(如iDRAC、iLO、BMC)就是你的“千里眼”和“顺风耳”。以戴尔服务器的iDRAC为例,你需要在BIOS中配置iDRAC的专用管理网口IP地址、用户名和密码。
配置好后,你就可以通过另一台电脑的浏览器,访问这个IP地址,登录到iDRAC的Web管理界面。在这里,你可以实现:
- 虚拟控制台:像坐在服务器前一样,实时看到开机画面、BIOS设置和CentOS安装界面,并能用本地键盘鼠标远程操作。
- 虚拟介质挂载:直接将你电脑上的CentOS ISO镜像文件,通过网络映射给服务器,当作一个虚拟光驱。这比用U盘更灵活,尤其适合批量安装。
- 电源控制:远程开机、关机、重启。
- 硬件监控:查看CPU温度、风扇转速、硬盘健康状态等。
确保远程管理口配置正确且网络可达,是你能否顺利进行后续安装的前提。我建议在安装开始前,先通过这个管理口成功打开虚拟控制台并看到服务器自检画面。
3. 逐步详解CentOS安装流程与关键决策
当服务器从你的启动介质成功引导后,将进入CentOS安装程序的欢迎界面。以下步骤结合了图形化安装(适用于有虚拟控制台的情况)和可能需要的文本模式安装思路。
3.1 安装引导与语言选择
首先你会看到安装菜单,选择Install CentOS 7(或其他对应版本)并回车。第一个重要选择是安装过程使用的语言和键盘布局。这里有一个关键技巧:语言建议选择English (United States)。虽然你可以选择中文,但将系统语言设置为英文有助于避免后续在终端、日志文件中出现乱码,并且绝大多数运维文档、错误代码都是以英文描述的,统一的环境能减少很多麻烦。这个选择只影响安装过程本身,系统安装后的语言可以再单独设置。
3.2 安装信息摘要与核心配置
接下来进入“安装信息摘要”界面,这是配置的核心区域。所有带警告感叹号的项都必须配置完成才能开始安装。
日期与时间:点击进入,务必启用网络时间协议(NTP),并添加一个可靠的NTP服务器地址,如
cn.pool.ntp.org。保证服务器时间准确是日志分析、证书验证、定时任务等一切服务的基础。键盘与语言支持:键盘布局确认即可。语言支持可以在这里添加额外的语言包,但如前所述,系统语言建议保持英文。
安装源:如果你使用镜像文件安装,这里会自动检测到本地介质。如果是网络安装,则需要配置HTTP、FTP或NFS源地址。
软件选择:这是体现“最小化安装”理念的一步。强烈建议选择
Minimal Install(最小安装)。这个环境只提供命令行界面和最基本的工具。你需要什么服务(如Web服务器、数据库),后续再用yum命令单独安装。这确保了系统的纯净和高性能。如果确实需要图形界面(极少见于生产服务器),可以选择Server with GUI。安装目的地(磁盘分区):这是最具技术含量的一步。点击进入后,你会看到服务器上的硬盘。如果只有一块盘,通常会自动选中。
- 分区方案:我推荐手动分区,以便更精细地控制。点击“我要配置分区”,然后选择
LVM(逻辑卷管理)。LVM提供了巨大的灵活性,允许你在未来动态调整分区大小,而无需重启系统。 - 创建标准分区:在LVM下,我通常创建以下卷组和逻辑卷:
/boot分区: 非LVM, ext4格式, 1GB。存放系统内核和引导文件。必须独立,且不能是LVM。swap交换分区: 大小一般为物理内存的1-2倍,如果内存很大(如64GB以上),8-16GB也足够了。用于内存溢出时的缓冲。/根分区: 占用剩余的大部分空间, ext4或xfs格式。xfs是CentOS 7的默认文件系统,支持超大容量和文件,性能良好。- (可选)
/home或/data分区: 根据业务需要,可以将用户目录或数据目录单独分区。
点击“完成”后,安装程序会显示分区更改摘要,确认无误后接受更改。
- 分区方案:我推荐手动分区,以便更精细地控制。点击“我要配置分区”,然后选择
网络和主机名:点击进入,先在上方设置主机名,例如
server01.example.com。然后,最关键的是打开页面右上角的以太网连接开关(通常显示为OFF,点击一下变成ON)。如果网络支持DHCP,系统会自动获取IP地址。但对于服务器,我强烈建议配置静态IP。点击“配置”按钮,选择“IPv4设置”,方法改为“手动”,点击“添加”,输入IP地址、子网掩码、网关和DNS服务器。DNS可以设置两个,如114.114.114.114和8.8.8.8。配置好后,点击“保存”。你可以在安装界面右上角看到网络已连接。
3.3 用户设置与安装启动
- ROOT密码:设置一个强壮的root用户密码。在服务器环境,root密码是最高权限的钥匙,必须复杂且妥善保管。点击两次“完成”确认。
- 创建用户:虽然你可以直接用root操作,但基于安全最佳实践,应该创建一个日常使用的普通用户,并授予其
sudo权限。点击“创建用户”,输入用户名和密码,务必勾选“将此用户设为管理员”,这相当于赋予了sudo权限。
当所有带感叹号的红色警告都消失后,点击右下角的“开始安装”按钮。安装程序会格式化磁盘、复制文件、安装软件包。这个过程取决于硬件性能和所选软件包数量,一般需要10到30分钟。
安装完成后,点击“重启”按钮。服务器会重启,在第一次启动时,可能会有一个初始化设置(首次登录许可协议),通常直接前进即可。最终,你会看到字符界面的登录提示符。
4. 安装后的首要配置与安全加固
系统安装完成并首次登录,这仅仅是开始。一个直接暴露在网络中的“裸”系统是非常危险的。以下是我每次装完系统后必做的几件事,堪称“服务器上线 checklist”。
4.1 基础网络与SSH安全配置
首先,确认网络是否通畅:
ping -c 4 baidu.com如果无法解析域名,检查/etc/resolv.conf文件中的DNS配置是否与安装时设置的一致。如果IP不通,检查/etc/sysconfig/network-scripts/ifcfg-ens33(网卡名可能不同)文件中的静态IP配置。
接下来是重中之重——SSH安全加固。默认的SSH配置存在风险。
- 修改SSH端口:编辑
/etc/ssh/sshd_config文件,找到#Port 22这一行,去掉注释#,并将22改为一个大于1024的非知名端口,例如Port 23456。这能减少大量自动化扫描和爆破攻击。 - 禁止root直接登录:在同一文件中,找到
#PermitRootLogin yes,改为PermitRootLogin no。这样攻击者无法直接用root账号尝试密码。 - 使用密钥认证:在本地电脑生成SSH密钥对(
ssh-keygen),然后将公钥(~/.ssh/id_rsa.pub)的内容,复制到服务器的~/.ssh/authorized_keys文件中。然后在sshd_config中设置PasswordAuthentication no来彻底禁用密码登录,只允许密钥登录。这是最有效的防爆破手段。 - 每次修改SSH配置后,使用
systemctl reload sshd重新加载服务,但务必保持当前连接不断开,并新开一个终端用新配置测试连接成功,再关闭旧会话。
4.2 系统更新与防火墙设置
更新系统到最新状态,并安装常用工具:
sudo yum update -y sudo yum install -y vim wget net-tools epel-releaseepel-release是Extra Packages for Enterprise Linux仓库,提供了大量额外的软件包。
配置防火墙(firewalld):
sudo systemctl start firewalld sudo systemctl enable firewalld sudo firewall-cmd --permanent --add-port=23456/tcp # 添加你修改后的SSH端口 sudo firewall-cmd --reload sudo firewall-cmd --list-all # 查看规则默认策略是阻止所有传入连接,只允许传出。你需要显式打开业务所需的端口(如Web服务的80/443)。
4.3 创建日常运维用户与Sudo权限细化
虽然安装时可能创建了管理员用户,但我们可以做得更细致。创建一个专门的运维用户,并配置sudo权限,使其无需密码即可执行特定的管理命令(如重启服务、查看日志),但执行其他高危操作(如rm -rf /)仍需密码。
sudo useradd -m -s /bin/bash sysadmin sudo passwd sysadmin编辑sudoers文件,使用visudo命令(它提供语法检查):
sudo visudo在文件末尾添加:
sysadmin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart *, /usr/bin/systemctl status *, /usr/bin/tail -f /var/log/* sysadmin ALL=(ALL) ALL第一行允许sysadmin用户无需密码执行特定的服务管理和日志查看命令;第二行表示执行其他所有命令仍需输入密码。这种细化的权限控制,既方便了日常运维,又增加了安全性。
5. 实战中遇到的典型问题与排查实录
即便按照教程操作,在实际的机房环境中,你仍可能遇到各种意外。下面是我总结的几个高频问题及解决方法。
5.1 安装引导失败或卡住
- 现象:从U盘或虚拟介质引导后,屏幕黑屏、卡在
dracut提示符、或提示找不到启动设备。 - 排查思路:
- 介质问题:首先怀疑启动介质。重新用
dd或Rufus以DD模式(而非ISO模式)刻录U盘。确保ISO镜像校验和正确。 - 引导模式不匹配:如果服务器硬盘之前是用UEFI模式安装的系统,而现在用Legacy模式引导U盘,可能会失败。确保BIOS中的引导模式(UEFI/Legacy)与你的安装介质和目标硬盘的预期模式一致。对于全新安装,统一使用UEFI模式(如果硬件支持)并确保硬盘分区表为GPT。
- 硬件驱动问题:特别是对于非常新的服务器硬件,安装镜像可能缺少对应的存储控制器(如RAID卡)或网卡驱动。此时会卡在
dracut阶段。解决方法是在安装引导时,修改内核启动参数。在安装菜单界面,按Tab或e键编辑启动项,在quiet参数后面添加nomodeset(禁用显卡驱动)或dd(加载额外驱动)。更根本的解决方法是寻找集成了新版驱动或使用对应厂商定制版的安装镜像。
- 介质问题:首先怀疑启动介质。重新用
5.2 磁盘分区与LVM的常见坑
- 现象:在“安装目的地”界面看不到硬盘,或分区后提示空间不足、创建失败。
- 排查与解决:
- 硬盘未识别:可能是RAID卡驱动未加载。对于硬件RAID,需要在BIOS或RA卡配置界面(开机时有提示,如按Ctrl+R)先创建好虚拟磁盘。对于软件RAID或直通模式,确保安装程序能识别到物理盘。
- 旧分区表残留:如果硬盘是旧的,上面可能有残留的分区表或LVM物理卷签名,导致安装程序无法正常使用。可以在安装界面的“磁盘分区”页面,点击“回收空间”或“删除所有分区”。更彻底的做法是,在进入安装程序前,通过救援模式或Live系统使用
wipefs -a /dev/sda和dd if=/dev/zero of=/dev/sda bs=1M count=100命令清除磁盘头部信息(此操作不可逆,会彻底清空磁盘!)。 - LVM空间分配逻辑:手动创建LVM时,容易混淆“卷组”和“逻辑卷”的剩余空间。在LVM架构中,空间是从物理卷(PV)->卷组(VG)->逻辑卷(LV)层层分配的。你需要在VG中预留一部分空间,以便未来扩展LV。创建LV时,不要一次性把VG的空间全部分配掉。
5.3 网络配置与首次启动后无法连接
- 现象:安装时配置了静态IP,但重启后无法ping通网关或外网。
- 排查步骤:
ip addr或ifconfig:查看网卡是否已启动,是否获取到了你配置的IP地址。如果没有,检查/etc/sysconfig/network-scripts/ifcfg-ensXXX文件。- 重点检查配置文件中的几个关键参数:
BOOTPROTO=static、ONBOOT=yes、IPADDR、NETMASK、GATEWAY、DNS1。一个字母错误都会导致失败。 route -n:查看默认路由是否正确指向了网关。systemctl status network或systemctl status NetworkManager:查看网络管理服务状态。在CentOS 7中,NetworkManager和network服务可能并存,有时会有冲突。对于服务器,我通常禁用NetworkManager:sudo systemctl stop NetworkManager; sudo systemctl disable NetworkManager,然后使用传统的network服务:sudo systemctl restart network。- 防火墙和SELinux:虽然可能性较小,但可以暂时关闭防火墙(
systemctl stop firewalld)和将SELinux设置为宽容模式(setenforce 0)来测试是否是它们阻止了网络访问。这只是测试手段,问题解决后应根据安全策略重新配置。
5.4 远程管理口(iDRAC/iLO)无法访问
- 现象:配置了管理口IP,但无法ping通或无法打开Web界面。
- 解决:
- 确认你的电脑和服务器管理口在同一局域网段,且没有VLAN隔离。
- 在服务器开机自检时,注意看屏幕提示,是否有管理口IP地址显示。有时配置可能未保存成功。
- 尝试重置管理口到出厂设置。通常在BIOS设置里有相关选项,或者开机时按特定组合键(如戴尔服务器按Ctrl+E进入iDRAC配置)。
- 检查管理口的物理连接。有些服务器的管理口是专用的,需要插网线;有些是和第一个物理网口共享的。
6. 进阶考量:自动化安装与系统调优雏形
当你需要批量部署几十上百台相同配置的服务器时,手动点击安装就不再现实了。这时需要用到自动化安装技术。
6.1 使用Kickstart实现无人值守安装
Kickstart是Red Hat/CentOS系统的自动化安装应答文件。其核心是一个ks.cfg文件,里面用纯文本定义了安装过程中所有需要手动选择的选项:语言、分区方案、软件包列表、网络配置、用户密码等。
你可以通过手动安装一台样板机,然后从/root目录下找到生成的anaconda-ks.cfg文件,以此为基础进行修改。将这个文件放到一个Web服务器或FTP服务器上。然后在安装引导时,在启动菜单添加启动参数:inst.ks=http://your-web-server/path/to/ks.cfg。服务器启动后会自动读取该文件并完成全自动安装。
在Kickstart文件中,你可以精确控制分区:
part /boot --fstype="ext4" --size=1024 part pv.01 --size=1 --grow volgroup vg_root pv.01 logvol / --fstype="xfs" --size=1 --grow --name=lv_root logvol swap --fstype="swap" --size=8192 --name=lv_swap也可以预装所有软件包:
%packages @^minimal @core vim-enhanced wget net-tools %end甚至可以在安装后自动执行脚本(%post段),完成诸如更新系统、部署应用代码、修改配置文件等操作。掌握Kickstart,是运维自动化的重要一步。
6.2 初始性能与安全基线调优
系统装好后,除了基本安全配置,还有一些调优可以立即进行:
- 内核参数调优:编辑
/etc/sysctl.conf,针对Web服务器、数据库等不同角色调整参数。例如,对于高并发Web服务器,可以增加:
修改后执行net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 net.core.somaxconn = 65535sysctl -p生效。 - 文件描述符与进程数限制:编辑
/etc/security/limits.conf,提高系统资源限制,防止高并发下出现“Too many open files”错误。* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 - 配置国内YUM源:将默认的国外源替换为阿里云、腾讯云等国内镜像,可以极大提升软件包下载速度。
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo sudo yum makecache
服务器安装CentOS,从按下电源键到得到一个安全、稳定、可用的系统,每一步都蕴含着对硬件、网络、操作系统原理的理解。它远不是一项机械重复的任务,而是一次与机器深度对话的开始。把基础打牢,后续无论是部署Docker容器、编排Kubernetes集群,还是构建复杂的分布式应用,你都会更加得心应手。记住,最好的运维不是救火,而是通过严谨的流程和自动化的手段,让火灾根本不发生。而一个完美的系统安装,正是这一切的起点。