压缩和解压缩 dd 图像 - zstd 而不是 gzip

压缩和解压缩 dd 图像 - zstd 而不是 gzip

早些时候我使用 fsarchiver 创建压缩分区映像。由于一些奇怪的行为我选择将其替换为dd.

不过,我喜欢 fsarchiver 压缩的方式兹标准

所以,我研究了,

这些实质上是说,我必须使用以下命令来备份

dd if=/dev/sda2 status=progress | gzip -c > /media/mint/Data/_Fsarchiver/MintV1.img.gz

以及以下命令来恢复

gunzip -c /media/mint/Data/_Fsarchiver/MintV1.img.gz | dd of=/dev/sda2 status=progress

现在我想用gzip -c&替换&gunzip -czstdzstd -d

我想出的命令是

压缩

sudo dd if=/dev/sda2 status=progress | zstd -16vT6 > /media/mint/Data/_Fsarchiver/MintV1.zst

解压

zstd -vdcfT6 /media/mint/Data/_Fsarchiver/MintV1.zst | dd of=/dev/sda2 status=progress

尝试这些命令是否安全,或者我做错了什么?

答案1

像这样使用dd(没有任何选择)会让你的生活变得悲惨。只要把它完全剪掉就可以了。或者至少增加其块大小并告诉它不要反对短读取。

  1. 如果没有dd,首先运行sudo -s以获取 root shell:

     gzip </dev/sda2 >/media/mint/Data/_Fsarchiver/MintV1.img.gz
     gunzip </media/mint/Data/_Fsarchiver/MintV1.img.gz >/dev/sda2
    

    您的zstd命令看起来完全合理,但只需省略dd并直接以 root 身份读/写设备即可。 (我的版本不理解你的T6,所以我在这里省略了。)

     zstd -16v </dev/sda2 >/media/mint/Data/_Fsarchiver/MintV1.zst    
     zstdcat -v /media/mint/Data/_Fsarchiver/MintV1.zst >/dev/sda2
    
  2. 使用 时,可以使用withdd前缀或使用来获取 root shell:ddsudosudo -s

     dd bs=1M iflag=fullblock if=/dev/sda2 status=progress | gzip >/media/mint/Data/_Fsarchiver/MintV1.img.gz
     gzcat /media/mint/Data/_Fsarchiver/MintV1.img.gz | dd bs=1M iflag=fullblock of=/dev/sda2 status=progress
    
     dd bs=1M iflag=fullblock if=/dev/sda2 status=progress | zstd -16v >/media/mint/Data/_Fsarchiver/MintV1.img.zst
     zstdcat /media/mint/Data/_Fsarchiver/MintV1.img.zst | dd bs=1M iflag=fullblock of=/dev/sda2 status=progress
    
  3. pv代替dd.预先使用sudo -s以获得 root shell:

     pv /dev/sda2 | gzip >/media/mint/Data/_Fsarchiver/MintV1.img.gz
     gzcat /media/mint/Data/_Fsarchiver/MintV1.img.gz | pv >/dev/sda2
    
     pv /dev/sda2 | zstd -16 >/media/mint/Data/_Fsarchiver/MintV1.img.zst
     zstdzcat /media/mint/Data/_Fsarchiver/MintV1.img.zst | pv >/dev/sda2
    

    另请参阅组合 dd 和 pv 时的语法

与往常一样,要使用提升的权限进行读取,请更改command <sourcesudo cat source | command,要使用提升的权限进行写入,请更改command >targetcommand | sudo tee target >/dev/null

答案2

zstd支持与 相同的命令和管道功能gzip,因此如果命令集适用于gzip,它也适用zstd

作为一个小评论,请注意解压端的几个命令标志是多余的:zstd -dvc就足够了并且工作原理相同,因为-f-T6对于这种情况没有用(尽管幸运的是它们也不会造成伤害)。

相关内容