有一些老家伙们我可能未来好长一段时间都不会再使用了,但是它们真的很大,我就想着使用一种极限压缩方式将它们压成最小以方便存储
注意事项
版权与声明
本文部分技术核心取自以下文章,感谢这些文章的作者
如果可能,请尽量阅读上方的原文章来学习
下文注释
下文会有一些代码块,左上角写着#
的为需要超级用户身份执行的权限;左上角写着$
的只需要普通用户既可执行
以下代码只使用#
和$
来表示权限等级,不再明文写sudo
安全问题
无损压缩越是极限的压缩,冗余也就越少,也就是说,一旦压缩文件出现问题,恢复起来难度极其之大,这里使用的极限压缩方式,如果压缩文件出现哪怕一个字节的差错,都可能导致整个压缩文件完全不可用
所以建议您
- 为保证压缩成功,请在压缩完成后先测试一遍压缩文件再将原文件删除,以免您的文件不可恢复
- 为避免一个地方的存储(例如磁盘、网盘)出现错误,例如传输文件传错了一个字节,请在多个位置备份您的重要数据
效率和资源使用问题
这里使用的压缩方式压缩率是真的高,同时效率也是真的低,占用也是真的高
Reddit 原文中有写到压缩可能甚至会使用 21GB 的内存
建议不要在提供服务的主机上使用,除非你有大量的计算资源可以浪费
一、配置介绍
- 压缩算法(method):使用 LZMA2 —— 这是 7z 支持的压缩算法中压缩率最高的压缩算法
- 9 Ultra —— 这是 7z 命令的压缩等级,从 0-9,其中 0 是不压缩,1 是最高效率,9 是最高压缩
- 字典(dictionary)大小:使用 1536Mib —— 字典大小决定了压缩过程中记忆的数据量,方便更高压缩率的压缩。字典越大,压缩率也越大,消耗的计算资源也越多
- 字词(word)大小:使用 273 —— 字词大小是 LZMA 算法的一个参数,影响字节匹配的粒度。更大的字词大小的压缩率也更大,消耗的计算资源也更多
- 块(block)大小:使用 solid(单个块)—— 让压缩不进行分块处理。这样可以最大化压缩率,特别是重复数据多的情况下。因为只使用一个块,所以解压缩时需要加载整个块的数据,会降低解压效率并增加内存需求,且只能同时使用单线程操作。
二、执行命令
按照上面的配置,执行命令应该如下
$ bash
|
|
其中
<compressed-file>.7z
是压缩后的文件,请替换成您的输出文件名-m0=lzma2
是指定压缩算法为 LZMA2,这是默认值,所以可以省略-mx=9
是上面所说的“9 - Ultra”-md=1536m
是上面所说的字典大小-mfb=273
是上面所说的字词大小-ms=on
是上面所说的单个块<file1>
、[file2]
、[file3]
、...
是需要压缩的文件,请替换成您想要压缩的文件和目录
解压的参数工具会自动读取,所以不需要手动指定