尽管 Linux 是现存最安全的操作系统之一,即使它被设计为持续运行,数据也可能会丢失。 数据丢失最常见的原因是用户错误,但有时系统故障(例如电源或磁盘故障)也是原因,因此保留敏感和/或重要数据的额外副本始终是一个好主意。
9.1.1. 准备数据
9.1.1.1. 使用 tar 归档
在大多数情况下,我们首先将所有数据收集到一个存档文件中进行备份,稍后我们将对其进行压缩。 归档过程涉及连接所有列出的文件并去除不必要的空白。 在 Linux 中,这通常使用 焦油 命令。 焦油 最初设计用于在磁带上归档数据,但它也可以进行归档,称为 tar包.
tar 有很多选项,下面列举了最重要的选项:
• -v: 冗长
• -t: 测试,显示 tarball 的内容
• -x: 提取存档
• -c: 创建存档
• -f 归档设备:使用归档设备作为 tarball 的源/目标,设备默认为第一个磁带设备(通常是 /dev/st0 或类似的东西)
• -j: 过滤 bzip2,见第 9.1.1.2 节
省略破折号前缀是很常见的 焦油 选项,您可以从下面的示例中看到。
使用 GNU tar 以获得兼容性
使用专有技术制作的档案 焦油 一个系统上的版本,可能与 焦油 在另一个专有系统上。 这可能会引起很多头痛,例如是否需要恢复存档
在一个不再存在的系统上。 使用 GNU 焦油 所有系统上的版本,以防止您的系统管理员泪流满面。 Linux 总是使用 GNU tar。 在其他 UNIX 机器上工作时,输入 焦油 - 帮帮我 找出您正在使用的版本。 如果您在某处没有看到 GNU 一词,请联系您的系统管理员。
在下面的示例中,创建并解压了一个存档。
盖比:~> ls 图像/
我+tux.jpg nimf.jpg
盖比:~> tar cvf images-in-a-dir.tar 图像/
图像/图像/nimf.jpg图像/me+tux.jpg
盖比:~> 光盘图像
盖比:~/图像> tar cvf images-without-a-dir.tar *.jpg
我+tux.jpg nimf.jpg
盖比:~/图像> cd
盖比:~> ls */*.tar
图像/无图像目录.tar
盖比:~> ls *.tar
目录中的图像.tar
盖比:~> tar xvf images-in-a-dir.tar
图像/图像/nimf.jpg图像/me+tux.jpg
盖比:~> tar tvf 图像/无目录的图像.tar
-rw-r--r-- 加比/加比 42888 1999-06-30 20:52:25 me+tux.jpg
-rw-r--r-- 加比/加比 7578 2000-01-26 12:58:46 nimf.jpg
盖比:~> tar xvf 图像/无图像目录.tar
我+tux.jpg nimf.jpg
盖比:~> ls *.jpg
我+tux.jpg nimf.jpg
盖比:~> ls 图像/
我+tux.jpg nimf.jpg
盖比:~> tar cvf images-in-a-dir.tar 图像/
图像/图像/nimf.jpg图像/me+tux.jpg
盖比:~> 光盘图像
盖比:~/图像> tar cvf images-without-a-dir.tar *.jpg
我+tux.jpg nimf.jpg
盖比:~/图像> cd
盖比:~> ls */*.tar
图像/无图像目录.tar
盖比:~> ls *.tar
目录中的图像.tar
盖比:~> tar xvf images-in-a-dir.tar
图像/图像/nimf.jpg图像/me+tux.jpg
盖比:~> tar tvf 图像/无目录的图像.tar
-rw-r--r-- 加比/加比 42888 1999-06-30 20:52:25 me+tux.jpg
-rw-r--r-- 加比/加比 7578 2000-01-26 12:58:46 nimf.jpg
盖比:~> tar xvf 图像/无图像目录.tar
我+tux.jpg nimf.jpg
盖比:~> ls *.jpg
我+tux.jpg nimf.jpg
此示例还说明了 tar 目录和一堆 tar 文件之间的区别。 建议只压缩目录,这样在解压 tarball 时文件就不会散开(可能在另一个系统上,您可能不知道哪些文件已经存在,哪些是来自存档的文件)。
当磁带驱动器连接到您的机器并由您的系统管理员配置时,以 。柏油 替换为磁带设备名称,例如:
焦油 cvf /dev/磁带邮件/
目录 mail 并且它包含的所有文件都被压缩成一个文件,并立即写入磁带。 显示内容列表是因为我们使用了详细选项。
9.1.1.2. 使用 tar 进行增量备份
这个 焦油 工具支持创建增量备份,使用 -N 选项。 使用此选项,您可以指定日期,以及 焦油 将根据此日期检查所有指定文件的修改时间。 如果文件的更改时间比日期更近,则它们将包含在备份中。 下面的示例使用上一个存档的时间戳作为日期值。 首先,创建初始存档并显示初始备份文件的时间戳。 然后创建一个新文件,我们在其上进行新备份,仅包含这个新文件:
吉米:~> tar cvpf /var/tmp/javaproggies.tar java/*.java
java/btw.java java/error.java java/hello.java java/income2.java java/income.java java/inputdevice.java java/input.java java/master.java java/method1.java java/mood.java java/moodywaitres.java java/test3.java java/TestOne.java java/TestTwo.java java/Vehicle.java
吉米:~> ls -l /var/tmp/javaproggies.tar
-rw-rw-r-- 1 吉米吉米 10240 21 月 11 日 58:XNUMX /var/tmp/javaproggies.tar 吉米:~> 触摸 java/newprog.java
吉米:~> 焦油 -N /var/tmp/javaproggies.tar \
-cvp /var/tmp/incremental1-javaproggies.tar java/*.java 2> /dev/null
java/newprog.java 吉米:~> 光盘 /var/tmp/
吉米:~> tar xvf增量1-javaproggies.tar
java/newprog.java
吉米:~> tar cvpf /var/tmp/javaproggies.tar java/*.java
java/btw.java java/error.java java/hello.java java/income2.java java/income.java java/inputdevice.java java/input.java java/master.java java/method1.java java/mood.java java/moodywaitres.java java/test3.java java/TestOne.java java/TestTwo.java java/Vehicle.java
吉米:~> ls -l /var/tmp/javaproggies.tar
-rw-rw-r-- 1 吉米吉米 10240 21 月 11 日 58:XNUMX /var/tmp/javaproggies.tar 吉米:~> 触摸 java/newprog.java
吉米:~> 焦油 -N /var/tmp/javaproggies.tar \
-cvp /var/tmp/incremental1-javaproggies.tar java/*.java 2> /dev/null
java/newprog.java 吉米:~> 光盘 /var/tmp/
吉米:~> tar xvf增量1-javaproggies.tar
java/newprog.java
标准错误被重定向到 的/ dev / null的. 如果你不这样做, 焦油 将为每个未更改的文件打印一条消息,告诉您它不会被转储。
这种工作方式的缺点是它查看文件上的时间戳。 假设您将存档下载到包含备份的目录中,并且存档包含两年前创建的文件。 当根据初始存档上的时间戳检查这些文件的时间戳时,新文件实际上看起来很旧 焦油,并且不会包含在使用 -N 选项。
更好的选择是 -g 选项,这将创建要备份的文件列表。 进行增量备份时,会根据此列表检查文件。 这是它的工作原理:
吉米:~> 焦油 cvpf 工作-20030121.tar -g 快照-20030121 工作/
工作/工作/文件1工作/文件2工作/文件3
吉米:~> 文件快照-20030121
吉米:~> 焦油 cvpf 工作-20030121.tar -g 快照-20030121 工作/
工作/工作/文件1工作/文件2工作/文件3
吉米:~> 文件快照-20030121
快照-20030121: ASCII码 文本 第二天,用户 吉米 适用于 file3 多一点,并创造 file4. 在一天结束时,他做了一个新的备份:
吉米:~> 焦油 cvpf 工作-20030122.tar -g 快照-20030121 工作/
工作/工作/文件3 工作/文件4
吉米:~> 焦油 cvpf 工作-20030122.tar -g 快照-20030121 工作/
工作/工作/文件3 工作/文件4
这些是一些非常简单的示例,但您也可以在 cronjob 中使用这种命令(参见第 4.4.4 节),它指定例如每周备份的快照文件和每日备份的快照文件。
在这种情况下,进行完整备份时应替换快照文件。 更多信息可以在 焦油 文档。
真正的东西
你可能会注意到, 焦油 当我们谈论一个简单的目录,一组属于一起的文件时是可以的。 但是,当您想要归档整个分区或磁盘或更大的项目时,有一些更易于管理的工具。 我们只是解释一下 焦油 在这里是因为它是一个非常流行的分发档案的工具。 经常会发生您需要安装随附的软件的情况
所谓的“压缩 tarball”。 有关执行常规备份的更简单方法,请参阅第 9.3 节。
9.1.1.3. 使用 gzip 或 bzip2 压缩和解包
可以使用 zip 工具压缩包括 tarball 在内的数据。 这 GZIP 命令会将后缀 .gz 添加到文件名并删除原始文件。
吉米:~> ls -la | 焦油
-rw-rw-r-- 1 jimmy jimmy 61440 Jun 6 14:08 images-without-dir.tar jimmy:~> gzip 没有 dir.tar 的图像
吉米:~> ls -la images-without-dir.tar.gz
-rw-rw-r-- 1 jimmy jimmy 50562 6 月 14 日 08:XNUMX images-without-dir.tar.gz
吉米:~> ls -la | 焦油
-rw-rw-r-- 1 jimmy jimmy 61440 Jun 6 14:08 images-without-dir.tar jimmy:~> gzip 没有 dir.tar 的图像
吉米:~> ls -la images-without-dir.tar.gz
-rw-rw-r-- 1 jimmy jimmy 50562 6 月 14 日 08:XNUMX images-without-dir.tar.gz
使用以下命令解压缩 gzip 文件 -d 选项。
bzip2 以类似的方式工作,但使用改进的压缩算法,从而创建更小的文件。 有关更多信息,请参阅 bzip2 信息页面。
Linux 软件包通常以 gzip 压缩包的形式分发。 解开这种档案后,明智的做法是找到 读我 并阅读它。 它通常包含安装包的指南。
GNU 焦油 命令知道 gzip 压缩的文件。 使用命令
焦油 zxvf 文件.tar.gz
用于解压缩和解压 名为.tar.gz or 。TGZ 文件。 用
焦油 jxvf 文件.tar.bz2
用于开箱 焦油 压缩的档案 bzip2.
9.1.1.4. Java档案
GNU 项目为我们提供了 罐 用于创建 Java 档案的工具。 它是一个 Java 应用程序,可将多个文件合并为一个 JAR 归档文件。 同时也是一个通用的归档和压缩工具,基于 ZIP 和 ZLIB 压缩格式, 罐 主要旨在促进将 Java 代码、小程序和/或应用程序打包到单个文件中。 将 Java 应用程序的组件合并到一个存档中时,可以更快地下载它们。
不比 焦油, 罐 默认情况下压缩,独立于其他工具 - 因为它基本上是 Java 版本的 拉链. 此外,它还允许作者对档案中的各个条目进行签名,从而可以验证来源。
语法几乎与 焦油 命令,我们参考 info 罐 对于具体的差异。
tar、jar 和符号链接
标准文档中没有真正提到的一个值得注意的功能是 罐 将遵循符号链接。 这些链接指向的数据将包含在存档中。 默认在 焦油 是只备份符号链接,但可以使用 -h 至 焦油.
9.1.1.5. 传输您的数据