2、Linux系统安装与初始化:CentOS/Ubuntu安装、磁盘分区方案、最小化安装原则、系统初始化配置

说实话,Linux安装这件事,很多新手觉得就是「下一步下一步」就完事了。但我在生产环境摸爬滚打这么多年,可以负责任地告诉你:安装这一步没走好,后面运维全是坑。今天我就把这块掰开了揉碎了讲清楚。

2.1 发行版选择:CentOS vs Ubuntu

先说说选哪个。我个人习惯是:企业生产环境用CentOS(现在更多是Rocky Linux/AlmaLinux),开发测试环境用Ubuntu。为什么?

对比项 CentOS / Rocky Linux Ubuntu Server
包管理 yum / dnf(.rpm) apt(.deb)
默认防火墙 firewalld ufw
内核版本 相对保守,稳定优先 较新,硬件兼容性好
生命周期 10年(CentOS Stream除外) 5年(LTS版本)
适用场景 金融、政务、传统企业 互联网、AI、容器化

我记得有一次帮客户迁移数据库服务器,对方坚持用Ubuntu 20.04。结果发现他们用的某国产数据库只提供rpm包……嗯,那两天光折腾依赖就花了半天。所以我的建议是:先搞清楚你的软件生态支持哪个发行版

2.2 磁盘分区方案——别等出事了再后悔

磁盘分区这事,我见过太多惨案了。有人把根分区只分了20G,跑了一个月磁盘就满了;有人把/home分了500G,结果根分区不够用……

这里我给出三套经过实战检验的方案:

方案一:服务器通用分区(推荐)

/boot       1G      # 引导分区,别太小
/          50G      # 根分区,系统核心
/var       100G     # 日志、数据库、缓存
/usr       100G     # 应用程序
/tmp        20G     # 临时文件,独立分区防爆满
swap        8G      # 交换分区,物理内存的1-2倍
/data      剩余空间  # 数据分区,业务数据放这里

为什么把/var单独分出来?我在项目中遇到过日志把根分区写满,导致系统无法启动的故障。从那以后,/var必须独立分区成了我的铁律。

方案二:LVM逻辑卷管理

如果你对灵活性要求高,用LVM。说白了就是可以动态调整分区大小,不用重新格式化。

/boot       1G      # 不能放LVM里
vg_root     剩余空间 # 创建卷组
  lv_root   50G
  lv_var   100G
  lv_usr   100G
  lv_tmp    20G
  lv_data   剩余空间
我的小技巧:LVM里留10%-20%的未分配空间。万一哪个分区不够了,直接扩容就行,不用停机。

方案三:云服务器场景

云厂商一般给你一块系统盘+多块数据盘。我的做法是:

  • 系统盘(40G-60G):只放操作系统和核心软件
  • 数据盘(按需):挂载到/data或/opt,放业务数据
  • 这样做的好处是:系统坏了直接重装,数据盘不受影响

2.3 最小化安装原则——少即是多

你想想看,一个系统装得越复杂,攻击面就越大,出问题的概率也越高。我见过有人装Linux选了「带GUI的服务器」,结果光图形界面就占了2G内存……

最小化安装的核心原则:

  • 只装你需要的包,一个多余的都不要
  • 不装GUI(除非你是桌面环境)
  • 不装开发工具(gcc、make这些,除非你要编译)
  • 不装不必要的服务(打印服务、蓝牙、Avahi等)
我曾经踩过的坑:有一次给客户装CentOS,图省事选了「Web服务器」模板。结果系统里自带了Apache、PHP、MySQL,版本还特别老。后来安全扫描出来一堆漏洞,光升级就折腾了两天。从那以后,我都是从最小化安装开始,需要什么装什么

2.4 系统初始化配置——新装系统的「八件套」

系统装完了,别急着上线。先把下面这几件事做了,能省掉后面80%的麻烦。

2.4.1 关闭SELinux(或设为宽容模式)

SELinux是好东西,但说实话,大部分运维人员搞不定它的策略配置。我建议:

# 临时关闭
setenforce 0

# 永久关闭(修改配置文件)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 或者设为宽容模式(只记录不阻止)
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
注意:如果你对安全要求极高(比如涉密系统),请保留SELinux并学习如何配置。否则,设为permissive模式是个折中方案。

2.4.2 配置防火墙

CentOS用firewalld,Ubuntu用ufw。我的习惯是:

# CentOS / Rocky Linux
systemctl stop firewalld
systemctl disable firewalld   # 如果不用防火墙
# 或者只开放必要端口
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

# Ubuntu
ufw allow 22/tcp
ufw allow 80/tcp
ufw enable

我个人习惯是先关掉防火墙,等所有服务配置好了再按需开启。不然调试的时候防火墙挡着,排查起来很痛苦。

2.4.3 配置网络

服务器一般用静态IP,别用DHCP。不然哪天IP变了,你连SSH都连不上。

# CentOS / Rocky Linux (NetworkManager)
nmcli con mod eth0 ipv4.addresses 192.168.1.100/24
nmcli con mod eth0 ipv4.gateway 192.168.1.1
nmcli con mod eth0 ipv4.dns "8.8.8.8 114.114.114.114"
nmcli con mod eth0 ipv4.method manual
nmcli con up eth0

# Ubuntu (netplan)
# 编辑 /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]
  version: 2

2.4.4 修改主机名

# 临时修改
hostnamectl set-hostname web-server-01

# 永久修改(修改/etc/hostname)
echo "web-server-01" > /etc/hostname

# 别忘了修改/etc/hosts,不然有些服务会报错
echo "192.168.1.100 web-server-01" >> /etc/hosts

2.4.5 其他初始化操作

  • 时间同步:安装chrony或ntp,确保服务器时间准确
  • 配置yum/apt源:换成国内镜像(阿里云、清华、中科大)
  • 创建普通用户:别直接用root,用sudo提权
  • 配置SSH:禁用密码登录,改用密钥认证
# 创建用户并赋予sudo权限
useradd -m -s /bin/bash opsadmin
passwd opsadmin
usermod -aG wheel opsadmin   # CentOS
# usermod -aG sudo opsadmin  # Ubuntu

# SSH密钥认证
ssh-keygen -t rsa -b 4096
ssh-copy-id opsadmin@服务器IP

2.5 知识体系总览

下面这张图,是我梳理的Linux系统安装与初始化的核心流程。你可以把它当作一个检查清单:

Linux系统安装与初始化 · 知识体系 1. 发行版选择 2. 安装方式 3. 核心决策:最小化安装 磁盘分区方案 系统初始化配置 安全加固 · 通用分区 / LVM / 云场景 · /var独立 / 预留空间 · SELinux / 防火墙 / 网络 · 主机名 / 时间同步 / 用户 · SSH密钥认证 · 最小化安装原则

这张图把整个流程串起来了。从发行版选择开始,到安装方式,再到最小化安装原则,最后落到三个核心动作:分区、初始化、安全加固。你照着这个顺序做,基本不会出大问题。

最后说一句:系统初始化这件事,别嫌麻烦。我见过太多人图省事,结果后面出问题花的时间是初始化时的十倍。把基础打牢,后面运维才轻松。

公众号:蓝海资料掘金营,微信deep3321