20.1 系统基本设置

20.1.1 网络设置(手动设置与 DHCP 自动取得)

CentOS 7 使用 nmcli (NetworkManager CLI) 管理网络,网卡命名规则:

名称说明
eno1主板 BIOS 内置网卡
ens1主板 BIOS 内置 PCI-E 网卡
enp2s0PCI-E 独立网卡(可能有 s0, s1 多插孔)
eth0上述都不适用时的默认编号

ifconfig -a 可列出所有网卡,不管叫什么名字。

手动设置固定 IP

需要参数:IP、Netmask、Gateway、DNS、hostname。

nmcli connection show                           # 查看所有连线代号(NAME=连线代号, DEVICE=网卡)
nmcli connection show eth0                      # 查看 eth0 的详细设置
关键参数说明示例
connection.autoconnect开机时是否启动yes / no
ipv4.method手动还是自动manual / auto
ipv4.addressesIP/子网掩码172.16.1.1/16
ipv4.gateway默认网关172.16.200.254
ipv4.dnsDNS 服务器 IP172.16.200.254
# 设置网络参数
nmcli connection modify eth0 \
  connection.autoconnect yes \
  ipv4.method manual \
  ipv4.addresses 172.16.1.1/16 \
  ipv4.gateway 172.16.200.254 \
  ipv4.dns 172.16.200.254
 
# 启动连线使配置生效
nmcli connection up eth0
nmcli connection show eth0     # 确认 IP4.ADDRESS, IP4.GATEWAY, IP4.DNS

DHCP 自动取得

nmcli connection modify eth0 \
  connection.autoconnect yes \
  ipv4.method auto
nmcli connection up eth0

修改主机名称

hostnamectl                     # 显示当前主机名 + 系统信息(OS版本、核心版本、硬件架构)
hostnamectl set-hostname www.centos.vbird    # 修改主机名(写入 /etc/hostname)

20.1.2 日期与时间设置

timedatectl [command]
命令说明
timedatectl显示本地时间、UTC 时间、时区、NTP 状态等
timedatectl list-timezones列出所有支持的时区
timedatectl set-timezone "Asia/Taipei"设置时区
timedatectl set-time "2015-09-01 12:02"设置日期时间(格式 yyyy-mm-dd HH:MM)
timedatectl set-ntp yes / no启用/关闭 NTP 网络校时

timedatectl set-time 会同时更新系统时间和 BIOS 时钟(替代了过去 date + hwclock 两步操作)。

手动网络校时

ntpdate tock.stdtime.gov.tw     # 与台湾标准实验室时间服务器同步
hwclock -w                       # 同步到 BIOS

💡不喜欢自动 NTP(会多开端口),可以写 crontab 定期执行 ntpdate + hwclock -w

20.1.3 语系设置

localectl                       # 显示"系统语系"设置(全局默认)
locale                          # 显示"当前 bash 的语系"(可以被 export 临时覆盖)

系统语系与用户语系可以不同:

# 将系统默认语系改为英文
localectl set-locale LANG=en_US.utf8
systemctl isolate multi-user.target
systemctl isolate graphical.target   # 重新进入图形界面后生效

20.1.4 防火墙简易设置

CentOS 7 默认防火墙机制为 firewalld,命令行工具为 firewall-cmd,也可用图形界面(应用程序 → 杂项 → 防火墙)。

两种规则模式

模式说明
执行时期 (Runtime)临时生效,重启后消失
永久记录 (Permanent)写入配置文件,需 --reload 生效

⚠️ 一定要在永久记录区添加规则!否则下次重载就失效。

界域 (zone):firewalld 预定义了多种网络环境(public, trusted, dmz, drop 等),默认使用 public zone 即可。

图形界面操作

  1. 选择 “永久” → 选择 public zone
  2. 在”服务”页签勾选需要放行的服务(http, https, ftp, ssh 等)
  3. 在”端口”页签添加非标准端口(如 222/tcp, 555/tcp)

