跳过内容

备份和恢复

本章将教您如何使用 Linux 备份和恢复数据。


目标:在本章中,未来的 Linux 管理员将学习如何

✔ 使用 tarcpio 命令进行备份;
✔ 检查备份并恢复数据;
✔ 压缩或解压缩备份。

🏁 备份恢复压缩

知识⭐ ⭐ ⭐
复杂性⭐ ⭐

阅读时间:40 分钟


注意

在本章中,命令结构使用“设备”来指定备份的目标位置和恢复时的源位置。设备可以是外部介质或本地文件。您应该随着本章的展开对这一点有所了解,但如果需要,您始终可以参考此注释以澄清。

备份将满足有效保存和恢复数据的需求。

备份可以保护您免受以下情况的影响

  • 破坏:自愿或非自愿。人为或技术。病毒,...
  • 删除:自愿或非自愿。人为或技术。病毒,...
  • 完整性:数据变得不可用。

没有系统是万无一失的,也没有人是万无一失的,因此为了避免数据丢失,必须对其进行备份,以便在出现问题后可以恢复。

备份介质应保存在与服务器不同的房间(或建筑物)中,以避免灾难破坏服务器和备份。

此外,管理员必须定期检查介质是否仍然可读。

概论

有两个原则:备份存档

  • 存档在操作后会销毁信息源。
  • 备份在操作后会保留信息源。

这些操作包括将信息保存在文件、外围设备或支持的介质(磁带、磁盘等)中。

过程

备份需要系统管理员高度的纪律性和严格性。在执行备份操作之前,系统管理员需要考虑以下问题

  • 合适的介质是什么?
  • 应该备份什么?
  • 需要多少个副本?
  • 备份需要多长时间?
  • 方法?
  • 多久备份一次?
  • 自动还是手动?
  • 存储在哪里?
  • 保留多久?
  • 是否需要考虑成本问题?

除了这些问题外,系统管理员还应根据实际情况考虑成本、性能、数据重要性、带宽消耗和维护复杂度等因素。

备份方法

  • 完全备份:是指一次性复制硬盘或数据库中所有文件、文件夹或数据。
  • 增量备份:是指备份上次完全备份或增量备份后更新的数据。
  • 差异备份:是指备份自上次完全备份后更改的文件。
  • 选择性备份(部分备份):是指备份系统的一部分。
  • 冷备份:是指系统处于关机或维护状态下的备份。备份的数据与系统在此期间的数据完全相同。
  • 热备份:是指系统处于正常运行状态下的备份。由于系统中的数据随时更新,备份的数据相对于系统的实际数据存在一定滞后。
  • 远程备份:是指将数据备份到另一个地理位置,以避免火灾、自然灾害、盗窃等造成的數據丢失和服务中断。

周期性

  • 预先:在特定时间(系统更新之前,...)。
  • 定期:每天、每周、每月,...。

提示

在系统更改之前,进行备份可能很有用。但是,每天备份每月才更改一次的数据没有意义。

恢复方法

根据可用的工具,可以执行多种类型的恢复操作。

  • 完整恢复:树,...。
  • 选择性恢复:部分树,文件,...。

可以恢复整个备份或其一部分。但是,在恢复目录时,备份后创建的文件不会被删除。

提示

要将目录恢复到备份之前的状态,需要先完全删除其内容,然后再启动恢复操作。

有很多工具可以进行备份。

  • 编辑工具;
  • 图形工具;
  • 命令行工具tarcpiopaxdddump,...。

这里我们将使用tarcpio命令。

  • tar:

  • 易于使用;

  • 允许将文件添加到现有备份中。

  • cpio:

  • 保留所有者;

  • 保留组、日期和权限;
  • 跳过损坏的文件;
  • 整个文件系统。

注意

这些命令以专有且标准化的格式保存。

复制:一种备份技术,将一组数据从一个数据源复制到另一个数据源或多个数据源,主要分为同步复制异步复制。对于新手系统管理员来说,这是备份的进阶部分,因此这份基本文档不会详细阐述这些内容。

