第20章 基础系统设定与备份策略

第20章 基础系统设定与备份策略

20.1 系统基本设定

20.1.1 网络设定(手动设定与DHCP自动获得)

  新的CentOS 7开始对于网卡的编号则有另一套规则,网卡的界面代号现在与网卡的来源有关~基本上的网卡名称会是这样分类的:

  • eno1: 代表由主板BIOS内建的网卡
  • ens1: 代表由主板BIOS内建的PCI-E界面的网卡
  • enp2s0: 代表PCI-E界面的独立网卡,可能有多个插孔,因此会有s0,s1...的编号~
  • eth0: 如果上述的名称都不适用,就回到原本的预设网卡编号

  其实不管什么网卡名称啦!想要知道你有多少网卡,直接下达【ifconfig -a】全部列出来即可!此外,CentOS 7也希望我们不要手动修改配置文件,直接使用所谓的nmcli这个指令来设定网络参数即可。

  • 手动设置IP网络参数
    假设你已经向你的ISP取得你的网络参数,基本上的网络参数需要这些数据的:
    • method: manual(手动设定)
    • IP:172.16.1.1.
    • netmask: 255.255.0.0
    • gateway: 172.16.200.254
    • DNS: 172.17.200.254
    • hostname: study.centos.vbird

  nmcli是透过一个名为【联机代号】的名称来设定是否要上网,而每个【联机代号】会有个【网卡代号】,这两个东西通常设定成相同就是了。那就先来查查看目前系统上默认有什么联机代号吧!

nmcli connection show [网卡代号]
nmcli connection show
NAME    UUID                                    TYPE        DEVICE
eth0    505a7445-2aac-45c8-92df-dc10317ecec22 802-3-ethernet eth0
# NAME就是联机代号,通常与后面的网卡DEVICE会一样!

  nmcli的输出中,最底下的大写的IP4,IP6指的是目前的实际使用的网络参数,最上面的connection开头的部分则指的是联机的状态!比较重要的参数鸟哥将它列出来如下:

  • connection.autoconnect [yes|no]: 是否开机时启动这个联机
  • ipv4.method [auto|manual]: 自动还是手动设定网络参数
  • ipv4.dns [dns_server_ip]: 就是DNS的IP地址
  • ipv4.addresses [IP/Netmask]: 就是IP与netmask的集合,中间用斜线/隔开~
  • ipv4.gateway [gw_ip]: 就是gateway

  所以,根据上面的设定项目,我们来将网络参数设定好吧!

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
# 上面只是“修改了配置文件”而已,要实际生效还得要启动(up)这个eth0联机界面才行喔!
nmcli connection up eth0
nmcli connection show eth0
  • 自动取得IP参数
nmcli connection modify eth0 \
connection.autoconnect yes \
ipv4.method auto
nmcli connection up eth0
nmcli connection show eth0
  • 修改主机名
    hostnamectl [set-hostname 你的主机名]

20.1.2 日期与时间设定

  • 时区的显示与设定
timedatectl [command]
选项与参数:
list-timezones: 列出系统上所有支持的时区名称
set-timezone: 设定时区位置
set-time: 设定时间
set-ntp: 设定网络校时系统
  • 时间的调整
    时间的格式可以是“yyyy-mm-dd HH:MM”的格式!
# 1. 将时间调整到正确的时间点上!
timedatectl set-time "2015-09-01 12:02"
  • 用ntpdate手动网络校时
ntpdate tock.stdtime.gov.tw
hwclock -w

20.1.3 语系设定

  我们在第四章知道有个LANG与locale的指令能够查询目前的语系与变量,也知道/etc/locale.conf其实就是语系的配置文件。此外,你还得要知道的是,系统的语系与你目前软件的语系数据可能是可以不一样的!如果想要知道目前【系统语系】的话,除了呼叫配置文件之外,也能够使用localectl来查阅。

localectl
locale

问:
如果你跟着鸟哥的测试机器一路走来,图形界面将会是中文万国码的提示登入字符。如何改成英文语系的登入界面?
答:
就是将locale改成en_US.utf8之后,再转成图形界面即可!
localectl set-locale LANG=en_US.utf8
systemctl isolate multi-user.target
systemctl isolate graphical.target

20.1.4 防火墙简易设定

  目前CentOS 7的预设防火墙机制为firewalld,他的管理界面主要是透过指令列firewall-cmd这个详细的指令。这个小节我们仅使用图形界面来介绍防火墙的相关数据而已!
  启动防火墙的图形管理界面,然后到【应用程序--杂项--防火墙】。

