于数据压缩以及存储范畴之内,Linux系统管理员跟开发人员时常会遭遇多种算法。LZO是当中一种凭借速度闻名的无损数据压缩库,其于Linux生态里拥有独特的应用场景状况。本文会深入探究LZO的核心特点之处、工作原理情形、适用场景方面,并与常见方案相互对比,给出具体的实践指导内容,用以协助你判定何时应当运用它,何时应该挑选其他工具 。
LZO压缩算法的工作原理是什么
LZO算法的核心设计理念是致力于达成极致的解压速率,与此同时维持可接纳的压缩比率。它运用基于字典的LZ77改良算法,其工作进程能够归纳为:在压缩时期,该算法会对输入数据予以扫描,去寻觅反复出现的字节序列(也就是“短语”)linux 内核,并借助较短的引用(距离与长度对)将它们替换掉。这些引用指向先前出现过的相同数据。
LZO运用的哈希表匹配机制极为高效,这使得它的压缩进度近乎实时,不过它为了达成高速压缩,而舍弃了一定压缩率。其解压历经十分简便,仅仅需依照次序读取引用,接着把数据复制至输出缓冲区,基本无需繁杂的计算。正是这种压缩快,解压极为快速的不对称特性,成为LZO在对实时性有着较高要求的环境里无可替代的缘由。
LZO在Linux内核中有哪些具体应用
在Linux内核里,LZO最为人所熟知的应用,乃是充当内核初始化ramdisk的压缩选项,在系统启动的起初阶段,initramfs或者initrd得被加载至内存当中,运用LZO去压缩这些镜像,能够明显削减从存储设备读出的数据量,并且鉴于解压速度特别快,基本上不会增添启动时间的开销,这给嵌入式设备或者需要快速启动的系统带来了实际的益处。 。

此外一个关键应用存在于像Btrfs以及ZFS这类现代文件系统里,LZO被列为可供选择的透明压缩算法,当用户针对特定目录或者文件开启压缩时,能够选择LZO,在写入数据之际,文件系统会试着运用LZO压缩数据块,要是压缩率不尽如人意便存储原数据,读取之时,压缩块会被快速解压,这种应用格外适用日志文件、虚拟机磁盘镜像等兼具冗余且能够容忍稍低压缩率的数据类型 。
LZO与其他压缩算法如Gzip、LZ4对比有何优劣
相较于经典的 Gzip,LZO 在速度、压缩率方面处于两个截然不同的极端,Gzip 基于 DEFLATE 算法,通常能够给出高得多的压缩率,然而其代价是压缩速度以及解压速度均慢得多,格外消耗 CPU 资源,LZO 的解压速度没准是 Gzip 的数十倍,可是压缩之后的文件体积常常比 Gzip 大 20%至 50%,所以,针对需要频繁读取的“热数据”,LZO 是更为合适的选择,对于长期归档的“冷数据”,Gzip 或者 XZ 更为适当。

与后起的优秀者LZ4相较,二者定位特别相近,都着重突出极速linux lzo,LZN常常被视作在压缩率跟速度之间达成了更佳的平衡,它的解压速度跟LZO相等甚至还要更快一些linux lzo,可是压缩率常常略微超越LZO,在好多新的开源项目里面,LZ4有着渐渐取代LZO的趋向,然而,LZO因为其长久的历史以及在内核里的深度整合,在遗留系统及特定场景下面依旧稳固 。
如何在Ubuntu或CentOS上安装和使用LZO工具库
于基于Debian/Ubuntu的系统当中,安装LZO开发库及实用工具极为简便。你能够借由执行sudo apt-get install liblzo2-dev lzop此一命令予以达成。当中liblzo2-dev乃开发头文件与库,lzop则是面向流的压缩命令行工具。在完成安装之后,你能够运用 lzop 这个命令去进行文件的压缩或者解压操作,举例来说,lzop -v file.txt 这样的指令会产生 file.txt.lzo 这个文件。
红帽、CentOS、Fedora这一系列当中,能够借助yum或者dnf来开展安装 :‘把sudo yum install lzo lzo -- devel输入进去进行操作’。除了lzop之外,这些发行版本也许还会为用户供给别的工具出来。务必要留意,LZO库自身也就是liblzo仅仅是提供进行块的功能,然而 lzop工具基于liblzo 在其基础上增添了文件头以及校验和这些内容,从而使得它能够如同gzip相同方便地去处理单独的文件 。压缩之际,运用 -1 至 -9 的级别,去调节速度跟压缩率之间的平衡 。

使用LZO压缩文件的命令行实践示例
就最基础的文件压缩命令而言,是 lzop filename 这套家伙,它会于当前目录那儿生成一个后缀为 .lzo 的压缩文件,并且还会保留原始文件。要是你打算删除原有文件,类似与运用 gzip 那种做法,能够加上 -U 参数,参数形式为:lzop -U filename。需递归压缩某一个目录之内的全部文本文件,能够结合查找命令:按路径查找指定目录,找出名称为“*.log”的文件,对找到的文件执行lzop压缩操作红旗linux,如此这般能够切实有效地节省日志文件所占用的磁盘空间容量 。
同样地,进行解压操作时其直观程度也是相同的,借助 lzop -d filename.lzo 或者 lzop -dc filename.lzo(其中 -c 具体所指的是输出至标准输出)这样的方式就行。存在着一个具备实用性的技巧,它是与tar相互配合从而达成流式压缩归档的,即 tar -cf - directory/ | lzop > archive.tar.lzo。当实施解压操作时,具体做法为 lzop -dc archive.tar.lzo | tar -xf -。在需要快速打包传输大量小文件的情形下,这种组合是极为高效的,它的速度远远超过了传统的tar czf。
LZO适用于哪些实际场景不适合哪些场景

LZO在对读取也就是解压性能极为敏感的那种场景里是相当适配的,举例来说,像实时数据处理管道这种情况,就好比Kafka或者Flume当中的中间数据缓冲,运用LZO进行压缩的话能够在网络传输以及磁盘I/O方面收获明显的效益,并且解压所产生的开销几乎是能够被忽略掉的,又比如说,手机游戏资源包的压缩,能够削减下载的体积以及存储的占用情况,与此同时还能保证游戏加载速度不会受到影响,网络设备像路由器的固件也经常会用到LZO,以此来达成快速启动。
然而,LZO并非适用于所有情形。对于那些有着最高压缩率需求的长期归档数据而言,像历史日志备份到磁带或冷存储这类情况,应当选用Zstandard的高压缩比模式、XZ或者7z。另外,LZO作为无损压缩算法,针对已经处于高度加密或者随机化状态的数据,比如已加密的文件、JPEG图片,其压缩效果极为糟糕,甚至有可能致使文件体积变大。在这样的状况下,不应开启压缩,或者应当在加密之前实施压缩。
于实际项目里头,你是更偏向去选像LZO这般速度优先型的压缩算法,还是Gzip/XZ这些压缩率优先的算法?你的决策主要是基于哪些性能方面的指标所在或者业务方面的约束?欢迎在评论区域去分享你的经验以及见解,要是觉着本文是有帮助的,请点赞予以支持并且分享给更多的同行。
