我正在运行 Debian,即:
# uname -A
Linux martlins2 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
一段时间以来,我看到一些错误,表明某些包的某些部分在执行. 特别是,问题的原因在于:apt update
dpkg
# apt update
(...)
# apt upgrade
(...)
dpkg-deb: error: archive '/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb' uses unknown compression for member 'control.tar.zst', giving up
Traceback (most recent call last):
File "/usr/share/apt-listchanges/DebianFiles.py", line 124, in readdeb
output = subprocess.check_output(command)
File "/usr/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: …
Run Code Online (Sandbox Code Playgroud) # btrfs filesystem defragment -r -v -czstd:15 /
ERROR: unknown compression type zstd:15
# btrfs filesystem defragment -r -v -czstd_15 /
ERROR: unknown compression type zstd_15
# btrfs filesystem defragment -r -v -czstd15 /
ERROR: unknown compression type zstd15
Run Code Online (Sandbox Code Playgroud)
在BTRFS手册没有给出关于如何选择一个压缩级别的线索:
-c[算法]
在碎片整理时压缩文件内容。可选参数选择压缩算法、zlib(默认)、lzo 或 zstd。目前无法选择不压缩。另见示例部分。
如何选择非默认 zstd 压缩级别来重新压缩现有的 btrfs 文件系统?
注意:btrfs filesystem defragment
在快照上可能会导致更大的磁盘空间消耗:
警告:使用 Linux 内核版本 < 3.9 或 ? 3.14-rc2 以及 Linux 稳定内核版本?3.10.31,?3.12.12 还是?3.13.4将分解 COW 数据的 ref-links(例如使用 cp --reflink 复制的文件、快照或去重数据)。根据断开的引用链接,这可能会导致空间使用量的显着增加 …
早些时候我使用 fsarchiver 创建压缩分区映像。由于一些奇怪的行为,我选择用dd
.
所以,我学习了,
这些基本上说的是,我必须使用以下命令进行备份
dd if=/dev/sda2 status=progress | gzip -c > /media/mint/Data/_Fsarchiver/MintV1.img.gz
Run Code Online (Sandbox Code Playgroud)
和以下命令来恢复
gunzip -c /media/mint/Data/_Fsarchiver/MintV1.img.gz | dd of=/dev/sda2 status=progress
Run Code Online (Sandbox Code Playgroud)
现在我想更换gzip -c
及gunzip -c
与zstd
&zstd -d
我想出的命令是
压缩
sudo dd if=/dev/sda2 status=progress | zstd -16vT6 > /media/mint/Data/_Fsarchiver/MintV1.zst
Run Code Online (Sandbox Code Playgroud)
解压
zstd -vdcfT6 /media/mint/Data/_Fsarchiver/MintV1.zst | dd of=/dev/sda2 status=progress
Run Code Online (Sandbox Code Playgroud)
尝试这些命令是否安全,还是我做错了什么?
我正在寻找具有任意大字典(和“块大小”)的压缩工具。让我通过例子来解释。
首先让我们创建 32MB 的随机数据,然后将其连接到自身以制作长度为 64MB 的两倍长度的文件。
head -c32M /dev/urandom > test32.bin
cat test32.bin test32.bin > test64.bin
Run Code Online (Sandbox Code Playgroud)
当然test32.bin
不可压缩,因为它是随机的,但前半部分和后半部分test64.bin
是一样的,所以应该可以压缩大约 50%。
首先让我们尝试一些标准工具。test64.bin 的大小正好是 67108864。
我们从中了解到 gzip 和 bzip2 永远不能压缩这个文件。然而,使用足够大的字典 xz 和 zstd 可以压缩文件,在这种情况下, zstd 做得最好。
但是,现在尝试:
head -c150M /dev/urandom > test150.bin
cat test150.bin test150.bin > test300.bin
Run Code Online (Sandbox Code Playgroud)
test300.bin 的大小正好是 314572800。让我们在最高设置下再次尝试最佳压缩算法。
在这种情况下,两个工具都不能压缩文件。
有没有一个工具可以有任意大的字典大小,所以它可以压缩像 test300.bin 这样的文件?
感谢评论和回答,结果证明 zstd 和 …
我在zstd
中找到/drivers/block/zram/zcomp.c
,但在 中找不到任何与 zstd 相关的内容/crypto
。那么 zstd for zram 是否真的在 Linux 4.15 中可用?