Linux 备份和恢复
在探讨 CentOS 部署标准备份计划的特定方法之前,让我们首先讨论标准级别备份策略的典型注意事项。我们首先要习惯的是
3-2-1 备份规则。
3-2-1 备份策略
在整个行业中,您经常会听到术语 3-2-1 备份模型。在实施备份计划时,这是一种非常好的方法。 3-2-1定义如下:
3份数据;例如,我们可能有工作副本;复制到 CentOS 服务器上,使用 rsync 进行冗余设计;轮换的异地 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 文本文件中的两个字符,那么下次同步时只会跨局域网传输一两个块!
此外,可以禁用增量功能,以支持使用更多网络带宽以减少 CPU 使用率。如果在 1Gb 专用 Backup-Lan 上每 10 分钟不断复制几个 10MB 数据库文件,这可能被证明是可取的。理由是:这些总是在变化,每 10 分钟递增传输一次,可能会增加远程 CPU 的负载。由于总传输负载不会超过 5 分钟,我们可能只想同步整个数据库文件。
以下是
rsync 最常见的Switch-
rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path
Switch |
Action |
-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 进行本地备份
我们已经了解了如何将文件从一台主机传输到另一台主机。可以使用相同的方法在本地同步目录和文件。
让我们在 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 损坏并需要恢复,可以将相同的过程应用于整个 bootable 磁盘或分区。然而,本教程所需的时间和磁盘空间确实有点过分了。
鼓励 CentOS 管理员精通在测试环境中恢复完全可引导的磁盘/分区并执行裸机恢复。当最终需要在现实生活中与经理和几十个计算停机时间的最终用户一起完成实践时,这将减轻很多压力。在这种情况下,10 分钟搞清楚事情似乎是永恒的,并且会让人流汗。
注意-使用 dd 时,请确保不要混淆源卷和目标卷。您可以通过将备份位置复制到引导驱动器来破坏数据和可引导服务器。或者更糟糕的是,通过使用 DD 在非常低的级别复制数据来永远破坏数据。
以下是
dd 的常用命令行Switch和参数-
Switch |
Action |
if= |
在要复制的文件或源中 |
of= |
输出文件或输入文件的副本 |
bs |
设置输入和输出块大小 |
obs |
设置输出文件块大小 |
ibs |
设置输入文件块大小 |
count |
设置要复制的块数 |
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 服务器安装-
现在,设置启动盘-
现在启动时,我们的虚拟机将从 CentOS 可启动 ISO 映像启动,并允许访问先前配置的 Virtual 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
我们已经找到了两个物理磁盘:
sda 和
sdb。每个块的大小为 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 无法读取文件。)。因此,带有
conv=sync,noerror 的
dd 将在 4K 块对齐中用微不足道但有用的数据填充 3K 到物理介质。虽然不会出现可能结束大型操作的错误。
处理来自磁盘的数据时,我们总是希望包含:
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 与
gzip 或
bzip 一起使用被认为是每个系统上存档的最佳做法。
以下是与 tar 一起使用的常用命令行Switch和选项的列表-
Switch |
Action |
-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 工作站复制的远程备份创建
gzipped 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 压缩文件备份
如前所述,我们可以使用带有
-j 或
-z 命令行Switch的 tar 中的 bzip2 或 gzip。我们还可以使用 gzip 来压缩单个文件。何但是,单独使用 bzip 或 gzip 所提供的功能不如与
tar 结合使用时多。
使用
gzip 时,默认操作是删除原始文件,将每个文件替换为添加 .gz 扩展名的压缩版本。
gzip 的一些常见命令行Switch是-
Switch |
Action |
-c |
放入存档后保留文件 |
-l |
获取压缩存档的统计数据 |
-r |
递归压缩目录中的文件 |
-1 到 9 |
以 1 到 9 的比例指定压缩级别 |
gzip 或多或少是在逐个文件的基础上工作的,而不是像某些 Windows O/S zip 实用程序那样在存档的基础上工作。这样做的主要原因是
tar 已经提供了高级归档功能。
gzip 旨在仅提供压缩机制。
因此,在考虑
gzip 时,请考虑单个文件。考虑多个文件时,请考虑
tar 档案。现在让我们用我们之前的
tar 存档来探索这个。
注意-经验丰富的 Linux 专业人士通常将 tar 压缩的存档称为 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.
让我们尝试使用
gzip 测试
-l Switch。
[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 实用程序的不同之处,让我们对文本文件文件夹运行 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
如上所示,我们将 tarball 提取并解压到/tmp 目录中。
[root@centos Documents]# ls /tmp
hsperfdata_root
RemoteStuff
加密 TarBall 档案
加密用于存储组织其他员工可能需要访问的安全文档的 tarball 存档,在灾难恢复的情况下,可能是一个棘手的概念。基本上有三种方法可以做到这一点:使用 GnuPG,或使用 openssl,或使用第三方实用程序。
GnuPG 主要是为非对称加密而设计的,并且考虑的是身份关联而不是密码。没错,它可以与对称加密一起使用,但这不是 GnuPG 的主要优势。因此,当需要访问的人多于原始人时,我会认为 GnuPG 用于存储具有物理安全性的档案(例如,可能是公司经理想要防止管理员持有王国的所有密钥作为杠杆)。
像 GnuPG 这样的 Openssl 可以做我们想做的事情,并且随 CentOS 一起提供。但同样,它并不是专门为做我们想做的事情而设计的,而且加密在安全社区中受到了质疑。
我们选择的是一个名为
7zip 的实用程序。 7zip 是一个类似于
gzip 的压缩实用程序,但具有更多功能。与 Gnu Gzip 一样,7zip 及其标准属于开源社区。我们只需要从我们的 EHEL 存储库安装 7zip(下一章将详细介绍如何安装扩展企业存储库)。
在 Centos 上安装 7zip
在 CentOS 中加载和配置我们的 EHEL 存储库后,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 世界的标准。因此,应尽可能经常使用其他实用程序。