技术 2021.04.19 68 阅读

为什么我的服务器都有8GB的空文件

本文作者受播客分享的Overcast服务器故障启发,回顾了自己去年遭遇的类似Linux服务器磁盘占满危机

· · ·

昨晚,我在听最新一期《雷达之下》(Under the Radar),Marco Arment在其节目中深入讨论了有关他最近的Overcast服务器问题的详细信息。讨论的很棒,大家都该去听一下。Marco最近的服务器问题与我去年的服务器问题非常相似,。我觉得我应该把我的结局方案,分享给遇到同样问题的人。

 

问题是什么

 

我与两位主持人Marco Arment、David Smith一样都在Linode上运行自己的服务。当它们在讨论数据库迁移中的痛苦,我深有同感。基本问题是这样的:

你会不想Linux服务器或者一台Mac电脑上遇到磁盘已满的问题,当磁盘已满时,一切都变得很糟糕。

 

Marco说的一件事格外的打动我:

 

 作为独立服务器管理员,真的非常无助。

 

去年我服务器出问题的绝大部分时间里,我时刻感到无比的孤独和沮丧(这句话我下意识的反应是疫情停工导致的。。。)。没人帮我,还没法放弃解决问题。我的服务器一度停摆了一段时间。我的问题基本与之相似:我的数据库服务满了(但是是因为不同的原因)。就像Marco说的,当磁盘满了的时候不会有好事发生。

 

在发生后的一段时间内我修复了我服务器的问题,我想确保即使我的磁盘再次被占满,我也能毫不费力的解决。

 

一个廉价的解决方法?是的。真的有效的?当然可以

 

 

在Linux服务器上,如果磁盘已满,处理任何操作都很困难。复制和删除命令都可能会因为内存尝试交换到满载的磁盘而失败,你很难在短时间内释放大块磁盘空间。但是如果有一种方法可以在你最需要的时候释放大块存储空间呢?输入dd命令(除了dd你还有许多工具可用于执行此操作。只不过我喜欢这个)。

 

截至去年,我所有的服务器都有一个8GB的spacer.img文件,它除了占用空间别无他用。这样在发生磁盘占满危机的时候我可以简单的将其删除并给自己调试和解决问题预留足够的时间。8GB是很大的空间了,不像现在这点占用对于磁盘来说已经足够便宜,除非我真的需要这点空间,否则完全可以忽略掉了。。。时过境迁,这都不是问题了。

 

好了,这就是为什么我一直都放一个没有用的文件在磁盘上的原因了:因为总有一天我会用到它。这个解决方法炒鸡简单,易于实现且易于使用。显然真正的解决方案是不要用满数据库服务器,但是就像Marco迁移遇到的麻烦,有些时候一些简单的错误和设计缺陷会导致占满硬盘。如果真有一天发生时,你最好早就有所准备,不然你将会伴随磁盘满盘度过糟糕的一天。

 

译著:

首先,这篇文章感觉要比之前看到的都难一点在于它更口语化,用词很随意。不像是其他科普类文章尽可能用简单的句式和标准的单词来阐述。其次这个问题我想大多数人可能都会碰到,看完本篇让我想到了另外一个解决方法。原理借鉴zip炸弹,生成一个全是0的文本文件,在文件压缩的时候会丢弃大量重复数据从而达到惊人的压缩比。在不用的时候就存放一个一定大小的文本文件,使用时压缩并-m删除源文件释放空间。当满盘问题解决后再把文件解压出来。