我怎样才能直接存档 dd 的输出而不使用任何压缩?

我怎样才能直接存档 dd 的输出而不使用任何压缩?

已经确定这个问题无法tar从 读取输入stdin

如果不进行任何压缩,如何才能dd直接存档输出?将所有操作都放在一个任务中的目的是避免将输出写入dd目标磁盘两次(一次作为原始文件,一次作为存档),并避免执行两个不同的任务,这很浪费时间(因为必须读取和写入输入文件,然后再次读取、处理和写入输出),如果目标驱动器几乎已满,则不可能执行这两个任务。

我计划对驱动器、分区和文件夹进行多次备份,并且希望能够轻松地将所有内容存储到单个文件中,并加快每次备份/潜在恢复任务的速度。

答案1

如果你想将整个块设备转储到一个文件,tar这将毫无用处,因为它不适用于块设备。相反,你需要使用dd或类似的东西:

dd if=/dev/sdX of=/path/to/backup bs=16m

即使这样,最好至少使用一点压缩,只要它不会减慢传输速度太多。简而言之,您需要一种吞吐量不低于最慢存储介质的压缩算法。有几种这样的压缩算法。最臭名昭著的是伦佩尔–齐夫–奥伯胡默,其导数L4Z, 和Snappy。对各种压缩算法进行了比较,包括上述三种算法L4Z 项目页面

Name            Ratio  C.speed D.speed
                        MB/s    MB/s
LZ4 (r101)      2.084    422    1820
LZO 2.06        2.106    414     600
QuickLZ 1.5.1b6 2.237    373     420
Snappy 1.1.0    2.091    323    1070
LZF             2.077    270     570
zlib 1.2.8 -1   2.730     65     280
LZ4 HC (r101)   2.720     25    2080
zlib 1.2.8 -6   3.099     21     300

为了回答这个问题,我将选择一个 LZO 示例,因为它在 Canonical 的存储库中以以下形式随时可用:伊佐普但最终所有这些流压缩器都有从标准输入读取并写入标准输出的前端。

dd if=/dev/sdX bs=16m | lzop > /path/to/backup.lzo

如果您想在备份期间在同一台机器上工作,您可能需要使用ioniceand/或nice/ schedtool

ionice -c 3 dd if=/dev/sdX bs=16m | ionice -c 3 schedtool -B -n 10 -e lzop > /path/to/backup.lzo

相关内容