20.2 服务器硬件数据的收集

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

  系统有个名为dmidecode的软件,这个软件挺有趣的,它可以解析CPU型号、主板型号与内存相关的型号等等~

dmidecode -t type
选项与参数:
详细的type项目请man dmidecode查询更多的数据,这里权列出比较常用的项目:
1:详细的系统数据,含主板的型号与硬件的基础数据等
4: CPU的相关数据,包括倍频、外频、核心数、核心绪数等
9: 系统的相关插槽格式,包括PCI、PCI-E等等的插槽规格说明
17: 每一个内存插槽的规格,若内有内存,则列出该内存的容量与型号

20.2.2 硬件资源的收集与分析

  现在我们知道系统硬件是由操作系统核心所管理的,由第19章的开机流程分析中,我们也知道Linux kernel在开机时就能够侦测主机硬件并加载适当的模块来驱动硬件了。而核心所侦测到的各项硬件装置,后来就会被记录在/proc与/sys当中了。包括/proc/cpuinfo,/proc/partitions,/proc/interrupts等等。更多的/proc内容介绍,先回到第16章的程序管理瞧一瞧先!
  除了直接呼叫出/proc底下的文件内容之外,其实Linux有提供几个简单的指令来将核心所侦测到的硬件叫出来的~常见的指令有底下这些:

  • gdisk: 可以使用gdisk -l 将分区表列出
  • dmesg: 观察核心运作过程当中所显示的各项讯息记录
  • vmstat: 可分析系统(CPU/RAM/IO)目前的状态
  • lspci: 列出整个PC系统的PCI接口装置!很有用的指令
  • lsusb: 列出目前系统上面各个USB端口的状态,与连接的USB装置
  • iostat: 与vmstat类似,可实时列出CPU与接口设备的Input/Output状态
  • lspci
lspci [-vvn]
选项与参数:
-v: 显示更多的PCI接口装置的详细信息
-vv: 比-v还要更详细的细部信息
-n: 直接观察PCI的ID而不是厂商名称

update-pciids #在线更新对应档

  • lsusb
lsusb [-t]
选项与参数:
-t: 使用类似树状目录来显示各个USB端口的相关性
  • iostat
iostat [-c|-d] [-k|-m][-t] [间隔秒数][侦测次数]
选项与参数:
-c: 仅显示CPU的状态
-d:仅显示储存设备的状态,不可与-c一起用
-k: 默认显示的是block,这里可以改成K bytes的大小来显示
-m: 以MB为单位来显示结果
-t: 显示日期出来

20.2.3 了解磁盘的健康状态

  SMART其实是【Self-Monitoring,Analysis and Reporting Technology Syetem】的缩写,主要用来监测目前常见的ATA与SCSI界面的磁盘,只是,要被监测的磁盘也必须要支持SMART的协议才行!
  smart提供一只指令名为smartctl,这个指令的功能非常多!不过我们底下只想要介绍数个基本的操作,让各位了解一下如何确认你的磁盘是好是坏!

smartctl -a /dev/sda
smartctl -t short /dev/sda

20.3 备份要点

20.3.1 备份资料的考虑

  • 备份因素考虑
    • 备份哪些文件
    • 选择什么备份的媒介
    • 考虑备份的方式
    • 备份的频率
    • 备份使用的工具为何

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

  • 操作系统本身需要备份的文件:
    这方面的文件主要跟【账号与系统配置文件】有关系!就是/etc/passwd,/etc/shadow,/etc/group,/home底下的用户家目录等等,但由于Linux预设的重要参数档都在/etc/底下,所以只要将这个目录备份下来的话,那么几乎所有的配置文件都可以被保存的!
      总结一下,这方面你必须要备份的文件为:

    • /etc/整个目录
    • /home/整个目录
    • /var/spool/mail/
    • /var/spool/{at|cron}/
    • /boot/
    • /root/
    • 如果你自行安装过其他的软件,那么/usr/local或/opt也最好备份一下
  • 网络服务方面的数据库方面:
    以WWW服务器为例,要备份的数据文件有:

    • 软件本身的配置文件案,例如:/etc/整个目录,/usr/local/整个目录
    • 软件服务提供的数据,以WWW及Mariadb为例:
      WWW资料:/var/www整个目录或/srv/www整个目录,及系统的家目录
      Mariadb: /var/lib/mysql整个目录
    • 其他在Linux主机上面提供的服务之数据库文件!
  • 推荐需要备份的目录:

    • /etc
    • /home
    • /root
    • /var/spool/mail,/var/spool/cron/,/var/spool/at/
    • /var/lib/
  • 不需要备份的目录:

    • /dev
    • /proc,/sys,/run
    • /mnt,/sys,/run
    • /tmp

