最省事的Linux备份方法是用tar -czf直接打包压缩,无需管道或中间文件;-z调用gzip流式压缩,-f指定输出,-c创建归档,三者缺一不可。 用 tar 一次性打包并 gzip 压缩最省事 说到Linux备份,其实有个既快又省空间的“一招鲜”:直接用tar命令的-z参数。它背后调用的是系统的
tar 一次性打包并 gzip 压缩最省事说到Linux备份,其实有个既快又省空间的“一招鲜”:直接用tar命令的-z参数。它背后调用的是系统的gzip库进行流式压缩,内存占用低,而且整个过程一气呵成,避免了先打包再压缩产生的额外I/O开销。相比之下,那种tar -cf backup.tar /data | gzip > backup.tar.gz的写法,不仅效率低,还可能因为管道缓冲问题导致文件遗漏或进程卡住。
正确的写法,一条命令就搞定:
长期稳定更新的攒劲资源: >>>点此立即查看<<<
tar -czf backup-$(date +%Y%m%d).tar.gz /var/www /etc/nginx
-c创建归档,-z启用gzip压缩,-f指定输出文件名,缺一不可。/开头(比如用/var/www而非//var/www),以免触发tar关于绝对路径的警告。tar很可能只识别第一个单词。gzip的压缩级别(1-9)是个典型的权衡游戏。默认的-6级别在时间和压缩率之间取得了不错的平衡。但很多人喜欢盲目追求-9最高压缩,结果往往是备份时间延长两三倍,换来的体积减少却只有5%到10%,性价比极低。尤其对于已经是压缩格式的.jpg或.zip文件,这么做几乎纯属浪费CPU。
那么,如何精准控制压缩级别呢?可以直接通过tar的--gzip参数传递:
tar -cf backup.tar.gz --use-compress-program="gzip -1" /data
-1:速度最快,适合处理大文件或担心定时任务超时的场景。-6:默认值,日常备份的首选,平衡性最佳。-9:仅对纯文本、SQL导出文件、未压缩的日志等有明显效果。GZIP=-9 tar -zcf ...这种形式,一些旧版本的tar可能不识别这个环境变量。--remove-files 会导致磁盘悄悄爆满这里有个常见的误解:以为tar -zcf archive.tar.gz /data是“移动”备份。实际上,它只是“复制”。如果备份脚本运行后没有清理原目录,或者忘了加入删除逻辑,那么重复运行几次,原始数据和压缩包就会同时在磁盘上堆积,导致存储空间无声无息地被占满。
更安全的做法是分两步走:先确认压缩成功,再删除源文件。这样可以避免压缩过程意外中断导致数据丢失的悲剧。
if tar -czf backup.tar.gz /data && [ -s backup.tar.gz ]; then rm -rf /data fi
[ -s backup.tar.gz ]很关键,它确保生成的压缩包非空,防止因权限等问题导致tar命令失败(但返回了成功码)却误删数据。tar --remove-files选项。因为如果在压缩中途失败,它可能会删掉一部分已经处理过的源文件,造成数据残缺。rsync --dry-run模拟,或者创建一个标记文件,留出一个供人工核对的窗口期。gzip: stdout: No space left on device 别急着清日志看到这个报错,第一反应往往是“备份目标盘满了”?但真相可能没那么简单。一个高频原因是:tar命令默认使用/tmp目录作为临时缓冲区,即使你指定输出到/backup分区,它内部仍可能依赖/tmp。而在一些容器或精简版系统中,/tmp分区可能只有几十MB,很容易被撑爆。
所以,排查时得同时检查两个地方:df -h /tmp 和 df -h /backup。解决方法通常是改变缓存目录的位置:
TAR_TMPDIR=/backup/.tmp tar -czf backup.tar.gz /data
mkdir -p /backup/.tmp。export TMPDIR=...设置全局变量,这可能会干扰到其他正在运行的进程。/backup分区本身空间也紧张,那就得考虑使用--tape-length进行分卷压缩了,不过这会带来解压时的额外复杂度,需要配套的脚本逻辑。说到底,备份压缩真正的挑战,往往不在于命令语法本身,而在于理清数据流向、预判空间瓶颈,以及确保在任何环节失败时,都知道哪些数据安全、哪些可能已经受损。把这些搞明白,才算真正掌握了这门手艺。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述