Linux 系统管理员 - 备份与恢复



在探索 CentOS 中部署标准备份计划的特定方法之前,让我们首先讨论标准级备份策略的典型考虑因素。我们首先要熟悉的是3-2-1 备份规则

3-2-1 备份策略

在整个行业中,您经常会听到 3-2-1 备份模型这个术语。在实施备份计划时,这是一个非常好的方法。3-2-1 定义如下:3份数据副本;例如,我们可能有工作副本;一个使用 rsync 在 CentOS 服务器上设计的用于冗余的副本;以及从备份服务器上的数据创建的轮换的异地 USB 备份。2种不同的备份介质。在这种情况下,我们实际上会有三种不同的备份介质:笔记本电脑或工作站的 SSD 上的工作副本,RADI6 阵列上的 CentOS 服务器数据,以及放在 USB 驱动器上的异地备份。1份异地数据副本;我们每天晚上将 USB 驱动器轮换到异地。另一种现代方法可能是云备份提供商。

系统恢复

裸机恢复计划仅仅是 CentOS 管理员制定的一项计划,用于使关键系统在线并确保所有数据完整。假设 100% 的系统故障和所有过去系统硬件的丢失,管理员必须制定一个计划来实现正常运行时间并保持用户数据完整,同时将停机时间降到最低。Linux 中使用的单片内核实际上使使用系统映像进行裸机恢复比 Windows 容易得多。而 Windows 使用的是微内核架构。

完整的 数据恢复 和裸机恢复通常是通过多种方法的组合来完成的,包括关键操作服务器的已配置的工作生产磁盘映像、符合 3-2-1 规则的用户数据的冗余备份。甚至一些敏感文件也可能存储在安全的防火保险箱中,只有受信任的公司人员才能有限地访问。

使用原生 CentOS 工具的多阶段裸机恢复数据恢复计划可能包括 -

  • 使用 dd 创建和恢复已配置服务器的生产磁盘映像

  • 使用 rsync 创建所有用户数据的增量备份

  • 使用 tar & gzip 存储带有管理员密码和注释的加密文件备份。通常,这可以放在 USB 驱动器上,加密并锁在一个高级经理可以访问的保险箱中。此外,这确保了如果当前管理员中了彩票并消失到某个阳光明媚的岛屿上,其他人也会知道重要的安全凭据。

如果系统因硬件故障或灾难而崩溃,则恢复操作的不同阶段将如下所示 -

  • 使用已配置的裸机映像构建工作服务器

  • 从备份中将数据恢复到工作服务器

  • 能够物理访问执行前两个操作所需的凭据

使用 rsync 进行文件级备份

rsync 是一个用于在本地或到另一台服务器同步文件目录的优秀实用程序。rsync 已被系统管理员使用多年,因此它非常适合用于备份数据。在我看来,sync 最好的功能之一是它能够从命令行进行脚本化。

在本教程中,我们将以各种方式讨论 rsync -

  • 探索并讨论一些常见选项
  • 创建本地备份
  • 通过 SSH 创建远程备份
  • 恢复本地备份

rsync 以其用途命名:远程同步,并且用途强大且灵活。

以下是通过 ssh 进行的基本rsync 远程备份 -

MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/ 
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
   6,148 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
   33,144 100%   31.61MB/s    0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
   892,406 100%   25.03MB/s    0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
   77 100%    2.21kB/s    0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
   43,188,224   1%    4.26MB/s    0:08:29
sent 2,318,683,608 bytes  received 446 bytes  7,302,941.90 bytes/sec
total size is 2,327,091,863  speedup is 1.00
MiNi:~ rdc$

以下同步通过我们的局域网发送了近 2.3GB 的数据。rsync 的优点在于它在文件的基础上以块级增量方式工作。这意味着,如果我们在 1MB 的文本文件中只更改了两个字符,那么在下一次同步时,只有 1 或 2 个块将通过局域网传输!