命令行添加富规则(rich rule)

# 放行整个网段(图形界面可能有问题,直接用命令行)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
firewall-cmd --reload     # ⚠️ 永久规则修改后必须 reload 才生效

20.2 服务器硬件数据的收集

20.2.1 以系统内置 dmidecode 解析硬件配备

dmidecode -t type    # 解析 CPU、主板、内存等硬件信息
type内容
1系统数据(主板型号、硬件基础信息)
4CPU 相关信息(倍频、外频、核心数、超线程数)
9系统插槽格式(PCI, PCI-E 等)
17每个内存插槽规格(容量、型号)
dmidecode -t 1     # 查主板型号、制造商
dmidecode -t 17    # 查每根内存规格(升级内存前必查!)

💡 升级硬件前用 dmidecode 查型号,再去原厂网站确认兼容性。

20.2.2 硬件资源的收集与分析

系统核心侦测到的硬件记录在 /proc/sys 中。常用硬件查看指令:

指令用途
gdisk -l分区表
dmesg核心运行过程中显示的讯息记录
vmstatCPU/RAM/IO 状态分析
lspciPCI 接口设备(显卡、网卡、USB控制器等)
lsusbUSB 端口状态与连接设备
iostatCPU 与磁盘 I/O 状态(需安装 sysstat)

lspci

lspci                       # 列出所有 PCI 设备
lspci -v                    # 详细信息
lspci -vv                   # 最详细信息
lspci -s 00:03.0 -vv        # 查看特定总线设备
lspci -n                    # 显示 PCI ID 而非厂商名称
update-pciids               # 在线更新 PCI ID 对照表
# 对照表:/usr/share/hwdata/pci.ids

lsusb

lsusb              # 列出所有 USB 设备(Bus, Device, ID, 厂商)
lsusb -t           # 树状显示 USB 端口层级关系

iostat(需 yum install sysstat):

iostat                              # CPU + 所有磁盘的读写统计
iostat -d 2 3 vda                   # 只看 vda,每 2 秒一次,共 3 次
指标含义
tps平均每秒传输次数(与次数有关,非容量)
kB_read/s / kB_wrtn/s开机至今平均每秒读写量
kB_read / kB_wrtn开机至今总读写量

第一次显示的值 = 开机至今累计;后续侦测 = 两次侦测之间的增量。

20.2.3 了解磁盘的健康状态

SMART (Self-Monitoring, Analysis and Reporting Technology) — 磁盘自我监测系统。CentOS 通过 smartd 服务 + smartctl 指令实现。

smartctl -a /dev/sda              # 显示磁盘完整信息(制造商、型号、SMART 状态)
# SMART overall-health self-assessment test result: PASSED   ← 关键!
 
smartctl -t short /dev/sda        # 触发一次短自检
smartctl -a /dev/sda              # 再次查看,确认 "Completed without error"

⚠️ 自检时磁盘 I/O 较频繁,不建议在系统忙碌时执行。虚拟机磁盘通常不支持 SMART。

20.3 备份要点

20.3.1 备份数据的考虑

系统损毁原因

类型示例
硬件问题硬盘坏道、RAID 控制芯片故障、电源不稳
软件/人为操作不当(rm -rf /)、资安攻击、配置错误

备份因素考虑:备份哪些文件、选择什么媒介、备份方式(完整/差异)、备份频率、备份工具。

主机任务不同 → 备份策略不同。Internet 服务主机(如论坛数据库)需要高频备份,个人桌面可以低频。

20.3.2 哪些 Linux 数据具有备份的意义

需要备份的目录

目录原因
/etc/所有系统配置文件
/home/用户主文件夹
/root/root 的家目录
/var/spool/mail/用户邮件
/var/spool/{at,cron}/例行性工作调度
/boot/核心文件
/usr/local//opt/自行安装的软件
/var/lib/服务运行时产生的数据(如 MySQL 数据库)
/var/www//srv/www/WWW 网页数据

