- Linux 管理教程
- 家
- CentOS概述
- CentOS Linux 基本命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd 服务启动和停止
- 使用 systemctl 进行资源管理
- 使用 crgroups 进行资源管理
- 流程管理
- 防火墙设置
- 在 CentOS Linux 中配置 PHP
- 在 CentOS Linux 上设置 Python
- 在 CentOS Linux 上配置 Ruby
- 为 CentOS Linux 设置 Perl
- 安装和配置开放 LDAP
- 创建 SSL 证书
- 安装 Apache Web 服务器 CentOS 7
- CentOS 7 上的 MySQL 设置
- 设置 Postfix MTA 和 IMAP/POP3
- 安装匿名 FTP
- 远程管理
- CentOS中的流量监控
- 日志管理
- 备份与恢复
- 系统升级
- 外壳脚本
- 包管理
- 卷管理
- Linux 管理有用资源
- Linux 管理员 - 快速指南
- Linux 管理员 - 有用的资源
- 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/ 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 | 不要覆盖目标上的文件 |
- 进步 | 显示传输进度 |
- 删除 | 删除目标上的旧文件 |
--最大大小= 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 Workstation上的文件夹备份到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的常见命令行开关和参数-
转变 | 行动 |
---|---|
如果= | 在要复制的文件或源中 |
的= | 输出文件或输入文件的副本 |
废话 | 设置输入和输出块大小 |
观测值 | 设置输出文件块大小 |
肠易激综合症 | 设置输入文件块大小 |
数数 | 设置要复制的块数 |
转化次数 | 为成像添加额外选项 |
无错误 | 不要停止处理错误 |
同步 | 如果发生错误或未对准,则填充未安装的输入块 |
关于块大小的注意事项- 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 映像启动,并允许访问之前配置的虚拟 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 无法读取文件。)。因此,dd与conv=sync,noerror将以 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 一起使用的常见命令行开关和选项的列表 -
转变 | 行动 |
---|---|
-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 资源;但会导致最终文件更小。
当使用文件压缩时,我们总是希望使用标准文件扩展名,让包括我们自己在内的每个人都知道(而不是通过反复试验来猜测)提取档案需要什么压缩方案。
压缩包2 | .tbz |
压缩包2 | .tar.tbz |
压缩包2 | .tb2 |
压缩包 | .tar.gz |
压缩包 | .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 的一些常见命令行开关是 -
转变 | 行动 |
---|---|
-C | 放入存档后保留文件 |
-l | 获取压缩档案的统计信息 |
-r | 递归压缩目录中的文件 |
-1 至 9 | 指定 1 到 9 范围内的压缩级别 |
gzip或多或少是在逐个文件的基础上工作的,而不是像某些 Windows O/S zip 实用程序那样在存档的基础上工作。主要原因是tar已经提供了高级归档功能。gzip的设计目的只是提供一种压缩机制。
因此,当考虑gzip时,请考虑单个文件。当考虑多个文件时,请考虑tar档案。现在让我们用之前的tar存档来探索这一点。
注意- 经验丰富的 Linux 专业人士通常将 tarted 存档称为 tarball。
让我们从rsync备份中创建另一个tar存档。
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/ [root@centos Documents]# ls RemoteStuff.tar RemoteStuff/
出于演示目的,让我们对新创建的 tarball进行 gzip 压缩,并告诉gzip保留旧文件。默认情况下,如果没有-c选项,gzip 会将整个 tar 存档替换为.gz文件。
[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]#
看?出乎一些人的预料。所有原始文本文件都被删除,每个文件都被单独压缩。由于这种Behave,当需要在单个文件中工作时,最好单独考虑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 世界的标准。因此,应尽可能经常使用其他实用程序。