zstd 是由 Facebook 開發的一個壓縮演算法,由於壓縮率、花費時間介於 gzip 與 bzip2 之間,且支援多執行緒,近期很紅。
稍早看了 zstd 的 manual,有個 -r
參數的說明:
-r: operate recursively on directories
想說支援巢狀檔案結構,解壓縮會輕鬆一些,就直接使用 -r
來備份整個目錄:
tree -a www www ├── docker-compose.yaml └── .env zstd -T4 -r www/ -o web-backup.zst
結果在解壓縮時發現問題,解壓縮以後不會還原資料結構,只會變成一個包含所有檔案內容的檔案:
unzstd web-backup.zst web-backup.zst : 27 bytes ls web-backup
查了一下資料,發現 Github 上有 issue 卻被 closed,而 StackExchange 上的文章也說明無法還原目錄結構。
如果你用了 zstd -r
的話,請注意資料可能無法復原,還是使用 tar
比較保險。
tar
使用 -z
時,會使用 gzip 壓縮檔案內容,指令大概長這樣:
tar zcvf web-backup.tgz www/
若要使用 bzip2 時,參數則為 -j
:
tar jcvf web-backup.tbz www/
若想要使用 zstd,可以透過 tar -I
的參數來指定要使用的壓縮工具:
- 使用
pigz
來壓縮:tar -I pigz -cvf web-backup.tgz www/
- 使用
lbzip2
來壓縮:tar -I lbzip2 -cvf web-backup.tbz www/
- 使用
zstd
則是:tar -I zstd -cvf web-backup.tbz www/
zstd
預設只會使用 1 個執行緒來壓縮,若要支援多個執行緒記得加上 -T
參數:
tar -I 'zstd -T4' -cvf web-backup.tbz www/