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/ 
rdc@192.168.1.143:home/rdc/ Documents/RemoteStuff/
rdc@192.168.1.143'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$

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

此外,可以禁用增量功能,以使用更多的网络带宽,从而减少 CPU 利用率。如果在 1Gb 专用备份 LAN 上每 10 分钟不断复制几个 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 不覆盖文件target
--progress 显示传输进度
--delete 删除目标上的旧文件
--max-size = XXX 要同步的最大文件大小

何时使用 rsync

我个人更喜欢将 rsync 的文件从源主机备份到目标主机。例如,所有主目录用于数据恢复,甚至异地备份到云中用于灾难恢复。

使用 rsync 进行本地备份

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

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

首先,我们需要在 ~/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/
rdc@192.168.1.143:Documents/RemoteStuff
rdc@192.168.1.143'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/
rdc@192.168.1.143:Documents/RemoteStuff 
rdc@192.168.1.143'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 设置要复制的块数copy
conv 为成像添加额外选项
Noerror 不停止处理错误
sync 在发生错误或错位时填充未安装的输入块

块大小注意事项 − dd 的默认块大小为 512 字节。这是低密度硬盘驱动器的标准块大小。如今的高密度 HDD 已增加到 4096 字节 (4kB) 块大小,以允许 1TB 及更大的磁盘。因此,在将 dd 与容量更大的新硬盘一起使用之前,我们需要检查磁盘块大小。

在本教程中,我们将使用在 VMWare 中运行的 CentOS 安装,而不是使用 dd 在生产服务器上工作。我们还将配置 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 甚至 Virtual Box 上的 VMWare Workstation 上是类似的。

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

首先,让我们配置一个虚拟 cd-rom 并将我们的 ISO 映像附加到启动而不是虚拟 CentOS 服务器安装 −

ISO 映像

现在,设置启动磁盘 −

启动磁盘

现在启动时,我们的虚拟机将从 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 对齐,dd 可能会出错(例如...一个只有 3K 的文件,但需要占用磁盘上至少一个 4K 块。或者,只是读取错误,dd 无法读取该文件。)。因此,ddconv=sync,noerror 会将 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 将获取文件并将其放入档案中,以方便逻辑处理。因此,我们可以将它们"tar"到档案中,而不是存储在 /etc 中的数十个文件,以便于备份和存储。

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

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

开关 操作
-c 创建新的 .tar 存档
-C 提取到其他目录
-j 使用 bzip2 压缩
-z 使用 gzip 压缩
-v 详细显示存档进度
-t 列出存档内容
-f 存档的文件名
-x 提取 tar 存档

以下是创建 tar 存档的基本语法。

tar -cvf [tar archive name]

关于 tar 压缩机制的说明 − 使用 tar 时,建议坚持使用两种常见压缩方案之一:gzip 和 bzip2。gzip 文件消耗的 CPU 资源较少,但通常较大。虽然 bzip2 压缩需要更长时间,但它们会占用更多 CPU 资源;但会导致最终文件大小较小。

使用文件压缩时,我们始终希望使用标准文件扩展名,让包括我们自己在内的每个人都知道(而不是通过反复试验来猜测)提取档案所需的压缩方案。

bzip2 .tbz
bzip2 .tar.tbz
bzip2 .tb2
gzip .tar.gz
gzip .tgz

当需要在 Windows 机器上提取档案或在 Windows 上使用时,建议使用 .tar.tbz.tar.gz,因为大多数三个字符的单个扩展名会使 Windows 和 Windows 管理员感到困惑(然而,这有时是期望的结果)

让我们从 Mac 工作站复制的远程备份中创建一个 gzip tar 档案 −

[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

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

现在让我们提取 /root/ 主目录中的存档。

[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

如上所示,所有文件都被简单地提取到我们当前工作目录内的包含目录中。

[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 ~]#

使用 gzip 压缩文件备份

如前所述,我们可以使用 tar 中的 bzip2 或 gzip 以及 -j-z 命令行开关。我们还可以使用 gzip 压缩单个文件。但是,单独使用 bzip 或 gzip 无法提供与 tar 结合使用时那么多的功能。

使用 gzip 时,默认操作是删除原始文件,并用添加 .gz 扩展名的压缩版本替换每个文件。

gzip 的一些常见命令行开关是 −

开关 操作
-c 将文件放入存档后保留
-l 获取压缩存档的统计信息
-r 递归压缩存档中的文件目录
-1 至 9 以 1 至 9 的等级指定压缩级别

gzip 或多或少以文件为基础工作,而不是像某些 Windows O/S zip 实用程序那样以存档为基础工作。主要原因是 tar 已经提供了高级存档功能。gzip 旨在仅提供压缩机制。

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

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

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

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

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

[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.

Let's try to test the -l switch with gzip.

[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 Utilities 的不同之处,让我们在一个文本文件夹上运行 gzip。

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

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

[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]#

看到了吗?可能并非某些人所预料的那样。所有原始文本文件均被删除,并且每个文件均单独压缩。由于此行为,当需要在单个文件中工作时,最好单独考虑 gzip

使用 tarball,让我们将 rsynced tarball 提取到新目录中。

[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

As seen above, we extracted and decompressed our tarball into the /tmp directory.

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

加密 TarBall 档案

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

GnuPG 主要用于非对称加密,考虑的是身份关联而不是密码。没错,它可以与对称加密一起使用,但这不是 GnuPG 的主要优势。因此,当需要访问的人比原始人员多时(例如,可能是一位公司经理想要防止管理员掌握公司的所有钥匙作为筹码),我会忽略 GnuPG 用于存储具有物理安全性的档案。

Openssl 和 GnuPG 一样,可以做我们想要做的事情,并且随 CentOS 一起提供。但同样,它并不是专门为实现我们想要的功能而设计的,而且加密在安全社区中也受到了质疑。

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

在 Centos 上安装 7zip

一旦我们的 EHEL 存储库在 CentOS 中加载和配置完毕,7zip 的安装就很简单了。

[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

就这么简单,7zip 已安装完毕,可以使用 256 位 AES 加密来加密我们的 tarball 存档。

现在让我们使用 7z 用密码加密我们的 gzip 压缩存档。这样做的语法非常简单 −

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

其中,a: 添加到存档,-p: 加密并提示输入密码

[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]#

现在,我们有了 .7z 存档,它使用 256 位 AES 加密 gzip 压缩包。

注意 − 7zip 使用 AES 256 位加密,对密码和计数器进行 SHA-256 哈希处理,重复最多 512K 次以生成密钥。如果使用复杂的密钥,这应该足够安全。

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

7zip 是一种高级产品,具有比 gzip 或 bzip2 更多的功能。但是,它在 CentOS 或 Linux 世界中并不是标准产品。因此,应尽可能经常使用其他实用程序。