我看过各种帖子讨论使用 dd 创建驱动器映像并仅存储“使用过的数据”。在提出问题/问题之前,让我们假设一些事情。
假设
- 克隆/映像的驱动器是 /dev/sda
- /dev/sda 是 10TB
- /dev/sda 上的已用空间为 1TB
- 映像存储到某个远程 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 的具体问题。
谢谢。
您可以将ddrescue与它的
-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
写入 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.4
cp --sparse=always local_file /mnt/cifs/file_on_cifs
不会写入稀疏文件。读取 CIFS 文件时,它会读取归零区域(无fiemap优化)。在 RHEL6 中,备份和恢复都将通过网络传输整个文件;更好的gzip它。在 Ubuntu 14x 上与 coreutils-8.25 的情况相同。
写入 Windows CIFS 共享 SMB2/SMB3
有一个2014 补丁“向 SMB2/SMB3 挂载添加稀疏文件支持”,因此希望在 Windows 8.1 和其他平台的挂载共享上支持稀疏文件。
写入 Linux CIFS 共享
当您从某个 Linux 服务器在 Linux 客户端上挂载 Samba 共享时,您甚至可以在 SMB1 上写入稀疏文件。没有阅读优化。