这可能听起来像是一个愚蠢的问题,但我尝试的方法却不起作用。
我使用的是 livecd,驱动器已卸载,等等。
当我以这种方式备份时
sudo dd if=/dev/sda2 of=/media/disk/sda2-backup-10august09.ext3 bs=64k
...通常情况下,它可以工作,但我没有足够的外部硬盘空间来复制(它几乎放不进去)。所以我想用这种方式压缩
sudo dd if=/dev/sda2 | gzip > /media/disk/sda2-backup-10august09.gz
...但我的权限被拒绝了。我不明白。
答案1
您有权访问 sda2-backup...gz 文件吗?Sudo 仅适用于其后的命令,不适用于重定向。如果您希望它适用于重定向,请以 root 身份运行 shell,以便所有子进程也都是 root:
sudo bash -c "dd if=/dev/sda2 | gzip > /media/disk/sda2-backup-10august09.gz"
或者,您可以使用 uid / gid 安装选项(假设为 ext3)安装磁盘,这样无论你是什么用户,你都有写入权限。或者,使用 root 在 /media/disk 中创建一个你有权限的文件夹。
其他可能对您有帮助的信息:
- 块大小在大多数情况下只对速度有影响。默认值为 512 字节,您要将其保留用于 MBR 和软盘。较大的大小在某种程度上应该可以加快操作速度,可以将其视为缓冲区。以下是链接有人对不同块大小进行了速度基准测试。但你应该自己进行测试,因为性能受多种因素影响。还可以看看 andreas 的另一个回答
- 如果你想通过网络使用 ssh 和 netcat 来实现这一点,那么空间可能就不是什么大问题了,请参阅这个 serverfault 问题。
- 您是否真的需要分区的映像,可能有更好的备份策略?
- dd 是非常危险的命令,用
of
它代替if
,最终会覆盖您尝试备份的内容!!o
注意到和键i
是相邻的吗?所以非常非常非常小心。
答案2
在第一种情况下,dd
以 root 身份运行。在第二种情况下,dd
以 root 身份运行,但gzip
以您的身份运行。
更改 的权限/media/disk
,为自己提供 root shell,或者gzip
也以 root 身份运行 。
答案3
此外,你可以用以下方法替换 gzip,bzip2 --best
以获得更好的压缩效果:
sudo dd if=/dev/sda2 | bzip2 --best > /media/disk/$(date +%Y%m%d_%H%M%S)_sda2-backup.bz2
答案4
这是我的做法:
dd if=/dev/nvme0n1p3 | xz -z9eT16 > nvme0n1p3.img.xz
以上假设源分区为,nvme0n1p3
并且系统有 16 个硬件线程(如 8C/16T 处理器);请根据需要替换这些值。请注意,xz -z9e
每个线程需要大约 1 GB 的内存,因此您可能希望使用较少的线程。
要进一步缩小生成的映像,您可以缩小底层文件系统(例如resize2fs -M /dev/nvme0n1p3
),然后dd
仅缩小文件系统的实际长度(例如bs=1G count=20
20 GiB)。如果这样做,请确保在备份或恢复映像后将其调整回原大小。如果源驱动器是 SSD,则fstrim
在获取映像之前临时安装它以运行应该会将文件系统的未使用区域填零,这也使其更容易压缩。
缩小文件系统还允许您对其进行解压缩以进行循环挂载,而无需那么大的驱动器,因此您可以访问映像中的文件并测试备份的有效性,而无需恢复它。