此外,可以禁用增量功能,以便使用更多的网络带宽以减少 CPU 利用率。如果每 10 分钟在 1Gb 专用备份局域网上不断复制几个 10MB 的数据库文件,这可能被证明是可取的。原因是:这些文件将始终发生变化,并且将每 10 分钟增量传输一次,这可能会增加远程 CPU 的负载。由于总传输负载不会超过 5 分钟,我们可能只需要完全同步数据库文件。

以下是rsync 最常用的开关 -

rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path

开关 操作
-a 归档模式,并假设 -r、-p、-t、-g、-l
-d 仅同步目录树,不包括文件
-r 递归进入目录
-l 将符号链接复制为符号链接
-p 保留权限
-g 保留组
-v 详细输出
-z 通过网络链接压缩
-X 保留扩展属性
-A 保留 ACL
-t 保留时间戳
-W 传输整个文件,而不是增量块
-u 不要覆盖目标上的文件
--progress 显示传输进度
--delete 删除目标上的旧文件
--max-size = XXX 要同步的最大文件大小

何时使用 rsync

我个人偏好rsync用于将源主机上的文件备份到目标主机。例如,所有用于数据恢复的主目录,甚至用于灾难恢复的异地和云端。

使用 rsync 进行本地备份

我们已经了解了如何将文件从一台主机传输到另一台主机。相同的方法可用于在本地同步目录和文件。

让我们手动对/etc/进行增量备份到我们的 root 用户目录。

首先,我们需要在 ~/root 中为同步备份创建一个目录 -

[root@localhost rdc]# mkdir /root/etc_baks

然后,确保有足够的可用磁盘空间。

[root@localhost rdc]# du -h --summarize /etc/ 
49M    /etc/
 
[root@localhost rdc]# df -h 
Filesystem           Size     Used     Avail    Use%     Mounted on 
/dev/mapper/cl-root   43G      15G        28G    35%         /

我们可以同步整个 /etc/ 目录 -

rsync -aAvr /etc/ /root/etc_baks/

我们同步的 /etc/ 目录 -

[root@localhost etc_baks]# ls -l ./
total 1436
drwxr-xr-x.   3 root root      101 Feb  1 19:40 abrt
-rw-r--r--.   1 root root       16 Feb  1 19:51 adjtime
-rw-r--r--.   1 root root     1518 Jun  7  2013 aliases
-rw-r--r--.   1 root root    12288 Feb 27 19:06 aliases.db
drwxr-xr-x.   2 root root       51 Feb  1 19:41 alsa
drwxr-xr-x.   2 root root     4096 Feb 27 17:11 alternatives
-rw-------.   1 root root      541 Mar 31  2016 anacrontab
-rw-r--r--.   1 root root       55 Nov  4 12:29 asound.conf
-rw-r--r--.   1 root root        1 Nov  5 14:16 at.deny
drwxr-xr-x.   2 root root       32 Feb  1 19:40 at-spi2
--{ condensed output }--

现在让我们进行增量 rsync -

[root@localhost etc_baks]# rsync -aAvr --progress  /etc/ /root/etc_baks/
sending incremental file list

test_incremental.txt 
   0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1145/1282)
   
sent 204620 bytes  received 2321 bytes  413882.00 bytes/sec
total size is 80245040  speedup is 387.77

[root@localhost etc_baks]#

仅复制了我们的test_incremental.txt文件。

使用 rsync 进行远程差异备份

让我们将初始 rsync 完全备份到已部署备份计划的服务器上。此示例实际上是将 Mac OS X 工作站上的文件夹备份到 CentOS 服务器。rsync 的另一个优点是它可以在任何已移植 rsync 的平台上使用。

MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes  received 336 bytes  9,720,257.27 bytes/sec
total size is 2,326,636,892  speedup is 1.00
MiNi:~ rdc$

