Command-Line

壓縮和解壓縮 dd 圖像 - zstd 而不是 gzip

  • September 10, 2019

早些時候我使用 fsarchiver 創建壓縮分區映像。由於一些奇怪的行為,我選擇將其替換為dd.

但是,我喜歡 fsarchiver 如何使用 zstd 進行壓縮

於是,我研究了,

這些本質上說的是,我必須使用以下命令進行備份

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 -c替換zstd&zstd -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

嘗試這些命令是否安全,還是我做錯了什麼?

像這樣使用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
  1. With dd,前綴ddwithsudo或 usesudo -s來獲得一個 root shell:
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
  1. pv而不是dd. 使用sudo pvsudo -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 時的語法

引用自:https://unix.stackexchange.com/questions/492773