linux的备份和恢复

30 篇文章 0 订阅

备份系统

如何备份linux系统呢?很简单,就像你备份或压缩其它东西一样,使用TAR。和Windows不同,Linux不会限制root访问任何东西,你可以把分区上的所有东西都扔到一个TAR文件里去!

搜集信息

版本信息

[root@localhost home]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@localhost home]# uname -a
Linux localhost.localdomain 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

查看位数

getconf LONG_BIT

查uuid

[root@localhost home]# blkid
/dev/sda1: UUID="878753cc-4796-445b-8803-5474dd11224e" TYPE="xfs"
/dev/sda2: UUID="GrKX0b-mcu5-YCbB-OceF-ljWQ-9BgO-efY51Y" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="e59ac327-9c57-49b2-a663-0c1194e366b0" TYPE="xfs"
/dev/mapper/centos-swap: UUID="ac14ffb9-4501-476d-9e43-ed4a00616655" TYPE="swap"
/dev/mapper/centos-home: UUID="c3091524-0e48-4bf4-a2c1-01d011d75733" TYPE="xfs"

磁盘信息


[root@localhost home]# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x00009674

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200  1953523711   975712256   8e  Linux LVM

Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/centos-swap: 8388 MB, 8388608000 bytes, 16384000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/mapper/centos-home: 937.0 GB, 937045262336 bytes, 1830166528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
[root@localhost home]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 931.5G  0 disk
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0 930.5G  0 part
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   7.8G  0 lvm  [SWAP]
  └─centos-home 253:2    0 872.7G  0 lvm  /home
sr0              11:0    1  1024M  0 rom

磁盘空间和格式

[root@localhost home]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  7.7G     0  7.7G   0% /dev
tmpfs                   tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs                   tmpfs     7.8G  9.8M  7.7G   1% /run
tmpfs                   tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        50G  5.0G   46G  10% /
/dev/sda1               xfs      1014M  208M  807M  21% /boot
/dev/mapper/centos-home xfs       873G  474G  399G  55% /home
tmpfs                   tmpfs     1.6G  8.0K  1.6G   1% /run/user/0

文件占用空间

[root@localhost /]# du -h --max-depth=1
16K     ./lost+found
11M     ./boot
29M     ./lib64
144K    ./tmp
8.0K    ./selinux
8.0K    ./srv
205M    ./home
9.1M    ./bin
92M     ./var
1.1G    ./root
0       ./proc
8.0K    ./misc
125M    ./etc
306M    ./opt
8.0K    ./mnt
100K    ./tftpboot
142M    ./lib
92K     ./dev
18K     ./media
0       ./sys
3.3G    ./usr
43M     ./sbin
5.2G    .

网络信息

每种系统不一致

[root@localhost home]# nmcli
eno1: connected to eno1
        "Intel Ethernet"
        ethernet (e1000e), 00:D8:61:1D:1D:3B, hw, mtu 1500
        ip4 default
        inet4 192.168.2.104/24
        route4 192.168.2.0/24
        route4 0.0.0.0/0
        inet6 fe80::5d2e:8ff8:60b1:dce8/64
        route6 fe80::/64
        route6 ff00::/8

virbr0: connected to virbr0
        "virbr0"
        bridge, 52:54:00:D4:91:44, sw, mtu 1500
        inet4 192.168.122.1/24
        route4 192.168.122.0/24

ens2: unavailable
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 00:E0:4C:68:09:56, hw, mtu 1500

docker0: unmanaged
        "docker0"
        bridge, 02:42:EC:D5:57:DA, sw, mtu 1500


lo: unmanaged
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

virbr0-nic: unmanaged
        "virbr0-nic"
        tun, 52:54:00:D4:91:44, sw, mtu 1500

DNS configuration:
        servers: 114.114.114.114 23.5.5.5
        interface: eno1

Use "nmcli device show" to get complete information about known devices and
"nmcli connection show" to get an overview on active connection profiles.

Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage details.