不需要备份的目录

目录原因
/proc, /sys, /run虚拟文件系统,记录内存中的系统状态
/mnt, /media外部设备挂载点(除非自己放了数据)
/tmp暂存档,没必要备份
/dev设备文件,随便

20.3.3 备份用储存媒体的选择

异地备援:将数据通过网络备份到另一个物理位置的机器上。缺点是需要带宽。

本地备援方案

方案说明
NAS(推荐)内嵌 Linux 的小型服务器,支持 RAID 容错,通过网络传输
USB 外接硬盘便宜容量大,建议买 2-3 颗轮流备份
Tape 磁带企业传统方案,适合长期保存但怕消磁/发霉
光盘已不适合现代数据量

💡 记得”备份的媒体被一起偷走”这个惨痛教训——异地备援是最终保障。

20.4 备份的种类、频率与工具的选择

20.4.1 完整备份之累积备份 (Incremental backup)

原理:第一次完整备份后,每次只备份与上次备份之间的差异。

周一:完整备份 (level 0)
周二:累积备份 (level 1) — 与周一的差异
周三:累积备份 (level 2) — 与周二的差异
周四:累积备份 (level 3) — 与周三的差异

还原:需要还原完整备份 + 所有中间累积备份(还原顺序:周一→周二→周三→周四)。

优点:备份数据量小、速度快。缺点:还原麻烦,中间任何一个备份损坏都会影响后续。

常用工具

工具用途
dd直接读扇区,可完整复制磁盘(慢)
cpio配合 find 备份所有文件
xfsdumpXFS 原生支持累积备份
tar配合 --exclude 排除目录进行完整备份
# dd — 完整复制磁盘
dd if=/dev/sda of=/dev/sdb
 
# tar — 完整备份(排除虚拟文件系统和备份目录自身)
tar --exclude /proc --exclude /mnt --exclude /tmp \
    --exclude /backupdata -jcvp -f /backupdata/system.tar.bz2 /
 
# xfsdump — 完整备份 (level 0)
xfsdump -l 0 -L 'full' -M 'full' -f /backupdata/home.dump /home
# 第一次累积备份 (level 1)
xfsdump -l 1 -L 'full-1' -M 'full-1' -f /backupdata/home.dump1 /home

20.4.2 完整备份之差异备份 (Differential backup)

原理:每次备份都与原始完整备份比较,备份所有变更。

周一:完整备份 (level 0)
周二:差异备份 — 与周一的差异(小)
周三:差异备份 — 与周一的差异(较大)
周四:差异备份 — 与周一的差异(更大)

还原:只还原完整备份 + 最近一次差异备份即可。

对比累积备份差异备份
备份数据量随运行时间增长而变大
备份速度越来越慢
还原速度慢(需逐一还原)快(只需最后一次)

tar 的差异备份

tar -N '2015-09-01' -jpcv -f /backupdata/home.tar.bz2 /home
# 只打包 2015-09-01 之后更新的文件

rsync 镜像备份

rsync -av 来源目录 目标目录
rsync -av /home /backupdata/    # 镜像 /home 到 /backupdata/home
# 第二次执行时仅传输差异部分,速度极快

20.4.3 关键数据备份

不备份整个系统,只备份关键配置和数据。适用于对恢复时间不敏感的场景。

优点:备份快、数据量小;系统被攻破 → 重新装最新的 Linux,把数据填回去即可(还能趁机升级和复习系统设置)。

缺点:还原比较麻烦,需要熟悉系统运行;涉及 SELinux 迁移时可能费时。

# 以日期命名备份文件
tar -jpcvf mysql.$(date +%Y-%m-%d).tar.bz2 /var/lib/mysql

裸机复原可用台湾 NCHC 的再生龙 (Clonezilla)http://clonezilla.nchc.org.tw/

20.5 鸟哥的备份策略

鸟哥的”鸟站”备份策略(不完整备份,仅关键数据 + 分层频率):

