Linux 管理员 – 备份和恢复
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/ [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$
以下同步通过我们的 LAN 发送了近 2.3GB 的数据。rsync 的美妙之处在于它在逐个文件的基础上以块级别递增地工作。这意味着,如果我们只更改 1MB 文本文件中的两个字符,则在下一次同步时,只有一两个块会通过 LAN 传输!
此外,可以禁用增量功能,以支持使用更多网络带宽以减少 CPU 使用率。如果在 1Gb 专用 Backup-Lan 上每 10 分钟不断复制几个 10MB 数据库文件,这可能被证明是可取的。原因是:这些将始终发生变化,并且每 10 分钟递增传输一次,并且可能会加重远程 CPU 的负载。由于总传输负载不会超过 5 分钟,我们可能只想同步整个数据库文件。
以下是rsync最常见的开关–
rsync syntax: rsync [options] [local path] [[remote host:remote path] or [target path
Switch | 行动 |
---|---|
-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/ [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的常用命令行开关和参数–
Switch | 行动 |
---|---|
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/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 =同步时使用的字节必须为一个物理介质对准。在这种情况下,如果没有读取精确的 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 | 行动 |
---|---|
-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 压缩文件备份
如前所述,我们可以使用带有-j或-z命令行开关的tar 中的 bzip2 或 gzip 。我们还可以使用 gzip 来压缩单个文件。但是,单独使用 bzip 或 gzip 无法提供与tar结合使用时那么多的功能。
使用gzip 时,默认操作是删除原始文件,将每个文件替换为添加 .gz 扩展名的压缩版本。
gzip 的一些常见命令行开关是 –
Switch | 行动 |
---|---|
-c | 放入存档后保留文件 |
-l | 获取压缩存档的统计信息 |
-r | 递归压缩目录中的文件 |
-1 thru 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压缩新创建的压缩包,并告诉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开关。
[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。
使用tarballs,让我们将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
一旦我们的 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 世界的标准。因此,应尽可能经常使用其他实用程序。