愚蠢的 afio 技巧

作者:LJ Staff

我已经介绍了 tar 以及使用它的各种奇妙方法,但它不是你唯一可用的工具。 另一个流行的备份工具是 afio。 根据您的发行版,它可能已经安装。 例如,在 Ubuntu 上,运行以下命令进行安装

sudo apt-get install afio

现在您有了一个相当强大的工具来归档文件和进行备份。

默认情况下,afio 从标准输入读取要存档的文件,并将存档写入标准输出。 这意味着你可以使用另一个程序(例如 find)创建一个要存档的文件列表,然后通过管道将其传递给 afio 来进行实际存档。 获取文件列表后,可以将五个基本命令应用于这些文件

  • -o — 创建一个归档文件。
  • -i — 安装(或解包)一个归档文件。
  • -t — 测试(或列出)存储在归档文件中的文件。
  • -r — 根据文件系统验证存储在归档文件中的文件。
  • -p — 将文件复制到给定的目录位置。

如果要创建一个包含所有 C 源代码文件的简单归档文件,请执行

find . -name *.c -print | afio -o -Z source_code

当您想再次提取这些文件时,请执行

afio -i -Z source_code

以普通用户身份运行 afio 时,所有文件路径都将存储,而没有前导 /。 这意味着当您解包归档文件时,它将在当前目录中解包。 这样做是为了避免意外覆盖系统文件。 要保留前导 /,请使用命令行选项 -x。 以超级用户身份运行 afio 会反转此行为 - 任何前导 / 都将保留,你需要使用命令行选项 -X 才能获得剥离前导 / 的通常行为。

如果空间有限,afio 也可以像 tar 一样使用 -Z 命令行选项来压缩你的归档文件。 但是,这里有一个非常大的区别。 当你压缩 tar 归档文件时,整个归档文件会被压缩。 这意味着如果文件的某个部分损坏,你可能会丢失归档文件中的所有文件。 当您压缩 afio 归档文件时,归档文件实际上是单独压缩的。 因此,如果一个文件由于任何原因损坏,你都不会丢失归档文件中的任何其他文件。

压缩归档文件时,afio 默认使用 gzip。 您可以使用 -G num 命令行选项告诉 gzip 使用哪个压缩因子,其中 num 是 gzip 将应用于归档文件的压缩量。 这是一个介于 0(不压缩)和 9(最大压缩)之间的数字,默认为 6。

你可能需要平衡压缩阶段使用的 CPU 时间和 IO 时间。 如果是这样,你可以限制何时使用压缩。 命令行选项 -T threshold 告诉 afio 不要尝试压缩文件,除非它至少有 threshold 字节大小。 默认设置为 -T 0k,因此 afio 尝试压缩所有文件,无论文件有多小。 另一方面,你可能希望限制 afio 在尝试压缩文件之前可以有多大。 您可以使用命令行选项 -2 max 来做到这一点,其中 max 是最大文件大小。 在这种情况下,默认为 -2 200m,因此 afio 不会尝试压缩大于 200MB 的文件。

如果你不想使用 gzip 作为你的压缩方法怎么办? 您可以使用命令行选项 -P progname 来更改它,其中 progname 是用于执行压缩的可执行文件的名称。

如果你需要将选项传递给这个备用程序,请使用 -Q opt 选项。 你需要为想要传递给备用程序的每个选项使用单独的 -Q 选项。 因为 afio 只是执行这个备用程序,所以你可以在这个阶段运行任何东西,比如加密程序,允许你加密你的归档文件。 要使用 PGP 加密你的归档文件,请执行

export PGPPASSFD=3
find . -name *.c -print | afio -ovz -Z -U -P 
 ↪pgp -Q -fc -Q +verbose=0 -3 3 archive 3

This runs PGP on all files in the archive as they are added.

The last afio trick is having the ability to interact with archives on external systems in a similar manner as you would with tar. The format looks like this:

[user@]host[%rsh][=afio]:file

The option user@ is the user name you would use to access the external system. The default communications mechanism is rsh, but you can change that to ssh with the option %ssh. You can define the command to use on the external system with the option =afio. You can use this if the executable is named something else or in an odd location. So, if you want to archive all your source code files onto an external server over ssh, you could execute:

find . -name *.c -print | afio -o -Z user@server%ssh:archive

Using afio, go forth and ensure that you have proper backups of all of your important information.

加载 Disqus 评论