背景: 负责ci上线的机器在上线时候提示磁盘满了... 很奇怪居然没部署几天就满了。于是折腾一番磁盘操作。
常用指令
du df
du
(disk usage),是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。
df
(disk free),通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件,df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。
当文件系统也确定删除了该文件后,这时候du与df就一致了。
一般遇到磁盘占用满了,df
快速查看一下,然后可以进入根目录下 du -sh *
查看每个文件夹下的总的大小。
其实可以看出并没有使用多大的空间,发现问题挂载 /
的磁盘居然 4.8G 就已经使用 100%了。
fdisk -l
查看挂载情况
本来就一共21.5G的mini机型,居然才挂载了5G....
lsblk
扩容
一般遇到这种情况首先想到的就是扩容。
搜一下,相关扩容的文章,例如
Centos/Linux下调整分区大小(以home和根分区为例)
又例如
以下操作基于场景:有两个同vg的lv(applv和rootlv),我们需要从applv腾出1G给rootlv。
1.缩小applv磁盘
lvresize -L -1G /dev/mapper/myvg-applv
2.扩展rootlv磁盘
lvresize -L +0.99G /dev/mapper/myvg-rootlv
3.扩展rootlv文件系统
resize2fs /dev/mapper/myvg-rootlv
扩展完磁盘后使用lsblk查看的结果变了而使用df -h结果大小却没变,这是因为前者查看的是磁盘的大小而后者查看的是文件系统的大小。磁盘和文件系统在不严格区分时可视为同一个东西,但追究起来确实是两样东西。这也是需要第3步的原因。
原本以为我们的/dev/vda1正好没有充满 /dev/vda 所以直接扩容就好,然而上面的操作是针对于 LVM 的。
我们的这种磁盘是不支持的。
需要 pvcreate 将物理硬盘分区初始化为物理卷
旧环境经不起这样折腾啊....
只能新建分区,再挂载一个新文件夹了 。
新建分区
借助fdisk
指令
fdisk /dev/vda
m 查看帮助
p 打印现有分区
n 新建分区
新建一个主分区 然后占用剩下的全部空间 直接一路回车敲下去使用default就行了
p 再查看一次
已新建成功
w保存退出
更新内核分区表
不用重启系统,更新内核分区表
partprobe
格式化新建分区
mkfs -t ext4 /dev/vda2
挂载
新建一个路径 然后 挂载分区
mkdir /data2
mount /dev/vda2 /data2/
df -h 查看 已可正常使用
查看现有挂载
前面的挂载只是手动挂载,重启后又会丢失,所以需要给写到配置文件/etc/fstab
在末尾补充
/dev/vda2 /data2 ext4 defaults 0 0
即可