命名约定

使用命名约定可以快速定位备份文件的内容,从而避免危险的恢复操作。

  • 目录名称;
  • 使用的工具;
  • 使用的选项;
  • 日期。

提示

备份的名称必须明确。

注意

Linux 中不存在扩展名的概念。换句话说,我们在这里使用扩展名是为了便于人工操作。例如,如果系统管理员看到.tar.gz.tgz文件扩展名,那么他知道如何处理该文件。

备份内容

备份通常包含以下元素

  • 文件;
  • 名称;
  • 所有者;
  • 大小;
  • 权限;
  • 访问日期。

注意

缺少inode号。

存储模式

有两种不同的存储模式

  • 磁盘上的文件;
  • 设备。

磁带归档器 - tar

tar命令允许保存到多个连续介质(多卷选项)。

可以提取整个备份或其一部分。

即使在绝对模式下提及要备份的信息的路径,tar也会隐式地以相对模式进行备份。但是,也支持绝对模式下的备份和恢复。

恢复指南

需要问的正确问题是

  • 什么:部分或全部;
  • 哪里:数据将被恢复的位置;
  • 如何:绝对或相对。

警告

在恢复之前,务必考虑并确定最合适的方法,以避免错误。

恢复通常在出现需要快速解决的问题后进行。糟糕的恢复可能会在某些情况下使情况更糟。

使用tar进行备份

在 UNIX 系统上,创建备份的默认工具是tar命令。这些备份可以被bzip2xzlziplzmalzopgzipcompresszstd压缩。

tar允许您从备份中提取单个文件或目录,查看其内容或验证其完整性。

估计备份大小

以下命令估计可能的tar文件的大小(以千字节为单位)

$ tar cf - /directory/to/backup/ | wc -c
20480
$ tar czf - /directory/to/backup/ | wc -c
508
$ tar cjf - /directory/to/backup/ | wc -c
428

警告

注意,命令行中的“-”会干扰zsh。切换到bash

tar备份的命名约定

以下是一个tar备份的命名约定示例,其中知道日期将被添加到名称中。

文件后缀功能
cvfhomehome.tar/home以相对模式,未压缩形式
cvfP/etcetc.A.tar/etc以绝对模式,不压缩
cvfzusrusr.tar.gz/usr以相对模式,gzip压缩
cvfjusrusr.tar.bz2/usr以相对模式,bzip2压缩
cvfPz/homehome.A.tar.gzhome以绝对模式,gzip压缩
cvfPj/homehome.A.tar.bz2home以绝对模式,bzip2压缩

创建备份

以相对模式创建备份

使用cvf键以相对模式创建未压缩的备份

tar c[vf] [device] [file(s)]

示例

[root]# tar cvf /backups/home.133.tar /home/
描述
c创建备份。
v显示已处理文件的名称。
f允许您指定备份(介质)的名称。

提示

tar键前面的连字符(-)是多余的!

以绝对模式创建备份

使用cvfP键以绝对模式明确创建未压缩的备份

tar c[vf]P [device] [file(s)]

示例

[root]# tar cvfP /backups/home.133.P.tar /home/
描述
P以绝对模式创建备份。

警告

使用P键时,要备份的文件的路径必须作为绝对路径输入。如果未指定这两个条件(P键和绝对路径),则备份将以相对模式进行。

使用gzip创建压缩备份

使用cvfz键使用gzip创建压缩备份

tar cvzf backup.tar.gz dirname/
描述
zgzip压缩备份。

注意

.tgz扩展名等同于.tar.gz

注意

在所有备份操作中保持cvftvfxvf)键不变,并在键的末尾添加压缩键,可以使命令更容易理解(例如,cvfzcvfj等)。

使用bzip创建压缩备份

使用cvfj键使用bzip创建压缩备份

tar cvfj backup.tar.bz2 dirname/
描述
jbzip2压缩备份。

注意

.tbz.tb2扩展名等同于.tar.bz2扩展名。