我们现在已将工作站上的文件夹备份到运行 RAID6 卷的服务器上,并在异地存储了轮换的灾难恢复介质。使用 rsync 使我们能够仅使用一台服务器获得标准的 3-2-1 备份,该服务器具有昂贵的冗余磁盘阵列和轮换的差异备份。

现在,让我们在添加名为test_file.txt的新文件后,使用 rsync 对同一文件夹进行另一次备份。

MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff 
[email protected]'s password:  
sending incremental file list 
 ./ 
test_file.txt

sent 814 bytes  received 61 bytes  134.62 bytes/sec
total size is 2,326,636,910  speedup is 2,659,013.61
MiNi:~ rdc$

如您所见,只有新文件通过rsync传递到服务器。差异比较是在文件的基础上进行的。

需要注意的是:这只会复制新文件:test_file.txt,因为它是在唯一更改的文件。rsync 使用 ssh。我们从未需要在任何机器上使用 root 帐户。

简单、强大且有效,rsync非常适合备份整个文件夹和目录结构。但是,rsync本身并不会自动执行此过程。这就是我们需要深入我们的工具箱并找到最适合、最简单、最小的工具来完成这项工作的地方。

要使用cronjobs自动执行 rsync 备份,必须使用 SSH 密钥进行身份验证来设置 SSH 用户。这与 cronjobs 相结合,使 rsync 能够在定时间隔自动执行。

使用 DD 进行逐块裸机恢复映像

DD 是一个 Linux 实用程序,它自 Linux 内核诞生之初就一直与 GNU 实用程序一起使用。

简单来说,dd复制选定磁盘区域的映像。然后提供复制物理磁盘选定块的能力。因此,除非您有备份,否则一旦 dd 覆盖磁盘,所有块都将被替换。即使是价格昂贵的专业级数据恢复也无法恢复之前的数据丢失。

使用dd创建可启动系统映像的整个过程如下 -

  • 从具有可启动 Linux 发行版的 CentOS 服务器启动
  • 找到要成像的可启动磁盘的名称
  • 确定恢复映像的存储位置
  • 找到磁盘上使用的块大小
  • 启动 dd 映像操作

在本教程中,为了节省时间和简便起见,我们将从 CentOS 虚拟机创建主引导记录的 ISO 映像。然后我们将此映像存储在异地。如果我们的 MBR 损坏且需要恢复,则可以将相同过程应用于整个可启动磁盘或分区。但是,对于本教程而言,所需的时间和磁盘空间确实有点过分。

建议 CentOS 管理员在测试环境中熟练掌握恢复完全可启动的磁盘/分区,并执行裸机恢复。这将在最终需要在现实生活中与管理人员和几十个最终用户一起完成此实践时减轻很多压力,并计算停机时间。在这种情况下,10 分钟的摸索可能显得像一个永恒,让人感到紧张。

注意 - 使用 dd 时,请确保不要混淆源卷和目标卷。您可以通过将备份位置复制到引导驱动器来销毁数据和可引导服务器。或者可能更糟糕的是,使用 DD 在非常低的级别覆盖数据,从而永远销毁数据。

以下是dd常用的命令行开关和参数 -

开关 操作
if= 要复制的输入文件或源文件
of= 输出文件或输入文件的副本
bs 设置输入和输出块大小
obs 设置输出文件块大小
ibs 设置输入文件块大小
count 设置要复制的块数
conv 要添加的其他成像选项
Noerror 不要在发生错误时停止处理
sync 在发生错误或未对齐时填充不合适的输入块

关于块大小的说明 − dd 的默认块大小为 512 字节。这是低密度硬盘驱动器的标准块大小。如今,更高密度的硬盘驱动器已增加到 4096 字节(4kB)的块大小,以支持 1TB 及更大的磁盘。因此,在使用 dd 操作更新、更高容量的硬盘时,我们需要检查磁盘的块大小。

在本教程中,我们不会在生产服务器上使用dd,而是使用在 VMWare 中运行的 CentOS 安装。我们还将配置 VMWare 以引导可启动的 Linux ISO 镜像,而不是使用可启动的 USB 闪存盘。

