第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}