[root@localhost /]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:15:5D:02:02:21
          inet addr:192.168.2.224  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:320506 errors:0 dropped:0 overruns:0 frame:0
          TX packets:192511 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:30378842 (28.9 MiB)  TX bytes:19991922 (19.0 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:12547 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12547 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1991852 (1.8 MiB)  TX bytes:1991852 (1.8 MiB)


[root@localhost /]# netstat -na |grep tcp
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:5610                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN
tcp        0      0 192.168.2.224:22            192.168.2.102:52149         ESTABLISHED
tcp        0     36 192.168.2.224:22            192.168.2.102:52146         ESTABLISHED


[root@localhost /]# cat  /etc/sysconfig/network-scripts/ifcfg-eth0
# Please read /usr/share/doc/initscripts-*/sysconfig.txt
# for the documentation of these parameters.
GATEWAY=192.168.2.1
TYPE=Ethernet
DEVICE=eth0
HWADDR=00:15:5d:02:02:21
BOOTPROTO=none
NETMASK=255.255.255.0
IPADDR=192.168.2.224
ONBOOT=yes
USERCTL=no
IPV6INIT=no
PEERDNS=yes

软件包信息

rpm -qal >rpminfo.txt

完整命令

cat /etc/redhat-release
uname -a
getconf LONG_BIT
blkid
fdisk -l
lsblk
df -hT
cd /
du -h --max-depth=1
nmcli
ifconfig
netstat -na |grep tcp
cat  /etc/sysconfig/network-scripts/ifcfg-eth0

完整备份

  • 首先成为root用户:
$ sudo su
  • 然后进入文件系统的根目录(当然,如果你不想备份整个文件系统,你也可以进入你想要备份的目录,包括远程目录或者移动硬盘上的目录):
# cd /
  • 下面是我用来备份系统的完整命令:
tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system / 
#这里的boot单独打包。 为了以后方便修复引导。
tar -cvpzf boot.tar.gz /boot

让我们来简单看一下这个命令:

c 创建的意思- create a new backup archive.
v 显示详细信息- verbose mode, tar will print what it's doing to the screen.
p 保持文件权限- preserves the permissions of the files put in the archive for restoration later.
z 使用gzip压缩- compress the backup file with 'gzip' to make it smaller.
f <filename> 备份后生成的文件- specifies where to store the backup, backup.tar.gz is the filename used in this example. 
				It will be stored in the current working directory, the one you set when you used the cd command.

--exclude=/example/path 排除某个路径不去备份- The options following this model instruct tar what directories NOT to backup. 
				We don't want to backup everything since some directories aren't very useful to include. 
				The first exclusion rule directs tar not to back itself up, this is important to avoid errors during the operation.
--one-file-system
              stay in local file system when creating archive
               的意思是 不包含其他文件系统- Do not include files on a different filesystem

这种备份解压后有些目录是空的,需要注意

[root@localhost tmp]# find .  -maxdepth 1  -empty
./boot
./dev
./home
./proc
./run
./sys
./media
./srv
[root@localhost tmp]#

其中,home被排除,media,srv是本身就没东西。

部分备份

这个没有测试。
另外一种使用完全手动指定备份目录,排除不备份的目录

cd / # THIS CD IS IMPORTANT THE FOLLOWING LONG COMMAND IS RUN FROM /

tar -cvpzf backup.tar.gz \
--exclude=/backup.tar.gz \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/run \ 
--exclude=/media \ 
--exclude=/var/log \
--exclude=/var/cache/apt/archives \
--exclude=/usr/src/linux-headers* \ 
--exclude=/home/*/.gvfs \
--exclude=/home/*/.cache \ 
--exclude=/home/*/.local/share/Trash /

实际中主要排除以下

#tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media /

备份硬件信息

cd /
blkid > uuid.txt
df -hT > df.txt
fdisk -l > fdisk.txt
nmcli >nmcli.txt

最好还是复制粘贴,要不文件打开没法看。

保存压缩包

挂载磁盘(移动硬盘)

cd /
mount /dev/sdb1 /mnt
cp backup.tar.gz boot.tar.gz uuid.txt df.txt fdisk.txt /mnt

通过网络保存

通过scp保存到远程主机。

scp

大文件的分割和合并

文件切割

文件切割模式分为两种:文本文件和二进制模式。

文本模式

文本模式只适用于文本文件,用这种模式切割后的每个文件都是可读的。文本模式又分为两种:按最大文件大小切割和按文本行数切割。

  • 按文件大小切割
split -C 50k log.log splog

将文本文件log.log按每块最大50k的大小进行切割,不打碎行。输出文件名类似splogaa, splogab……

  • 按文本行数切割
 split -l 100 log.log splog

每个分块100行,不考虑大小。日志分析时应该有用。

二进制模式

split -b 50k log.log splog

每个分块(当然,最后一个不保证)大小都是50k,基本不可读。任何类型文件都可以用这种切割模式。

文件合并

不管用什么方式切割,合并方法不变。

cat splog* >newLog.log

补充说明

split 参数:
    -a:指定输出文件名的后缀长度,默认为2个(aa,ab...)
    -d:指定输出文件名的后缀用数字代替
    -b:指定输出文件的最大字节数,如1k,1m...
    -C:指定每一个输出文件中单行的最大字节数
    -l:指定每一个输出文件的最大行数

恢复系统

完整备份恢复

选择和原机一致的发行版本和内核版本,安装一台主机。
分区和逻辑卷参照原机,以防发生不可预知的事情。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

创建临时文件夹

保存原机的打包文件
backup.tar.gz, boot.tar.gz, 新机的/boot 和/dev文件夹,也可保存这里

[root@localhost /]# cp -r boot /baktmp/
[root@localhost /]# cp -r dev /baktmp/
[root@localhost /]# cd /baktmp/
[root@localhost baktmp]# pwd
/baktmp
[root@localhost baktmp]# ls
backup.tar.gz  boot  boot.tar.gz  dev
[root@localhost baktmp]#

进入修复模式

用光盘镜像引导,选择:
选择和原机一致的发行版本和内核版本

Troubleshooting => 
Rescue a CentOS system => 
1 => //Continue
Please press <return> to get a shell. =>
sh-4.2#

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果系统没有太大问题,新装的肯定是没问题的,livecd 这个系统把新机的文件系统挂在的/mnt/sysimage

cd /mnt/sysimage
# 改变此目录为根目录
chroot /mnt/sysimage
pwd
/

解压前uuid是一致的
在这里插入图片描述

cd /baktmp
## 解压文件到根目录
tar xvpfz backup.tgz  -C /

解压结束后,查看boot和dev,没有改变,很好,有时嘉措参数会覆盖掉的。

修改uuid

在这里插入图片描述
fstab被替换,把它修改过来。

重启后,系统修复文件系统,开机时间有等待。然后重启,ok。
查看网络,是否正常,网络有时会把原来配置带过来,原来业务是否正常。

非完整备份恢复

这个没有测试

在进行恢复系统的操作时一定要小心!如果你不清楚自己在做什么,那么你有可能把重要的数据弄丢,请务必小心!

接着上面的例子。切换到root用户,并把文件“backup.tgz”拷贝到分区的根目录下。

在 Linux中有一件很美妙的事情,就是你可以在一个运行的系统中恢复系统,而不需要用boot-cd来专门引导。当然,如果你的系统已经挂掉不能启动了, 你可以用Live CD来启动,效果是一样的。你还可以用一个命令把Linux系统中的所有文件干掉,当然在这里我不打算给出这个命令!

使用下面的命令来恢复系统:

# tar xvpfz backup.tgz -C /

如果你的档案文件是使用Bzip2压缩的,应该用:

# tar xvpfj backup.tar.bz2 -C /

注意:上面的命令会用档案文件中的文件覆盖分区上的所有文件。
执行恢复命令之前请再确认一下你所键入的命令是不是你想要的,执行恢复命令可能需要一段不短的时间。
恢复命令结束时,你的工作还没完成,别忘了重新创建那些在备份时被排除在外的目录:

# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys

当你重启电脑,你会发现一切东西恢复到你创建备份时的样子了!
重要的一点是,如果恢复的电脑不是原来的电脑,需要在待恢复的电脑上有和备份的系统版本一至的系统,最好重新装个,然后把/boot/,initrd.img,vmlinuz 备份到其他位置,待恢复完后,再把这几个恢复到原来位置,以防止uuid不一致造成不能正确引导。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值