CentOS系统存储空间管理指南
存储空间管理是CentOS系统运维的重要环节,以下从查看现状、清理无用数据、扩展空间、优化配置、自动化维护五大维度总结具体方法,帮助释放空间并保持系统高效运行。
在管理存储空间前,需先明确空间占用情况,常用命令如下:
df -h 以人类可读格式(GB/MB)显示各分区的总大小、已用空间、可用空间及使用百分比,重点关注Use%接近100%的分区(如/根分区、/home分区)。du -sh /* | sort -rh | head -n 10 列出根目录下占用空间最大的前10个目录;du -sh /path/to/dir/* 进一步查看指定目录下各子目录的大小;find / -type f -size +100M 查找系统中大于100MB的文件(可调整+100M为其他阈值)。临时文件(如/tmp、/var/tmp目录下的文件)通常无需长期保留,可直接删除:
sudo rm -rf /tmp/* /var/tmp/*
(注:重启系统后/tmp目录会自动重建,删除前需确认无正在运行的程序依赖这些文件。)
日志文件(如/var/log目录下的messages、secure、cron等)可能随时间积累变得非常大,可通过以下方式清理:
sudo truncate -s 0 /var/log/log_file(如/var/log/messages,需root权限)。sudo find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \; 删除30天前的.log文件。logrotate工具:通过/etc/logrotate.conf配置日志轮转策略(如按大小或时间分割日志),并强制执行轮转:sudo logrotate -f /etc/logrotate.conf。YUM/DNF包管理器会缓存下载的软件包及元数据,占用/var/cache/yum或/var/cache/dnf目录空间,清理命令如下:
sudo yum clean all(清理所有缓存,包括软件包和元数据)。sudo dnf clean all(同上,适用于CentOS 8及以上版本)。卸载不再使用的软件包可释放大量空间:
sudo yum remove package_name 或 sudo dnf remove package_name(如sudo yum remove vim-enhanced)。sudo yum autoremove 或 sudo dnf autoremove(删除系统中无其他软件依赖的包)。sudo package-cleanup --oldkernels --count=1(仅保留1个旧内核)。find命令定位大文件后,手动确认并删除(如sudo find / -type f -size +500M -exec ls -lh {} \;查找大于500MB的文件,确认无误后添加-exec rm -f {} \;删除)。lsof | grep deleted查找此类文件,重启对应进程或终止进程以释放空间。若清理后仍空间不足,需通过扩展存储解决,常见方式如下:
lsblk命令查看新硬盘设备名(如/dev/sdb)。fdisk /dev/sdb创建分区(如/dev/sdb1),格式化为所需文件系统(如sudo mkfs.ext4 /dev/sdb1)。/mnt/newdisk),临时挂载sudo mount /dev/sdb1 /mnt/newdisk;编辑/etc/fstab文件添加一行(如/dev/sdb1 /mnt/newdisk ext4 defaults 0 0)实现开机自动挂载。LVM(逻辑卷管理)支持动态调整分区大小,适用于需要灵活扩展的场景:
pvdisplay(查看物理卷)、vgdisplay(查看卷组剩余空间)、lvdisplay(查看逻辑卷大小)。lvextend -L +10G /dev/mapper/centos-root扩展根分区10GB(+10G表示增加10GB,可根据需求调整);若卷组无剩余空间,需先扩展卷组(见下一步)。pvcreate /dev/sdb1创建物理卷,vgextend centos /dev/sdb1将物理卷加入卷组centos)。resize2fs /dev/mapper/centos-root,XFS文件系统用xfs_growfs /dev/mapper/centos-root。VDO(虚拟数据优化器)通过重复数据删除(相同数据只存一份)和压缩(减少数据体积)降低磁盘实际使用量,适用于存储大量重复数据的场景(如备份、虚拟机镜像):
sudo yum -y install vdo kmod-kvdo。sudo vdo create --name=vdo1 --device=/dev/sdb1 --vdoLogicalSize=100G(将/dev/sdb1创建为100GB的VDO卷)。sudo mkfs.xfs /dev/mapper/vdo1,创建挂载点并挂载(如/mnt/vdo)。deadline适合数据库,noop适合SSD),通过cat /sys/block/sda/queue/scheduler查看当前调度器,修改/sys/block/sda/queue/scheduler文件(如写入deadline)设置。/etc/sysctl.conf中的vm.dirty_ratio(脏页比例,如设为10)和vm.dirty_background_ratio(后台刷脏页比例,如设为5),提升缓存效率。为避免空间问题反复出现,需设置定时任务自动执行清理操作:
/etc/logrotate.conf,设置rotate 7(保留7天日志)、size 100M(超过100MB则轮转),并添加compress(压缩旧日志)选项;或通过crontab -e添加0 3 * * * /usr/sbin/logrotate /etc/logrotate.conf(每天凌晨3点执行)。0 4 * * * /usr/bin/yum clean all(每天凌晨4点清理YUM缓存)或0 5 * * * /usr/bin/dnf clean all(适用于DNF)。0 6 * * * /usr/bin/find / -type f -size +100M -exec ls -lh {} \; > /var/log/large_files.log(每天凌晨6点记录大于100MB的文件)。注意事项:
/etc、/home、数据库文件),防止误删导致数据丢失。rm -rf命令时需谨慎,建议先使用ls命令确认目标文件/目录。/var/log/messages、/var/log/syslog),及时发现磁盘空间异常增长的原因(如日志暴增、进程泄漏)。