我通过实时 USB 备份了服务器的操作系统磁盘。使用以下命令:
dd if=/dev/sda bs=512 count=(30 gb worth of sectors) conv=noerror,sync status=progress | gzip -c > /path/to/removable/media
命令完成且没有错误,图像已创建。img.gz 大小为 16 GB
(服务器的操作系统占用了约 15GB 的存储空间)但是当我在 winrar 中打开 .gz 时,它告诉我内容只有 2.21GB,而档案却是 16GB。
这是否意味着备份过程中出现错误,或者档案大于其中的图像是正常的?
谢谢
答案1
备份
首先,关于备份的一般建议是:在测试并验证恢复过程有效之前,您不能依赖备份。有几种测试备份的方法:
- 如果您手边有硬件并且它是关键备份,则可以完全恢复到物理硬件。
- 如果缺少备用硬件,可以完全恢复到虚拟机。
- 如果您不关心恢复可启动的操作系统,则提取数据并验证正确性和完整性。
我通常不会认为使用 WinZip 检查未压缩的大小特别有用。但是,您获得的结果可以表明您提供了不正确的信息count
,这将导致……
dd
你的命令有问题
count=(30 gb worth of sectors)
count
看到这个,我的第一个想法是,备份驱动器时永远不应该指定。如果要备份特定分区,则应使用分区块设备(/dev/sdXN
其中N
是数字)。否则,您应该让dd
整个驱动器都使用;通过指定count
,您可能会(实际上几乎可以保证)丢弃数据并可能损坏文件系统。
在评论中,您提供了理由:
该驱动器为 500gb,我将最后一个备用硬盘给了朋友,因此我没有地方转储可以容纳 500gb 映像的文件。由于操作系统只有约 15 gb 的空间,因此为了安全起见,我指定了一个等于 30gb 扇区的数量
不幸的是,文件系统的工作方式并非如此。大多数文件系统不能保证所有数据都存储在驱动器的开头。
备择方案
还有其他几种方法可以实现您想要的效果。
仅存档文件/数据
如果您只想备份数据,而不太在意能否恢复可启动的操作系统,则可以使用命令备份文件tar
。这意味着您仍将拥有数据,但您必须从头开始重新安装操作系统并手动恢复数据(以及任何已安装的应用程序)。
- 复制文件
tar
通过管道传输到档案gzip
。
压缩备份,剩余空间归零
这或多或少是你已经尝试过的。你的想法是正确的gzip
:希望它能压缩任何未使用的空间(非常count
可压缩)变为无。您只需从命令中删除即可。
不幸的是,这不一定能奏效,因为已删除的文件可能仍然存在于磁盘上,并且不会显示为空gzip
。因此,你应该清除未使用的空间首先。您的备份过程将变成:
zerofree
用或类似方法清除未使用的空间- 将驱动器复制到压缩映像,并使用
dd
(不使用count
!)管道传输gzip
使用仅备份使用过的块的工具,例如partclone
有一些工具,例如partclone
,它们足够智能,可以识别并仅备份使用过的块。Arch wiki 上有一些例子使用gzip
,以及手动的下面有一些示例。这可以有效地替换dd
您的管道。
恢复数据时您将需要再次使用相同的工具。