20.3.3 备份用储存媒体的选择

  过去我们使用的储藏媒体可能有Tape,Mo,Zip,CD-RW,DVD-RW,外接式磁盘等,近年来由于磁盘容量不断上提,加上已经有便宜的桌上型NAS储存设备,这些NAS储存设备就等于是一部小型Linux server。

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

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

  • 还原的考虑
    完整备份就是将根目录(/)整个系统通通备份下来的意思。
  • 累积备份的原则
    所谓累积备份,指的是在系统进行完一次完整备份后,经过一段时间的运作,比较系统与备份文件之间的差异,仅备份有差异的文件而已。而第二次累积备份则与每一次备份的数据比较,也是仅备份有差异的数据而已。如此一来,由于仅备份有差异的数据,因此备份的数据量小且快速!备份也很有效率。
      假如我在星期一做好完整备份,则星期二的累积备份是系统与完整备份间的差异数据;星期三的备份是系统与星期二的差异数据,星期四的备份则是系统与星期三的差异数据。
  • 累积备份使用的备份软件
    完整备份常用的工具有dd,cpio,xfsdump/xfsrestore等等。因为这些工具都能备份装置与特殊文件!
# 1. 用dd来将/dev/sda备份到完全一模一样的/dev/sdb硬盘上
dd if=/dev/sda of=/dev/sdb
# 2. 使用cpio来备份与还原整个系统,假设储存媒体为SATA磁带机:
find / -print | cpio -covB > /dev/st0 <==备份到磁带机
cpio -iduv < /dev/st0
# 1. 完整备份
xfsdump -l 0 -L 'full -M 'full' -f /backupdata/home.dump /home
# 2. 第一次进行累积备份
xfsdump -l 1 -L 'full -1' -M 'full-1' -f /backupdata/home.dump1 /home
tat --exclude /proc --exclude /mtn --exclude /tmp \
--exclude /backupdata -jcvp /backupdata/system.tar.bz2 /

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

  差异备份与累积备份有点类似,也是需要进行第一次的完整备份后才能够进行。只是差异备份指的是:每次的备份都是与原始的完整备份比较的结果。
  如果使用xfsdump来备份的话,那么每次备份的等级(level)都会是level 1的意思啦!当然啦,你也可以透过tar的-N选项来备份喔!

tar -N '2015-09-01' -jpcv -f /backupdata/home.tar.bz2 /home
# 只有比2015-09-01还要新的文件,在/home底下的文件才会被打包进home.tar.bz2当中!
# 有点奇怪的是,目录还是会被记录下来,只是目录内的文件就不会备份

  此外,你也可以透过rsync来进行镜像备份喔!这个rsync可以对两个目录进行镜像(mirror),算是一个非常快速的备份工具!简单的指令语法为:

rsync -av 来源目录 目标目录
rsync -av /home /backupdata/
# 此时会在/backupdata底下产生home这个目录来!
rsync -av /home /backupdata/
# 再次进行会快很多!如果数据没有更动,几乎不会进行任何动作!

20.4.3 关键数据备份

  如果仅是备份关键数据而已,那么由于系统的绝大部分执行档都可以后来重新安装,因此若你的系统不是因为硬件问题,而是因为软件问题而导致系统被攻破或损毁时,直接捉取最新的Linux distribution,然后再将系统数据(如帐号/密码与家目录等等)与服务数据(如www/email/crontab/ftp等等)一个一个的填回去!那你的系统不但保持在最新的状态,同时也可以趁机处理一下与重新温习一下系统设定!是很不错的哦!
  不过,备份关键数据最麻烦的地方其实就是在还原啦!上述的还原方式是你必须要很熟悉系统运作,否则还得要花费很多时间的!

20.5 鸟哥的备份策略

  每部主机的任务都不相同,重要的数据也不相同,重要性也不一样,因此,每个人的备份思考角度都不一样!针对鸟哥的“鸟站”来说,我的备份策略是这样的:

  • 主机硬件:使用一个独立的filesystem来储存备份数据,此filesystem挂载到/backup当中;
  • 每日进行:目前仅备份MySQL数据库;
  • 每周进行:包括/home,/var,/boot,/usr/local等目录与特殊服务的目录;
  • 自动处理:这方面利用/etc/crontab来提供备份的自动进行;
  • 异地备援:每月定期的将数据分别(a)刻录到光盘上面(b)使用网络传输到另一部机器上面。

