admin管理员组

文章数量:1586763

Timeshift备份和还原linux系统

背景

某一个客户非要实现可以一键备份和还原系统(ubuntu18.04);因此就网上搜了下有没有这样的资源可以借鉴,看了很多文章,发现大家都是在桌面版系统操作的,而实际的服务器哪有人用桌面版呀,于是自己研究了下如何命令行去备份和还原系统,以这篇文章记录一下。

Timeshift介绍

Timeshift,是Linux下的是一款自由开源工具,可让你创建文件系统的增量快照。你可以使用 RSYNC 或 BTRFS 两种方式创建快照。这里这个快照其实和虚拟机的快照差不多,说白了这个软件就是为我们实体机创建了一份专属于我们实体机的快照,可以方便我们后期进入系统使用这个快照进行还原操作。

Timeshift安装与卸载

在终端执行如下命令安装

sudo add-apt-repository -y ppa:teejee2008/timeshift
sudo apt-get update
sudo apt-get install timeshift

如需卸载,执行下面命令

sudo apt-get remove timeshift

快照存储

这里需要了解下timeshift备份的两种方式,一种是btrfs,一种是rsync。

rsync 在第一次使用时会拷贝所有文件,以后每次备份都是增量备份,使用硬链接创建从上一次快照未修改的系统文件。快照文件可以保存到任何 Linux 文件系统的硬盘格式下,保存快照到非系统盘或者外部硬盘上,这样即使系统盘损坏或者被格式化也能够快速从外部硬盘恢复数据。rsync 支持排除文件和目录来节省硬盘空间,rsync也是默认的备份方式。

btrfs 需要安装 btrfs-tools,快照通过 btrfs文件系统创建,快照备份和恢复的速度要比 rsync 快,快照创建和恢复都是原子事务的,不能中断。快照通过替换系统 subvolumns 来恢复,因为文件没有拷贝,删除或者覆盖,不会有文件丢失的风险。恢复后的系统会作为一次新的快照。快照在备份时是完美地逐字节拷贝,不能排除任何文件。快照会存在系统相同的硬盘上,暂时还不支持备份到其他硬盘,如果系统盘损坏,那么快照也会丢失。初始 btrfs 备份是 0 字节,但是随着系统使用占用内容会逐日增多,快照中的文件依然还是会指向原始的文件 block. 系统必须安装在 btrfs 分区上,并使用 Ubuntu-type subvolumn layout(@ and @home subvolumns),其他的 layouts 不支持。

通过了解以上两种方式,可以知道rsync的快照可以保存到任何的非系统盘下,而btrfs是存储在系统盘上;本人建议使用rsync的方式,本次备份和恢复也是这种方式。

准备工作

本次存储快照是采用装系统时,系统盘预留20G空间用于存储(有条件的可以装一块盘用于存储),进入系统后需要先分区

fdisk /dev/nvme0n1  #分区
lsblk  #查看分区
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0 232.9G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0   212G  0 part /
└─nvme0n1p3 259:3    0    20G  0 part     #用于存储快照
mkfs.ext4 /dev/nvme0n1p3   #格式化设备
##升级系统内核到4.15.0-188-generic或更高内核版本
udo apt -y update && \
sudo apt-get install linux-image-4.15.0-188-generic  && \
sudo apt-get install linux-headers-4.15.0-188-generic -y   && \
sudo apt-get install linux-modules-4.15.0-188-generic -y   && \
sudo apt-get install linux-modules-extra-4.15.0-188-generic -y && \
sudo reboot
##更新所有软件到最新
apt upgrade -y

Tips:升级系统内核和更新所有软件大家可根据自己实际情况选择做不做,我在ubuntu18.04系统中做快照时,这两步没做恢复快照时是会一直卡住不动的,所以建议这两步做下。

创建快照

timeshift --create --snapshot-device /dev/nvme0n1p3

查看快照

timeshift --list
Mounted '/dev/nvme0n1p3' at '/run/timeshift/23058/backup'
Device : /dev/nvme0n1p3
UUID   : 150ecac5-a890-43d0-bcf6-4aecc80ab467
Path   : /run/timeshift/23058/backup
Mode   : RSYNC
Status : OK
1 snapshots, 17.3 GB free

Num     Name                 Tags  Description
------------------------------------------------------------------------------
0    >  2022-07-11_03-19-57  O


Found stale mount for device '/dev/nvme0n1p3' at path '/run/timeshift/23058/backup'
Unmounted successfully

恢复快照

#恢复快照是交互式的,不想交互可以利用参数去实现
#交互式
timeshift --restore --snapshot '2022-07-11_03-19-57' --snapshot-device /dev/nvme0n1p3 
#非交互式
timeshift --restore --snapshot '2022-07-11_03-19-57' --snapshot-device /dev/nvme0n1p3 --yes --skip-grub /dev/nvme0n1p3

删除快照

#删除指定快照
timeshift --delete  --snapshot '2022-07-11_03-19-57'
#删除所有快照
timeshift --delete-all

配置文件详解

cat /etc/timeshift/timeshift.json
{
  "backup_device_uuid" : "150ecac5-a890-43d0-bcf6-4aecc80ab467",  #存储设备uuid
  "parent_device_uuid" : "",
  "do_first_run" : "false",
  "btrfs_mode" : "false",
  "include_btrfs_home_for_backup" : "false",
  "include_btrfs_home_for_restore" : "false",
  "stop_cron_emails" : "true",
  "schedule_monthly" : "false",
  "schedule_weekly" : "false",
  "schedule_daily" : "false",
  "schedule_hourly" : "false",
  "schedule_boot" : "false",
  "count_monthly" : "2",
  "count_weekly" : "3",
  "count_daily" : "5",
  "count_hourly" : "6",
  "count_boot" : "5",
  "snapshot_size" : "11986884489",    #快照大小(单位为字节),会以第一次创建快照的大小配置,如果后面备份快照大小超过改值,会备份失败;可以提前修改改值后再进行备份。
  "snapshot_count" : "152137",
  "date_format" : "%Y-%m-%d %H:%M:%S",
  "exclude" : [        #这里是重点,默认这里是空的,即root家目录和其他用户的家目录不会备份,想要备份就是以下方式配置
    "+ /root/***",      
    "+ /home/abm/***"
  ],
  "exclude-apps" : [
  ]
}

参考文章:
https://www.jianshu/p/3841c272c68e
https://github/teejee2008/timeshift
https://guyuehome/34859

本文标签: 备份系统TimeshiftLinux