服务器磁盘空间持续增大,小白新手怎么查?记录以下一些常见的磁盘占用排查及清理的笔记。
查磁盘空间
主要是du。
首先,使用df
命令查看各个磁盘分区的使用情况,找出哪个分区或挂载点的空间占用率异常高。
df -h
这个命令会列出所有挂载的文件系统及其使用情况,包括已用空间、可用空间和挂载点。
其次呢,您可以使用du
命令结合sort
进行磁盘空间的分析。以下是一个基本的命令序列,用于找出占用最多磁盘空间的几个文件夹:
# 在当前目录中查找占用最多磁盘空间的5个文件夹
du -h --max-depth=1 | sort -hr | head -n 5
# 如果想在整个文件系统中搜索,可以去掉--max-depth参数
du -h | sort -hr | head -n 5
解释:
-
du
: 磁盘使用情况命令。 -
-h
: 以人类可读的格式显示(例如,自动选择KB、MB、GB)。 -
--max-depth=1
: 限制搜索深度为当前目录下一级。 -
sort -hr
: 按照人类可读的数字进行逆序排序。 -
head -n 5
: 只显示前5个结果。
请注意,这些命令可能需要一些时间来运行,特别是在大型文件系统或者深层目录结构中。
定位占用空间大的文件夹
1,使用du
命令
对于使用率较高的分区或挂载点,可以使用du
命令来递归地检查该分区下各个目录和文件的磁盘使用情况。
du -sh /*
这个命令会列出根目录(/)下各个一级目录的大小。如果发现某个目录占用空间很大,可以进一步进入该目录,使用相同的命令继续查找。
为了更精确地定位大文件或目录,可以使用以下命令来逐层深入查找:
cd /目标目录
du -sh *
然后针对占用空间大的目录重复上述步骤。
注意du -sh *不要带路径,要先cd进路径后,在du -sh *
2,结合find
命令
如果需要查找特定大小的文件,可以使用find
命令结合-size
选项。例如,查找当前目录及子目录下所有大于100MB的文件:
find . -type f -size +100M
这个命令会列出所有大于100MB的文件及其路径。
文件大小的排序
cd /var/lib
du -ah --max-depth=1 | sort -rh | head -n 10
这个命令会列出 /var/lib
目录下最大的10个文件或子目录。注意,这里的 -rh
选项是 sort
命令的,用于按数字大小进行逆序排序。而 du
命令的 -ah
选项则是为了显示所有文件和目录的大小,并通过 --max-depth=1
限制输出深度。
如果你想要递归地检查所有子目录和文件(不限制深度),可以去掉 --max-depth=1
选项,但请注意,这可能会产生大量的输出,特别是当 /var/lib
包含很多子目录和文件时。在这种情况下,你可能需要重定向输出到文件中进行查看,或者使用其他方法(如 more
、less
、grep
等)来过滤或分页显示输出。
大文件浏览
在CentOS上浏览一个很大的文件时,直接使用文本编辑器(如vim或nano)可能会因为文件过大而导致性能问题或编辑器响应缓慢。相反,你可以使用一些专门用于查看或搜索大文件的命令行工具。很多人喜欢tail
tail -n 10 ./messages-20240826
grep 'some_keyword' ./messages-20240826
以下是几个推荐的命令和工具:
-
less
命令 :
less
是一个分页查看工具,非常适合查看大文件。它允许你向前或向后浏览文件内容,而不需要一次性将整个文件加载到内存中。使用less 文件名
来打开文件,然后你可以使用上下箭头键、Page Up/Page Down键或空格键来浏览文件内容。 -
more
命令 :与
less
类似,more
也是一个分页查看工具,但它没有less
的一些高级功能(如向后翻页)。使用more 文件名
来打开文件,然后使用空格键翻页。 -
head
命令 :如果你只对文件的开始部分感兴趣,可以使用
head
命令。默认情况下,head
显示文件的前10行,但你可以使用-n
选项来指定显示的行数,例如head -n 50 文件名
会显示文件的前50行。 -
tail
命令 :与
head
相反,tail
命令用于查看文件的末尾部分。默认情况下,tail
显示最后10行,但你也可以使用-n
选项来指定行数,或者使用-f
选项来实时查看文件末尾的新增内容(这对于查看日志文件非常有用)。 -
awk
命令 :
awk
是一个强大的文本处理工具,虽然它不是专门用来浏览文件的,但你可以使用它来搜索或提取文件中的特定行或列。awk
的功能非常灵活,可以根据需要编写复杂的脚本来处理文件。 -
grep
命令 :如果你对文件中的特定文本或模式感兴趣,
grep
是你的好帮手。它允许你搜索文件中匹配指定模式的行,并输出这些行。使用grep '搜索模式' 文件名
来搜索文件。
根据你的具体需求(比如是想要查看整个文件、文件的特定部分,还是搜索文件中的文本),你可以选择上述命令中的一个或多个来使用。对于大多数需要浏览大文件的情况,less
是个很好的起点。
反向追查大文件来源
如果文件当前正在被写入,你可以使用 lsof
或 fuser
命令来查看哪个进程正在访问这些文件。
sudo lsof +D /path/to/messages-directory
# 或者
sudo fuser /path/to/messages-20240826
也可以使用 inotifywait
(来自 inotify-tools
包)来监控这些文件目录的变化,看看是哪个进程在写入这些文件。
sudo inotifywait -m -r /path/to/messages-directory
然后使用 ps
命令查看这两个进程的详细信息。例如:
ps -f -p 833,7891
清理/var/log下的几个文件
看到该目录下一些messages、mail、cron、secure等几个文件很困扰?他们其实是rsyslog,它是负责处理系统日志的守护进程,我们不必要强删,还是去修改配置文件即可.
通常,你可能需要编辑 /etc/rsyslog.d/
目录下的某个 .conf
文件(如 50-default.conf
),而不是直接编辑 /etc/rsyslog.conf
,因为后者可能包含全局设置和包含其他配置文件的指令。
vim /etc/rsyslog.d/
我是进去后直接注释掉一些我认为不需要的日志。
完事记得重启
sudo systemctl restart rsyslog
另一种更常见且灵活的方法是使用 logrotate 工具来管理日志文件的大小和轮转。
步骤如下:
-
编辑 logrotate 配置文件 :
在
/etc/logrotate.d/
目录下创建一个或编辑一个配置文件(如rsyslog
),以包含针对/var/log/syslog
(或你关心的其他日志文件)的轮转规则。 -
设置大小限制和轮转策略 :
在配置文件中,你可以设置
size
指令来指定日志文件的大小限制,并使用rotate
指令来指定保留的轮转文件数量。例如:/var/log/syslog { su root root size 1G rotate 7 daily missingok notifempty compress delaycompress postrotate invoke-rc.d rsyslog rotate >/dev/null endscript }
-
这个配置将
/var/log/syslog
的大小限制为 1GB,并保留 7 个轮转文件。每天检查一次文件大小,并在达到限制时轮转文件。 -
确保 logrotate 定时任务已设置 :
大多数 Linux 系统都会自动设置 logrotate 的定时任务(如
/etc/cron.daily/logrotate
)。你可以检查这个文件是否存在,并确保它包含正确的logrotate
命令。 -
(可选)手动运行 logrotate :
在更改配置文件后,你可以手动验证并强制运行 logrotate 来测试配置:
sudo logrotate -vf /etc/logrotate.d/rsyslog
清理/var/log/journal目录
/var/log/journal
是Linux系统中用于存放systemd日志的目录。systemd是大多数现代Linux发行版(包括CentOS 7及更高版本)的初始化系统和系统管理器,它负责启动系统、管理用户会话和服务等。systemd-journald是systemd的一部分,它负责收集并管理来自系统和服务的日志信息。
不要直接删,而去修改配置就行
vim /etc/systemd/journald.conf
/etc/systemd/journald.conf
是systemd-journald服务的配置文件,它用于定义systemd日志服务的各种参数和行为。以下是一些关键的配置项及其说明:
基本配置
- Storage :控制日志数据的存储方式。可选的值包括
volatile
、persistent
、auto
和none
。volatile
:日志数据存储在内存中,即/run/log/journal
目录下。persistent
:日志数据存储在磁盘上,即/var/log/journal
目录下。auto
:日志数据默认存储在磁盘上,但如果/var/log/journal
目录不存在,则存储在内存中。none
:关闭日志存储,所有接收到的日志数据将被丢弃。
- Compress 和 Seal :这两个选项用于控制日志数据的压缩和加密。
Compress=yes
表示启用日志压缩,Seal=yes
表示启用数据加密。
日志文件大小与数量限制
-
SystemMaxUse 、SystemMaxFileSize 、SystemMaxFiles :这些选项用于限制磁盘上日志文件的总大小、单个文件的大小以及保留的最多文件数。例如,
SystemMaxUse=500M
表示日志最多可以使用500MB的磁盘空间。 -
RuntimeMaxUse 、RuntimeMaxFileSize 、RuntimeMaxFiles :这些选项用于限制内存中日志文件的总大小、单个文件的大小以及保留的最多文件数。例如,
RuntimeMaxUse=50M
表示存储在内存中的日志文件总大小不超过50MB。
日志滚动策略
- MaxRetentionSec 和 MaxFileSec :这些选项用于定义日志文件的保留时间和滚动策略。但通常,基于文件大小的滚动策略(通过
SystemMaxFileSize
和RuntimeMaxFileSize
控制)已经足够,因此这些时间相关的选项可能不需要频繁修改。
配置示例
以下是一个简化的/etc/systemd/journald.conf
配置文件示例:
[Journal]
Storage=persistent
Compress=yes
Seal=yes
SystemMaxUse=500M
SystemMaxFileSize=50M
SystemMaxFiles=10
RuntimeMaxUse=50M
RuntimeMaxFileSize=50M
RuntimeMaxFiles=1
注意事项
- 在修改配置文件后,需要重启systemd-journald服务以使更改生效。可以使用
systemctl restart systemd-journald
命令来重启服务。 - 定期检查和清理日志文件是一个好习惯,以避免占用过多磁盘空间。
- 如果启用了日志加密(
Seal=yes
),则需要确保有适当的密钥管理策略,以便在需要时能够解密日志数据。