20.5.1 每周系统备份的script

  底下提供鸟哥的备份的scripts,希望对大家有点帮助!鸟哥假设你已经知道如何挂载一个新的filesystem到/backup去,所以格式化与挂载这里就不再强调啰。

vi /backup/backupwk.sh
#!/bain/bash
# ===============================================
# 用户参数输入位置:
# basedir=你用来储存此脚本所预计备份的数据之目录(请独立文件系统)
basedir=/backup/weekly <==您只要改这里就好了!

# ===============================================
# 底下请不要修改了!用默认值即可!
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C

# 设定要备份的服务的配置文件,以及备份的目录
named=$basedir/named
postfixd=$basedir/postfix
vsftpd=$basedir/vsftp
sshd=$basedir/ssh
sambad=$basedir/samba
wwwwd=$basedir/www
others=$basedir/others
userinfod=$basedir/userinfo
# 判断目录是否存在,若不存在则予以建立。
for dirs in $named $postfixd $vsftpd $sshd $wwwd $others $userinfod
do
    [ ! -d "$dirs" ] && mkdir -p $dirs
done

# 1. 将系统主要的服务之配置文件分别备份下来,同时也备份/etc全部。
cp -a /var/named/chroot/{etc,var}    $named
cp -a /etc/postfix /etc/dovecot.conf    $postfixd
cp -a /etc/vsftpd/*    $vsftpd
cp -a /etc/ssh/*     $sshd
cp -a /etc/samba/*    $sambad
cp -a /etc/{my.cnf,php.ini,httpd}    $wwwd
cd /var/lib
    tar -jpc -f $wwwd/mysql.tar.bz2        mysql
cd /var/www
    tar -jpc -f $wwwd/html.tar.bz2    html cgi-bin
cd /
    tar -jpc -f $others/etc.tar.bz2  etc
cd /usr/
    tar -jpc -f $others/local.tar.bz2  local

# 2. 关于使用者参数方面
cp -a /etc/{passwd,shdaw,group}  $userinfod
cd /var/spool
    tar -jpc -f $userinfod/mail.tar.bz2     mail
cd /
    tar -jpc -f $userinfod/home.tar.bz2     home
cd /var/spool
    tar -jpc -f $userinfod/cron.tar.bz2  cron at
chmod 700 /backup/backupwk.sh
/backup/backupwk.sh

20.5.2 每日备份资料的script

  再来,继续提供一下每日备份数据的脚本程序!请注意,鸟哥这里仅有提供Mariadb的数据库备份目录,与WWW的类似留言版程序使用的CGI程序与写入的数据而已。如果你还有其他的数据需要每日备份,请自行照样造句啰!

vi /backup/backupday.sh
#!/bin/bash
# ==============================================
# 请输入,你想让备份数据放置到哪个独立的目录去
basedir=/backup/daily/  #你只要改这里就可以了

# ==============================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
basefile1=$basedir/mysql.$(date +%Y-%m-%d).tar.bz2
basefile2=$basedir/cgi-bin.$(date +%Y-%m-%d).tar.bz2
[ ! -d "$basedir" && mkdir $basedir ]

# 1. Mysql(数据库目录在/var/lib/mysql)
cd /var/lib
    tar -jpc -f $basefile1 mysql

# 2. WWW的CGI程序(如果有使用CGI程序的话)
cd /var/www
    tar -jpc -f $basedir2 cgi-bin
chmod 700 /backup/backupday.sh
/backup/backupday.sh
vi /etc/crontab
# 加入这两行即可(请注意你的文件目录!不要照抄哟!)
30 3 * * 0 root /backup/backupwk.sh
30 2 * * * root /backup/backupday.sh

  系统会在每天的2:30进行Mariadb的备份,而在每个星期天的3:30进行重要文件的备份!

20.5.3 远程备援的script

  • 使用rsync上传备份数据
    要使用rsync你必须在你的服务器上面取得某个帐号使用权后,并让该帐号可以不用密码即可登入才行!这部分得要先参考服务器篇的远程联机服务器才行!假设你已经设定好dmtsai这个帐号可以不用密码即可登入远程服务器,而同样的你要让/backup/weekly/整个备份到/home/backup/weekly底下时,可以简单这样做:
vi /backup/rsync.sh
#!/bin/bash
remotedir=/home/backup/
basedir=/backup/weekly
host=127.0.0.1
id=dmtsai

# 底下为程序阶段,不需要修改喔!
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}
posted @ 2023-07-31 10:56  Evan-whc  阅读(12)  评论(0编辑  收藏  举报