![减小文件大小](https://linux22.com/image/125134/%E5%87%8F%E5%B0%8F%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F.png)
我有两个文件,每个文件的/var/log
分区大小都超过 3GB,我需要释放一些空间而不删除或移动文件,因为这会中断我的系统。
我也无法删除带有vi + dd
.有数千行。
有什么有用的想法吗?
文件:
1-messages
2- 我的网络服务器日志文件。
答案1
您也许能够截断文件,与使用不同的是,rm
即使文件仍然打开,这也会释放磁盘空间:
> /var/log/big1.log
> /var/log/big2.log
但请先在单独的系统上进行测试。检查文件的索引节点号是否发生变化。如果没有,你很好。
答案2
如果您想保留现有文件的全部内容,则需要将它们压缩到其他地方的临时空间,然后用其压缩的等效文件替换每个未压缩的文件。否则,只需删除较旧的日志文件或将其存档到其他地方。
这里有一个压缩日志文件而不丢失其内容的建议。但是,您需要注意,如果您继续增加日志文件,它只会推迟文件系统填满的问题,而不会永久解决它。
识别要压缩的旧文件。 (这些都不能在使用或打开现在用于记录。)在我的示例中,这是big1.log
.
确定可以容纳最大的未压缩文件的文件系统块。在我的示例中,我将假设这是/home
.
在现实场景中,您可以使用循环for
来迭代一系列文件。以下是单个文件的步骤:
logfile='/var/log/big1.log' # The logfile to be compressed
if gzip -c "$logfile" >/home/log.gz
then
touch --reference "$logfile" /home/log.gz # Capture timestamp of last update
chown --reference "$logfile" /home/log.gz # Capture ownerships
chmod --reference "$logfile" /home/log.gz # Capture permissions
rm -f "$logfile" # Make space
mv -f /home/log.gz "$logfile.gz" # Rename with correct suffix
fi