压缩compressgzipbzip2lzipxz

压缩以及随之而来的解压缩将影响资源消耗(时间和 CPU 使用率)。

以下是一组文本文件压缩效率从低到高的排名

  • compress (.tar.Z)
  • gzip (.tar.gz)
  • bzip2 (.tar.bz2)
  • lzip (.tar.lz)
  • xz (.tar.xz)

将文件或目录添加到现有备份

可以将一个或多个项目添加到现有备份中。

tar {r|A}[key(s)] [device] [file(s)]

/etc/passwd添加到备份/backups/home.133.tar

[root]# tar rvf /backups/home.133.tar /etc/passwd

添加目录类似。这里将dirtoadd添加到backup_name.tar

tar rvf backup_name.tar dirtoadd
描述
r将一个或多个文件添加到直接访问介质备份(硬盘)的末尾。
A将一个或多个文件添加到顺序访问介质(磁带)备份的末尾。

注意

无法将文件或文件夹添加到压缩备份中。

$ tar rvfz backup.tgz filetoadd
tar: Cannot update compressed archives
Try `tar --help' or `tar --usage' for more information.

注意

如果备份以相对模式执行,则以相对模式添加文件。如果备份以绝对模式执行,则以绝对模式添加文件。

混合模式可能会在恢复时导致问题。

列出备份内容

可以查看备份的内容,而无需提取它。

tar t[key(s)] [device]
描述
t显示备份的内容(已压缩或未压缩)。

示例

tar tvf backup.tar
tar tvfz backup.tar.gz
tar tvfj backup.tar.bz2

当备份中的文件数量很大时,可以将tar命令的结果管道到一个分页器morelessmost等)

tar tvf backup.tar | less

提示

要列出或检索备份的内容,在创建备份时不需要提及使用的压缩算法。也就是说,tar tvf等同于tar tvfj,用于读取内容,tar xvf等同于tar xvfj,用于提取。

提示

始终检查备份内容。

检查备份完整性

可以在创建备份时使用W键测试备份完整性

tar cvfW file_name.tar dir/

可以在创建备份后使用d键测试备份完整性

tar vfd file_name.tar dir/

提示

通过在前面的键中添加第二个v,您将获得存档文件的列表以及存档文件与文件系统中存在的存档文件之间的差异。

$ tar vvfd  /tmp/quodlibet.tar .quodlibet/
drwxr-x--- rockstar/rockstar     0 2021-05-21 00:11 .quodlibet/
-rw-r--r-- rockstar/rockstar     0 2021-05-19 00:59 .quodlibet/queue
[…]
-rw------- rockstar/rockstar  3323 2021-05-21 00:11 .quodlibet/config
.quodlibet/config: Mod time differs
.quodlibet/config: Size differs
[…]

W键也用于将存档的内容与文件系统进行比较

$ tar tvfW file_name.tar
Verify 1/file1
1/file1: Mod time differs
1/file1: Size differs
Verify 1/file2
Verify 1/file3

无法对压缩存档使用W键进行验证。必须使用D

tar dfz file_name.tgz
tar dfj file_name.tar.bz2

提取(解压缩)备份

使用xvf键提取(解压缩*.tar备份

/savings/etc.133.tar备份中的etc目录中提取etc/exports文件到活动目录的etc目录中

tar xvf /backups/etc.133.tar etc/exports

从压缩备份/backups/home.133.tar.bz2中提取所有文件到活动目录中

[root]# tar xvfj /backups/home.133.tar.bz2

将备份/backups/etc.133.P.tar中的所有文件提取到其原始目录中

tar xvfP /backups/etc.133.P.tar

警告

转到正确的位置。

检查备份内容。

描述
x从备份中提取文件,压缩或未压缩。

提取tar-gzipped*.tar.gz)备份使用xvfz键进行

tar xvfz backup.tar.gz

提取tar-bzipped*.tar.bz2)备份使用xvfj键进行

tar xvfj backup.tar.bz2

提示

