经常遇到 linux 空间满了,但是垃圾清理软件又不如 windows 的丰富,本文记录.

系统情况

OS 环境为 VMware 上的 Ubuntu-server20 虚拟机,上面跑有 Kind 的 K8s 集群。最近服务突然异常,看 log 发现是磁盘满了,于是清理.

初始磁盘大小为 40G, 装好系统和必备环境之后大小为 23G/40G, 其中 4G 是 swap 分区.

apt 清理

首先是系统自带命令,放心使用.

sh
1
2
3
apt-get autoclean              #清理旧版本的软件缓存
apt-get clean #清理所有软件缓存
apt-get autoremove #删除系统不再使用的孤立软件

此步约释放了约 400MB 空间

应用清理

如果有 docker, docker system prune 即可自动清理
此步骤清理约 200MB 空间

其他应用的数据,比如我的是 K8s 集群的失效的 PV 和 PVC. 如果是其他应用请参照其他的.
即使服务已经删除,但是 PV© 不会自动删除,需要手动清理

sh
1
2
3
4
5
6
7
kubectl delete namespace deepflow --cascade=background
# 如果整个ns的资源都不需要, 上面这个命令可以直接删除
# 如果只需要删除无用pv和pvc, 用下面的
kubectl get pvc
kubectl delete pvc -n <your-ns> # 先删pvc
kubectl get pv
kubectl delete pv -n <your-ns> # 再删pv

此步骤清理约 3G 空间

手动清理

上面都是可以自动清理的,下面的很多应用产生的数据得手动清理

首先查看磁盘占用情况

sh
1
2
df -h
du -sh /* --exclude proc
img

此时可以看到,通常是 var 目录占大头.
如果有不需要的,可以一级一级查找手动删 (务必保证你知道在删什么).

终极方法

然而,最后也只省下大约 4G 空间,杯水车薪.
主观意向无法改变客观事实,那就只好启动终极方法–磁盘扩容
因为我是 VMware 虚拟机,扩容就相对方便。如果是实体机那就加硬盘咯.

分区未占满

有可能是分区够大,但是 lvm 逻辑卷没有占满。如下排查.
查看大小

sh
1
2
3
fdisk -l # 查看设备
lsblk # 查看文件系统分区
vgdisplay # 查看lvm情况
img
img

如图,我的 lvm 逻辑分区没有占满磁盘分区.

如下命令扩充即可 (记得改自己的 df -h 显示的磁盘名字)

sh
1
2
3
4
5
6
7
8
9
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

cat /etc/fstab # 查看文件系统类型

# 如果是ext类型就如下
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

# 如果是xfs则如下
xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv

分区已满需要扩容

首先在虚拟机设置里增加磁盘大小,很简单不必多说.

sh
1
2
fdisk -l # 首先查看磁盘情况
fdisk /dev/sda # 开始配置

如下配置,输入 m 获取帮助

img

然后输入 n 新建分区,一路回车即可 (默认会占满剩下的磁盘)

img

然后输入 w 写入退出即可.
然后输入 fdisk -l 会发现多了一个分区

img

如果要把这个新分区挂载到文件夹的话就输入如下.

sh
1
2
3
4
mount /dev/sda4 /<new-dir>
#sda4是新的分区, 可能不一样.后面的 new-dir 是你要挂载的文件夹
vim /etc/fstab
#设置开机自动挂载, 添加以下内容/dev/sda4 /<new-dir> ext4 defaults 0 2

如果是扩容就不需要挂载,直接进行下面

sh
1
2
3
partprobe  # 更新分区表
pvcreate /dev/sda4 # 创建新逻辑卷
vgdisplay # 查看卷信息, 下一步用

记住这个卷信息名字,我的叫 ubuntu-vg

img

然后就回到上面分区未占满时扩展逻辑卷的步骤了。复述一遍

sh
1
2
3
4
5
6
7
8
9
lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv

cat /etc/fstab # 查看文件系统类型

# 如果是ext类型就如下
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

# 如果是xfs则如下
xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv

最后 df -h 正常,大功告成


参考文章

https://blog.csdn.net/qq_37437983/article/details/109259566
https://blog.csdn.net/qq_48922459/article/details/122229118
https://www.cnblogs.com/devilyouwei/p/14179231.html