首先,我们需要下载名为CentOS Gnome ISO的 CentOS 镜像。该镜像大小接近 3GB,建议始终保留一份副本,用于创建可启动的 USB 闪存盘以及引导虚拟服务器安装以进行故障排除和裸机镜像。

其他可启动的 Linux 发行版也可以正常工作。Linux Mint 可用于可启动 ISO 镜像,因为它具有出色的硬件支持和完善的 GUI 磁盘维护工具。

CentOS GNOME Live 可启动镜像可以从以下地址下载:http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso

让我们配置我们的 VMWare Workstation 安装以从我们的 Linux 可启动镜像引导。这些步骤适用于 OS X 上的 VMWare。但是,它们在 Linux、Windows 上的 VMWare Workstation 以及 Virtual Box 上都类似。

注意 − 使用 Virtual Box 或 VMWare Workstation 等虚拟桌面解决方案是设置学习 CentOS 管理任务的实验室场景的好方法。它提供了安装多个 CentOS 安装的功能,几乎无需硬件配置,从而使人们能够专注于管理,甚至可以在进行更改之前保存服务器状态。

首先,让我们配置一个虚拟 CD-ROM 并连接我们的 ISO 镜像以引导,而不是虚拟 CentOS 服务器安装 −

ISO image

现在,设置启动磁盘 −

Startup Disk

现在引导后,我们的虚拟机将从 CentOS 可启动 ISO 镜像引导,并允许访问先前配置的虚拟 CentOS 服务器上的文件。

让我们检查我们的磁盘,看看我们想从哪里复制 MBR(压缩输出如下)。

MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

我们已经找到我们的物理磁盘:sdasdb。每个磁盘的块大小都是 512 字节。因此,我们现在将运行dd命令来复制 SDA1 上 MBR 的前 512 字节。

最好的方法是 −

[root@mint rdc]# dd if=/dev/sda bs=512 count=1  | gzip -c >
/mnt/sdb/images/mbr.iso.gz 
1+0 records in 
1+0 records out 
512 bytes copied, 0.000171388 s, 3.0 MB/s

[root@mint rdc]# ls /mnt/sdb/ 
   mbr-iso.gz
   
[root@mint rdc]#

就这样,我们获得了主引导记录的完整镜像。如果我们有足够的空间来镜像引导驱动器,我们可以轻松地创建完整的系统引导镜像 −

dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz

当字节必须对齐到物理介质时,使用conv=sync。在这种情况下,如果未读取精确的 4K 对齐(例如,仅 3K 但需要在磁盘上占用至少一个 4K 块的文件。或者,读取时出现错误并且 dd 无法读取该文件),则 dd 可能会出错。因此,带有conv=sync,noerrordd将用微不足道但有用的数据填充 3K 到 4K 块对齐的物理介质中。同时不会出现可能终止大型操作的错误。

在处理来自磁盘的数据时,我们始终希望包含:conv=sync,noerror参数。

这仅仅是因为磁盘不像 TCP 数据那样是流。它们由对齐到特定大小的块组成。例如,如果我们有 512 字节的块,则只有 300 字节的文件仍然需要 512 字节的磁盘空间(可能是 2 个块用于 inode 信息,如权限和其他文件系统信息)。

使用 gzip 和 tar 进行安全存储

gzip 和 tar 是 CentOS 管理员必须习惯使用的两个实用程序。它们不仅用于解压缩存档。

在 CentOS Linux 中使用 Gnu Tar

Tar 是一种归档实用程序,类似于 Windows 上的winrar。它的名称Tape Archive(缩写为tar)几乎概括了该实用程序。tar将获取文件并将它们放入存档以方便逻辑操作。因此,我们可以将存储在 /etc 中的数十个文件“tar”成一个存档,以便于备份和存储。

多年来,tar一直是 Unix 和 Linux 上存储存档文件的标准。因此,将 tar 与gzipbzip一起使用被认为是每个系统上存档的最佳实践。