要提取或列出备份内容,无需提及用于创建备份的压缩算法。也就是说,tar xvf 等于tar xvfj,用于提取内容,tar tvf 等于tar tvfj,用于列出。

警告

要将文件还原到其原始目录(tar xvfP 键),您必须使用绝对路径生成备份。也就是说,使用tar cvfP 键。

仅从tar 备份中提取一个文件

要从tar 备份中提取特定文件,请在tar xvf 命令末尾指定该文件的名称。

tar xvf backup.tar /path/to/file

前面的命令仅从backup.tar 备份中提取/path/to/file 文件。此文件将被还原到活动目录中创建或已存在的/path/to/ 目录中。

tar xvfz backup.tar.gz /path/to/file
tar xvfj backup.tar.bz2 /path/to/file
从备份tar 中提取一个文件夹

要仅从备份中提取一个目录(包括其子目录和文件),请在tar xvf 命令末尾指定目录名称。

tar xvf backup.tar /path/to/dir/

要提取多个目录,请依次指定每个名称。

tar xvf backup.tar /path/to/dir1/ /path/to/dir2/
tar xvfz backup.tar.gz /path/to/dir1/ /path/to/dir2/
tar xvfj backup.tar.bz2 /path/to/dir1/ /path/to/dir2/
使用正则表达式 (regex) 从tar 备份中提取一组文件

指定一个正则表达式 (regex) 来提取与指定选择模式匹配的文件。

例如,要提取所有扩展名为.conf 的文件

tar xvf backup.tar --wildcards '*.conf'

  • --wildcards *.conf 对应于扩展名为.conf 的文件。

CoPy Input Output - cpio

cpio 命令允许在多个连续媒体上保存,无需指定任何选项。

可以提取整个备份或其一部分。

tar 命令不同,没有选项可以同时备份和压缩。因此,它分两步完成:备份和压缩。

要使用cpio 执行备份,您必须指定要备份的文件列表。

此列表使用findlscat 命令提供。

  • find:递归或非递归地浏览树;
  • ls:递归或非递归地列出目录;
  • cat:读取包含要保存的树或文件的文件。

注意

ls 不能与-l(详细信息)或-R(递归)一起使用。

它需要一个简单的名称列表。

使用cpio 命令创建备份

cpio 命令的语法

[files command |] cpio {-o| --create} [-options] [<file-list] [>device]

示例

使用cpio 输出的重定向

find /etc | cpio -ov > /backups/etc.cpio

使用备份媒体的名称

find /etc | cpio -ovF /backups/etc.cpio

find 命令的结果通过管道(字符|AltGr+6)作为输入发送到cpio 命令。

这里,find /etc 命令返回与/etc 目录的内容相对应的文件列表(递归地)到cpio 命令,cpio 命令执行备份。

保存时不要忘记> 符号或F save_name_cpio

选项描述
-o创建备份(输出)。
-v显示已处理文件的名称。
-F指定要修改的备份(介质)。

备份到媒体

find /etc | cpio -ov > /dev/rmt0

媒体可以是多种类型

  • 磁带驱动器:/dev/rmt0
  • 分区:/dev/sda5/dev/hda5

备份类型

使用相对路径备份

cd /
find etc | cpio -o > /backups/etc.cpio

使用绝对路径备份

find /etc | cpio -o > /backups/etc.A.cpio

警告

如果find 命令中指定的路径是绝对路径,则备份将以绝对路径方式执行。

如果find 命令中指示的路径是相对路径,则备份将以相对路径方式执行。

添加到备份

[files command |] cpio {-o| --create} -A [-options] [<fic-list] {F|>device}

示例

find /etc/shadow | cpio -o -AF SystemFiles.A.cpio

只能在直接访问媒体上添加文件。

选项描述
-A将一个或多个文件添加到磁盘上的备份中。
-F指定要修改的备份。

压缩备份

  • 保存然后压缩
$ find /etc | cpio  –o > etc.A.cpio
$ gzip /backups/etc.A.cpio
$ ls /backups/etc.A.cpio*
/backups/etc.A.cpio.gz
  • 同时保存压缩
