使用 dd 和 gzip 备份和恢复

使用 dd 和 gzip 备份和恢复

我看过很多帖子讨论如何使用 dd 创建驱动器映像并仅存储“使用过的数据”。在提出问题/疑问之前,让我们先假设几件事。

假设

  1. 要克隆/映像的驱动器是 /dev/sda
  2. /dev/sda 是 10TB
  3. /dev/sda 上的已用空间为 1TB
  4. 图像存储到某个远程 CIFS 安装位置

疑问/问题

使用类似于cp--sparse=always选项结合的命令dd应该会生成一个稀疏文件,使得该文件显示为 1GB:

cp --sparse=always <(dd if=/dev/sda bs=8M) /mnt/remote/location/disk.img

或者像下面这样,应该压缩所有零空间:

dd if=/dev/sda1 | gzip -c > /mnt/remote/location/disk.img.gz

所以,稀疏映像文件对恢复有何影响?传输的数据是 1GB 还是 10GB(包括感知到的空白/归零空间)?这显然是评估潜在网络负载和恢复时间的考虑。

PS,我知道还有其他选项,例如 Clonezilla 和 ddrescue 之类的程序将允许恢复功能,但问题具体是关于在上述上下文中使用 dd。

谢谢。

答案1

写入 Windows CIFS 共享 SMB1

微软的话是:“在 Windows NTFS 文件系统中,默认情况下文件不是稀疏的。应用程序或用户需要通过 FSCTL_SET_SPARSE 控制代码明确将文件标记为稀疏。”不幸的是,Linux 不会通过 SMB1 标记这些文件。据说如果您首先在 Windows 端(使用 Cygwin )将文件设为稀疏文件dd if=/dev/zero of=BigFile bs=1M count=1 seek=150000,则可以继续从 Linux 将其写入为稀疏文件。我相信读取将未经优化。

实验

使用 RHEL6 coreutils-8.4cp --sparse=always local_file /mnt/cifs/file_on_cifs不会写入稀疏文件。读取 CIFS 文件时,它会读取零区域(无菲埃马普优化)。在 RHEL6 中,备份和恢复都将通过网络传输整个文件;最好对其进行 gzip 压缩。

Ubuntu 14x 上的 coreutils-8.25 情况相同。

写入 Windows CIFS 共享 SMB2/SMB3

有一个2014 补丁“为 SMB2/SMB3 挂载添加稀疏文件支持”,因此希望 Windows 8.1 和其他平台的挂载共享能够支持稀疏文件。

写入 Linux CIFS 共享

当您在 Linux 客户端上安装来自某个 Linux 服务器的 Samba 共享时,即使在 SMB1 上,您也可以写入稀疏文件。没有读取优化。

答案2

您可以使用救援-S选项为:

-S --sparse Use sparse writes for outfile. (The blocks of zeros are not actually allocated on disc). May save a lot of disc space in some cases. Not all systems support this. Only regular files can be sparse.

您可以发出类似ddrescue /dev/sda1 /path/to/outfile

相关内容