系统满了,火速我们需要先排查下大文件
sudo du -h --max-depth=1 / 2>/dev/null | sort -hr
简单解读下这行命令,统计下根目录下/ 的一级子目录(不递归到更深层目录)的磁盘使用量,并通过管道命令可视化看懂的容量单位从高到低排序。2>/dev/null 这个是忽略所有错误信息(例如权限不足的目录访问警告)。如果我们需要排除某些目录可以使用 --exclude 指定。
sudo du -h --max-depth=1 --exclude=/mnt --exclude=/media / 2>/dev/null | sort -hr
sudo du -h --max-depth=1 /home/software 2>/dev/null | sort -hr
就这样一层一层通过文件夹排查到对应的大文件
一看应该是binlog日志没有设置过期时间
可以mysql客户端连接服务端,执行下面命令来解决
SET GLOBAL expire_logs_days = 7;
或者永久配置相关binlog日志过期处理
whereis my.cnf
找到对应/etc/my.cnf文件编辑
[mysqld]
# 自动保留最近7天的 binlog(根据需求调整天数)
expire_logs_days = 7
重启mysql后,可以看到系统盘占用磁盘使用率已经降低很多了
systemctl restart mysqld.service
一般我们安装软件都会在对应的数据盘来安装,看下系统磁盘挂载的情况
df -lh
醉了,软件安装是不是就没有使用数据盘,而是占用了系统盘,只看到一个盘符/dev/vda1
挂载数据盘
Linux的挂载机制。当将一个设备挂载到一个非空目录时,原目录的内容会被隐藏,直到卸载该设备后才会重新显示。因此,如果用户直接将/dev/vdb
挂载到/home/software
,那么在挂载期间,原目录下的内容会被隐藏,访问该目录时看到的是数据盘的内容。但一旦卸载,原内容会恢复。不过,如果用户在挂载后向该目录写入数据,数据会存储到数据盘中,而不是系统盘。
所以总结下我们在挂载数据之前如果原有目录是有安装软件数据的,不要直接挂载,需要新建空目录做对应的数据盘挂载。
查看磁盘是否分区
lsblk -f /dev/vdb
输出示例及解读:
NAME FSTYPE LABEL UUID MOUNTPOINT
vdb
- 如果
FSTYPE
列为空,说明磁盘没有文件系统,需要格式化。 - 如果显示
ext4
、xfs
等,说明已格式化。
查看是否有分区表
sudo fdisk -l /dev/vdb
- 如果无分区信息(如
vdb1
、vdb2
),说明未分区,需先分区或直接全盘格式化。
我们看到执行命令是有对应的vdb信息没有vdb1或vdb2相关的分区信息,那么是否可以跳过创建分区呢?
答案是可以的。数据盘 /dev/vdb
并不强制要求创建分区。
磁盘容量较小(例如 50GB)。仅需要一个连续的大容量存储空间,无需划分多个分区。我们可以直接 将整个磁盘/dev/vdb
格式化为 ext4 文件系统,我这里采用了这种
如果需要做分区的话,可以执行下面的命令
# 1. 创建分区
sudo fdisk /dev/vdb # 交互式创建分区(如 vdb1)
输入命令(按顺序执行):
n → 创建新分区。
选择分区类型(p 主分区 / e 扩展分区,一般选 p)。
设置分区号(默认直接回车)。
设置起始扇区(默认直接回车)。
设置结束扇区(如 +10G 分配 10GB,或直接回车使用全部空间)。
w → 保存并退出。
# 2. 格式化分区
sudo mkfs.ext4 /dev/vdb1
格式化磁盘分区
mkfs.ext4 /dev/vdb
#验证格式化结果
sudo blkid /dev/vdb # 输出应显示文件系统类型
挂载分区
#创建数据目录
mkdir -p /home/data
#挂载
mount /dev/vdb /home/data
永久挂载配置
查看磁盘UUID
# 获取磁盘 UUID
sudo blkid /dev/vdb
# 获取磁盘 UUID
sudo blkid /dev/vdb
# 编辑 fstab 文件(示例 UUID=abcd1234)
echo "UUID=abcd1234 /home/data ext4 defaults 0 0" | sudo tee -a /etc/fstab
####也可以一条命令替换上面两个命令
echo "UUID=$(sudo blkid -s UUID -o value /dev/vdb) /home/data ext4 defaults 0 0" | sudo tee -a /etc/fstab
# 验证配置是否正确
sudo mount -a
当然如果系统盘使用docker部署的话,需要做对应的数据迁移