find /etc | cpio –o | gzip > /backups/etc.A.cpio.gz

tar 命令不同,没有选项可以同时保存和压缩。因此,它分两步完成:保存和压缩。

第一种方法的语法更容易理解和记忆,因为它分两步完成。

对于第一种方法,备份文件会由gzip 实用程序自动重命名,该实用程序会在文件名末尾添加.gz。类似地,bzip2 实用程序会自动添加.bz2

读取备份内容

读取cpio 备份内容的cpio 命令的语法

cpio -t [-options] [<fic-list]

示例

cpio -tv </backups/etc.152.cpio | less
选项描述
-t读取备份。
-v显示文件属性。

备份后,您需要读取其内容以确保没有错误。

同样,在执行还原之前,您必须读取将要使用的备份内容。

还原备份

还原备份的cpio 命令的语法

cpio {-i| --extract} [-E file] [-options] [<device]

示例

cpio -iv </backups/etc.152.cpio | less
选项描述
-i还原完整备份。
-E 文件仅还原其名称包含在文件中的文件。
--make-directories-d重建缺失的树结构。
-u替换所有文件,即使它们存在。
--no-absolute-filenames允许以相对方式还原以绝对模式创建的备份。

警告

默认情况下,在还原时,磁盘上的文件,其最后修改日期比备份日期晚或等于备份日期,将不会被还原(为了避免用旧信息覆盖最近的信息)。

另一方面,u 选项允许您还原文件的旧版本。

示例

  • 绝对备份的绝对还原
cpio –ivF home.A.cpio
  • 对现有树结构的绝对还原

u 选项允许您覆盖还原所在位置的现有文件。

cpio –iuvF home.A.cpio
  • 以相对模式还原绝对备份

长选项no-absolute-filenames 允许以相对模式进行还原。实际上,路径开头的/ 将被删除。

cpio --no-absolute-filenames -divuF home.A.cpio

提示

可能需要创建目录,因此使用d 选项

  • 还原相对备份
cpio –iv <etc.cpio
  • 文件或目录的绝对还原

还原特定文件或目录需要创建一个列表文件,然后必须将其删除。

echo "/etc/passwd" > tmp
cpio –iuE tmp -F etc.A.cpio
rm -f tmp

压缩 - 解压缩实用程序

在备份时使用压缩可能会带来一些弊端

  • 延长备份时间以及还原时间。
  • 它使向备份添加文件成为不可能。

注意

因此,最好先进行备份,然后再压缩,而不是在备份过程中压缩。

使用gzip 压缩

gzip 命令压缩数据。

gzip 命令的语法

gzip [options] [file ...]

示例

$ gzip usr.tar
$ ls
usr.tar.gz

文件将接收扩展名.gz

它保留相同的权限以及相同的最后访问和修改日期。

使用bunzip2 压缩

bunzip2 命令也压缩数据。

bzip2 命令的语法

bzip2 [options] [file ...]

示例

$ bzip2 usr.cpio
$ ls
usr.cpio.bz2

文件名将被赋予扩展名.bz2

bzip2 的压缩比gzip 的压缩好,但执行时间更长。

使用gunzip 解压缩

gunzip 命令解压缩压缩数据。

gunzip 命令的语法

gunzip [options] [file ...]

示例

$ gunzip usr.tar.gz
$ ls
usr.tar

文件名被gunzip 截断,扩展名.gz 被删除。

gunzip 也解压缩以下扩展名的文件

  • .z ;
  • -z ;
  • _z .

使用bunzip2 解压缩

bunzip2 命令解压缩压缩数据。

bzip2 命令的语法

bzip2 [options] [file ...]

示例

$ bunzip2 usr.cpio.bz2
$ ls
usr.cpio

文件名被bunzip2 截断,扩展名.bz2 被删除。

bunzip2 也解压缩以下扩展名的文件

  • -bz ;
  • .tbz2 ;
  • tbz .