
某天,你像往常一样,想通过SSH登录你的阿里云服务器,却发现终端光标闪烁了半天,最后无情地吐出一行“No space left on device”。或者,你的网站突然变得奇慢无比,后台提示“无法写入临时文件”。你心里一沉,立刻敲下df -h
命令,然后看到了那行让你血压飙升的数据:
/dev/vda1 50G 50G 0G 100% /
磁盘使用率,100%。
这一刻的感觉,就像是你住在一间舒适的单身公寓里,突然有一天醒来,发现房间里堆满了各种看不见的、不知从何而来的杂物,把你堵在床上,动弹不得。你的“家”(服务器)被塞满了,所有的正常活动(数据读写)都已停滞。
恐慌?焦虑?别急。
这其实是一个“幸福的烦恼”,它证明你的网站在成长,你的应用在产生数据。这更是你从一个服务器的“住户”,升级为“房产管理大师”的绝佳契机。今天,这篇“紧急救援手册”,将分两步,手把手教你如何应对这场“空间危机”:
- “紧急大扫除” (治标): 我们先用专业工具,快速找出并清理掉那些最占空间的“垃圾”,让服务器立刻恢复呼吸。
- “扩建新房间” (治本): 然后,我们再从根本上解决问题,为你的“公寓”进行一次无缝的“扩建”,永久告别空间焦虑。
准备好,让我们开始这场“空间管理”的深度实践。
第一章:“紧急大扫除”—— 像专业保洁员一样清理你的服务器
在动手删除任何东西之前,我们必须先当一回“侦探”,搞清楚,到底是谁“吃”掉了我们宝贵的硬盘空间?
第一步:绘制“犯罪现场地图” (空间占用分析)
我们需要两个强大的命令行“探测器”。
- 全局探测器
df -h
这个命令,能让你从宏观上,看到你服务器上所有“房间”(磁盘分区)的面积、已用空间和可用空间。-h
参数是“human-readable”的意思,能让容量显示得更人性化(比如50G
而不是一长串数字)。 - 深度探测器
du
df
告诉了我们哪个“房间”满了,而du
则能告诉我们,这个房间里,到底是哪个“柜子”(文件夹)最占地方。sudo du -sh *
:在你想要调查的目录下(比如根目录/
),运行这个命令,它会告诉你当前目录下,每个文件和文件夹的总大小。- 【学长私藏的“终极扫描咒语”】:下面这行命令,是我压箱底的宝贝。它会扫描你所在的目录,并按从大到小的顺序列出前20个最占空间的文件或文件夹。这简直就是“空间杀手”的“通缉令”!
sudo du -ah . | sort -rh | head -n 20
好了,有了这两个“探测器”,你很快就能定位到那几个GB甚至几十GB的“罪魁祸首”。通常,它们都藏在下面这几个地方:
第二步:抓捕“头号通缉犯” (清理常见垃圾)
1. 积压的“报纸信件”—— 日志文件 (/var/log
)
- 它们是什么? 服务器上运行的每一个服务(比如Nginx、MySQL、系统本身),都会勤勤恳恳地记录自己的“工作日记”,也就是日志。时间久了,这些“日记本”能堆成山。
- 如何清理?
sudo find /var/log -type f -name "*.log" -size +100M -exec rm -f {} \;
这行命令的意思是:找到/var/log
目录下,所有以.log
结尾,并且体积大于100MB的文件,然后毫不留情地删除它们。 - 如何“根治”? 手动删日志太业余了。专业的做法,是配置
logrotate
工具,让系统每天自动地、把旧的日志打包压缩,并删除更老的日志。这就像雇了一个每天帮你整理报纸的保姆。
2. 废弃的“快递包装盒”—— 软件包缓存
- 它们是什么? 你每次用
apt
或yum
安装软件时,系统都会把下载的安装包(.deb
或.rpm
)缓存下来,以备不时之需。时间久了,这些“包装盒”也会堆满你的“玄关”。 - 如何清理?
- 对于Ubuntu/Debian:
sudo apt-get clean
- 对于CentOS/RHEL:
sudo yum clean all
- 这一招,往往能瞬间为你释放出几百MB甚至上GB的空间。
- 对于Ubuntu/Debian:
3. 被遗忘的“仓库杂物”—— 旧的备份文件和用户大文件
- 它们是什么? 检查一下你的
/home
目录,或者/root
目录,或者你自己创建的/backup
目录。是不是有一些几个月前、甚至几年前,你为了“以防万一”而随手打包的网站备份.zip
或数据库备份.sql
文件?它们可能早已失去了时效性,却依然像化石一样,占据着你宝贵的空间。 - 如何清理?
ls -lh
看一看,确认是无用的旧文件后,用rm
命令果断删除。
经过这一番“大扫除”,你的服务器是不是感觉“呼吸都顺畅了”?df -h
一看,可用空间终于不再是0G
了。
但这,只是“治标”。如果你的业务在持续增长,那么用不了多久,你又会再次收到那条“空间不足”的红色警报。要一劳永逸,我们需要进行“户型改造”。
第二章:“户型改造”—— 为你的云盘进行无损扩容
清理,只是腾出了现有的空间。而扩容,是创造全新的空间。在阿里云上,为你的服务器硬盘扩容,是一个极其成熟且安全的操作,但其中有一个最关键的“陷阱”,无数新手都在这里栽了跟头。
第一步:终极保险,没有之一!—— 创建快照
我必须用最严肃的语气,重复三遍: 操作硬盘前,请务必创建快照! 操作硬盘前,请务必创建快照! 操作硬盘前,请务必创建快照!
这就像在进行一场重要的外科手术前,签下那份“医疗保险”和“手术同意书”。快照,就是你服务器在那一刻的“完整克隆”。如果在接下来的扩容操作中,发生了任何比“被雷劈中”概率还低的小意外,导致你的数据损坏,快照,是你唯一的、能让时光倒流的“后悔药”。
去ECS控制台的“快照”页面,为你的服务器对应的所有云盘(系统盘、数据盘),都手动创建一个快照。这个过程,只需要点几下鼠标,但它给你带来的,是绝对的“操作底气”。
第二步:在控制台,实现“空间魔法” (扩容云盘)
- 找到你的“房产证”—— 云盘列表。 在ECS实例详情页,找到“云盘”选项卡,或者直接从左侧导航栏进入“存储与快照” -> “云盘”。
- 提出“扩建申请”。 找到你要扩容的那块云盘(通常是系统盘),在右侧操作栏,你会看到“扩容”的选项。但你可能会发现,它是灰色的,点不了!为什么? 因为对于大多数系统盘,扩容操作,需要在“关机”状态下进行。 是的,你需要先去实例列表,把你的服务器停止。
- 关机后,回到云盘列表, 那个“扩容”按钮,现在应该可以点击了。
- 点击它,会弹出一个窗口,让你选择“扩容后容量”。比如,你原来是50GB,现在可以改成80GB或100GB。
- 确认支付。这个过程通常很快,几分钟内,你的云盘在“物理层面”上,就已经变大了。
- 重新“开机”。
好了,现在你再登录服务器,激动地敲下df -h
……然后,你傻眼了。为什么显示的,还是原来的50G大小?!
朋友,欢迎来到新手最容易掉进去的那个“陷阱”。
第三步:最关键的“临门一脚”—— 扩展分区与文件系统
比喻一下,刚才的操作,相当于你已经成功地,向“规划局”(阿里云)申请,把你家旁边的那块空地,划到了你的名下。 你的“房产证”上,面积已经变大了。
但是!你家的“围墙”,还没有向外推!你“客厅”的地板,也还没有铺到那块新地上!
对于服务器里的“操作系统”来说,它只认识“围墙”里的地盘。你需要做的,就是进入系统内部,告诉它:“嘿,我们的地盘变大了,你可以把围墙和地板,都向外扩张了!”
这个过程,分为两步:扩展分区,和扩展文件系统。
- 检查你的“地契”详情。
lsblk
这个命令,会列出你所有的磁盘 (vda
) 和分区 (vda1
)。你会看到,vda
的总大小,已经是你扩容后的大小了(比如100G),但它下面的那个分区vda1
,还停留在旧的大小(50G)。 - 扩展“分区”这堵“外墙”。 我们需要一个工具
growpart
。CentOS通常自带,Ubuntu可能需要安装:sudo apt install cloud-guest-utils
。 然后,执行:sudo growpart /dev/vda 1
这句命令的意思是:把/dev/vda
这块硬盘上的第1
个分区,扩展到它所能扩展的最大尺寸。 - 扩展“文件系统”这片“地板”。 分区扩展好了,最后一步,就是让文件系统(你储存档东西的那个“地板”)也铺满整个新分区。
- 你需要先知道你的“地板”是什么材质的。 执行
df -T
,查看Type
那一列。最常见的是ext4
和xfs
。 - 如果你的文件系统是
ext4
:sudo resize2fs /dev/vda1
- 如果你的文件系统是
xfs
:sudo xfs_growfs /
(如果根目录就是这个分区)
- 你需要先知道你的“地板”是什么材质的。 执行
现在,就是见证奇迹的时刻。
再次,也是最后一次,敲下那个你已经烂熟于心的命令: df -h
看着Size
那一列,从50G
变成100G
,Avail
(可用空间)那一列,多出了几十G的崭新空间。那一刻,你会感受到一种前所未有的、掌控一切的喜悦。
从面对“100%”的恐慌,到动手清理的从容,再到最终扩容成功的喜悦。你今天所经历的,不仅仅是一次简单的“服务器维护”。
你学会了如何像一个侦探一样,去分析和定位问题;也学会了如何像一个工程师一样,用严谨、专业的流程,去改造你的“数字资产”。
更重要的是,你亲身体会到了“成长”的意义。磁盘空间满了,不是一件坏事。它证明,你的网站、你的项目、你的梦想,正在生根、发芽,正在变得越来越“丰满”。而你,也已经拥有了足够的知识和能力,去为它的下一次成长,提前铺好更宽广的道路。