频率内容位置
每日MySQL 数据库/backup/daily/
每周/home, /var, /etc, /boot, /usr/local 等/backup/weekly/
每月DVD 烧录 + 远端网络传输光盘 + 远端机器

20.5.1 每周系统备份的 script

核心思路:把各服务的配置文件 cp -a 到备份目录,再用 tar 打包大目录。

# 备份的服务配置:named, postfix, vsftpd, sshd, samba, www, others, userinfo
# 关键操作:
cp -a /etc/{passwd,shadow,group} $userinfod
tar -jpc -f $wwwd/mysql.tar.bz2 mysql
tar -jpc -f $others/etc.tar.bz2 etc
tar -jpc -f $userinfod/home.tar.bz2 home

脚本下载:http://linux.vbird.org/linux_basic/0580backup/backupwk-0.1.sh

20.5.2 每日备份数据的 script

只备份每天变化的数据(MariaDB 数据库 + CGI 程序),文件名带日期:

basedir=/backup/daily/
basefile1=$basedir/mysql.$(date +%Y-%m-%d).tar.bz2
cd /var/lib && tar -jpc -f $basefile1 mysql

crontab 自动化

30 2 * * * root /backup/backupday.sh      # 每天 2:30 备份数据库
30 3 * * 0 root /backup/backupwk.sh       # 每周日 3:30 备份重要文件

20.5.3 远端备援的 script

通过 rsync + ssh 将备份传输到远端主机(加密传输,不需要 FTP):

#!/bin/bash
# /backup/rsync.sh
remotedir=/home/backup/
basedir=/backup/weekly
host=192.168.1.100
id=dmtsai
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}

需要远端主机已配置 SSH 免密码登录。rsync 增量传输,没有变更的文件不重传。

20.6 灾难复原的考虑

硬件损毁(有完整备份)

  1. 替换/修复硬件
  2. 完整备份还原 → 最后一次差异/累积备份还原
  3. 完成

软件资安事件(被攻击)

不可直接还原旧系统(会被再次攻击!),应:

  1. 拔除网络线,将被攻破的系统完整备份到其他媒体(以备查验和自证清白)
  2. 分析登录文件,找出攻击来源和漏洞
  3. 安装最新版 Linux distribution
  4. 升级系统和防火墙
  5. 修复漏洞,还原服务数据
  6. 上线并持续测试

⚠️ 若你的主机被利用去攻击他人,保留被入侵的备份数据可以证明你是受害者而非攻击者。

命令速查表

命令用途
nmcli connection show查看网络连线
nmcli connection modify eth0 ipv4.method manual ...设置 IP
nmcli connection up eth0启动连线
hostnamectl set-hostname NAME修改主机名
timedatectl set-timezone "Asia/Taipei"设置时区
timedatectl set-time "2015-09-01 12:02"设置时间
ntpdate tock.stdtime.gov.tw手动网络校时
localectl set-locale LANG=en_US.utf8设置系统语系
firewall-cmd --permanent --add-rich-rule='...'添加防火墙富规则
firewall-cmd --reload重载防火墙规则
dmidecode -t 1 / -t 4 / -t 17查主板/CPU/内存硬件信息
lspci / lspci -v查看 PCI 设备
lsusb / lsusb -t查看 USB 设备
iostat / iostat -d 2 3 vda磁盘 I/O 统计
smartctl -a /dev/sda查看磁盘健康状态
smartctl -t short /dev/sda磁盘短自检
dd if=/dev/sda of=/dev/sdb完整磁盘复制
xfsdump -l 0 -f /backup/home.dump /homeXFS 完整备份
xfsdump -l 1 -f /backup/home.dump1 /homeXFS 累积备份
tar --exclude /proc -jcvp -f /backup/system.tar.bz2 /完整系统备份
tar -N 'date' -jpcv -f /backup/home.tar.bz2 /home差异备份
rsync -av /home /backupdata/快速镜像备份
rsync -av -e ssh /backup user@host:/backup/远端备援