以下是与 tar 一起使用的常用命令行开关和选项列表 −

开关 操作
-c 创建新的 .tar 存档
-C 解压到不同的目录
-j 使用 bzip2 压缩
-z -z
-v 使用 gzip 压缩
-t -v
详细显示归档进度 -t
列出存档内容 -f

存档的文件名

tar -cvf [tar archive name]

-x

解压 tar 存档

以下是创建tar存档的基本语法。 关于 tar 的压缩机制的说明 − 建议在使用 tar 时坚持使用两种常见的压缩方案之一:gzip 和 bzip2。gzip 文件消耗更少的 CPU 资源,但通常文件较大。而 bzip2 压缩需要更长时间,会占用更多 CPU 资源,但会导致最终文件尺寸更小。
以下是创建tar存档的基本语法。 在使用文件压缩时,我们始终希望使用标准文件扩展名,让包括我们自己在内的每个人都知道(而不是通过反复试验猜测)需要使用哪种压缩方案来解压存档。
以下是创建tar存档的基本语法。 bzip2
.tbz .tar.tbz
.tbz .tb2

gzip

.tar.gz

[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/ 
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[rdc@mint Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz

.tgz

当需要在 Windows 机器上或用于 Windows 时可能需要解压存档时,建议使用.tar.tbz.tar.gz,因为大多数三个字符的单一扩展名会让 Windows 和仅限 Windows 的管理员感到困惑(但是,这有时是期望的结果)。

[root@centos ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[root@mint ~]# ping www.google.com

让我们从 Mac 工作站复制的远程备份创建gzip压缩的 tar 存档 −

[root@centos ~]# ls -l 
total 2262872 
-rw-------.   1   root   root       1752   Feb   1   19:52   anaconda-ks.cfg 
drwxr-xr-x. 137   root   root       8192   Mar   9   04:42   etc_baks 
-rw-r--r--.   1   root   root       1800   Feb   2   03:14   initial-setup-ks.cfg 
drwxr-xr-x.   6   rdc    rdc        4096   Mar  10   22:20   RemoteStuff 
-rw-r--r--.   1   root   root 2317140451   Mar  12   07:12   RemoteStuff.tgz 
-rw-r--r--.   1   root   root       9446   Feb  25   05:09   ssl.conf [root@centos ~]#

注意 − 我们没有将所有文件直接添加到存档中,而是将整个RemoteStuff文件夹归档。这是最简单的方法。因为解压时,整个RemoteStuff目录及其中的所有文件都将解压到当前工作目录中,即./currentWorkingDirectory/RemoteStuff/

现在让我们在/root/主目录中解压存档。

如上所示,所有文件都只是解压到了当前工作目录中的包含目录中。

使用 gzip 压缩文件备份

开关 操作
-c 如前所述,我们可以使用 tar 的-j-z命令行开关使用 bzip2 或 gzip。我们还可以使用 gzip 压缩单个文件。但是,单独使用 bzip 或 gzip 并不像与tar组合使用时那样提供那么多功能。
-l 使用gzip时,默认操作是删除原始文件,并用添加了 .gz 扩展名的压缩版本替换每个文件。
-r gzip 的一些常用命令行开关是 −
-k 将文件放入存档后保留文件

-l

获取压缩存档的统计信息

-r

递归压缩目录中的文件

[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[root@centos Documents]# ls
RemoteStuff.tar RemoteStuff/

-1 到 9

[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[root@centos Documents]# ls
RemoteStuff  RemoteStuff.tar  RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.

指定 1 到 9 范围内的压缩级别

[root@centos Documents]# gzip -l RemoteStuff.tar.gz  
     compressed        uncompressed        ratio uncompressed_name 
     2317140467          2326661120        0.4% RemoteStuff.tar
     
[root@centos Documents]#

gzip或多或少按文件为单位工作,而不是像某些 Windows 操作系统 zip 实用程序那样按存档为单位工作。这样做的主要原因是tar已经提供了高级的归档功能。gzip旨在仅提供压缩机制。

[root@centos Documents]# ls text_files/
 file1.txt  file2.txt  file3.txt  file4.txt  file5.txt
[root@centos Documents]#

因此,当想到gzip时,请考虑单个文件。当想到多个文件时,请考虑tar存档。现在让我们用我们之前的tar存档来探索这一点。

[root@centos Documents]# gzip -9 -r text_files/

[root@centos Documents]# ls ./text_files/
file1.txt.gz  file2.txt.gz  file3.txt.gz  file4.txt.gz  file5.txt.gz
 
[root@centos Documents]#

注意 − 经验丰富的 Linux 专业人员通常将 tar 存档称为 tarball。

让我们从我们的rsync备份创建另一个tar存档。

[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php

为了演示的目的,让我们gzip新创建的 tarball,并告诉gzip保留旧文件。默认情况下,如果没有-c选项,gzip 将用.gz文件替换整个 tar 存档。

[root@centos Documents]# ls /tmp 
hsperfdata_root
RemoteStuff

让我们尝试使用gzip-l开关进行测试。

为了演示gzip与 Windows Zip 实用程序的不同之处,让我们对一个文本文件文件夹运行 gzip。

现在让我们使用 -r 选项递归压缩目录中的所有文本文件。

看到了吗?这可能不是一些人预期的结果。所有原始文本文件都被删除,并且每个文件都被单独压缩。由于这种行为,最好在需要处理单个文件时单独考虑gzip

使用tarball,让我们将rsynced的 tarball 解压到一个新目录中。

如上所示,我们将 tarball 解压并解压缩到 /tmp 目录中。

加密 TarBall 存档

[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB  00:00:00
epel/x86_64/metalink
|  13 kB  00:00:00
epel
| 4.3 kB  00:00:00
extras
| 3.4 kB  00:00:00
updates
| 3.4 kB  00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB  00:00:04      
(2/2):
epel/x86_64/primary_db
| 4.6 MB  00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved

加密 tarball 存档以存储可能需要由组织的其他员工访问的安全文档(以防灾难恢复)可能是一个棘手的概念。基本上有三种方法可以做到这一点:使用 GnuPG,或使用 openssl,或使用第三方实用程序。

GnuPG 主要用于非对称加密,并且考虑了身份关联,而不是密码。诚然,它可以与对称加密一起使用,但这并不是 GnuPG 的主要优势。因此,当需要多人访问(例如,可能是一位公司经理,希望防止管理员以杠杆的方式持有所有密钥)时,我会排除 GnuPG 用于存储具有物理安全性的存档。

7z a -p <output filename><input filename>

与 GnuPG 一样,Openssl 可以满足我们的需求,并且与 CentOS 一起提供。但同样,它并非专门设计用于满足我们的需求,并且加密在安全社区中也受到质疑。

[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)

Creating archive: RemoteStuff.tgz.7z

Items to compress: 1

Enter password (will not be echoed):
Verify password (will not be echoed) :

Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[root@centos Documents]# ls
RemoteStuff  RemoteStuff.tar  RemoteStuff.tar.gz  RemoteStuff.tgz.7z  slapD
text_files

[root@centos Documents]#

我们的选择是一个名为7zip的实用程序。7zip 是一种类似于gzip的压缩实用程序,但具有更多功能。与 Gnu Gzip 一样,7zip 及其标准也存在于开源社区中。我们只需要从我们的 EHEL 存储库中安装 7zip(下一章将详细介绍安装扩展企业存储库)。

在 Centos 上安装 7zip

对于较大的档案,进一步加密和重新压缩的过程可能需要一些时间。

7zip 是一款功能更强大的工具,比 gzip 或 bzip2 具有更多功能。但是,它在 CentOS 或 Linux 世界中并不像其他工具那样标准。因此,应尽可能多地使用其他实用程序。

广告