起因
服务器报错:no space left on device
翻译:设备上没有剩余空间
解决方法
清理数据,这里有个点要注意,
对于重要文件,一定要备份。
步骤
1 首先,需要确定哪个分区或目录占用了大量空间。
df -h
执行结果示例:
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 799M 1.3M 798M 1% /run
/dev/sda1 50G 45G 3.1G 94% /
tmpfs 3.9G 4.0K 3.9G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda5 200G 120G 71G 63% /home
tmpfs 799M 48K 799M 1% /run/user/1000
结果说明
Filesystem:显示文件系统的名称。这可以是物理硬盘分区(如/dev/sda1)、逻辑卷、网络挂载点(如NFS或SMB共享)或其他类型的文件系统。
Size:显示文件系统的总大小,以人类可读的格式(如G表示Gigabytes,M表示Megabytes)显示。
Used:显示已使用的空间大小。
Avail:显示可用的空间大小。
Use%:显示已使用空间的百分比。
Mounted on:显示文件系统挂载的挂载点,即文件系统中的哪个目录或路径与该文件系统相关联。
在上面的示例中:
/dev/sda1 分区是根文件系统(/),总大小为50GB,已使用45GB,剩余3.1GB,使用率为94%。
/dev/sda5 分区挂载在/home目录,总大小为200GB,已使用120GB,剩余71GB,使用率为63%。
tmpfs 是一种基于内存的临时文件系统,用于存储临时文件,它的大小和已用空间会根据系统负载和配置而变化。
udev 和其他设备相关的文件系统(如/dev/shm)通常用于系统内部目的,普通用户不需要过多关注。
具体需要关注哪个分区要看你的应用启动的时候会在哪个分区输出日志或生成数据文件。也就是说应用部署在哪个分区,就需要关注哪个分区。哪个分区的路径你要产生数据你就需要关注哪个分区。或者如果是初学者可以简单的看Use%这列,看哪个比较接近百分百,就去看那一行对应的Mounted on列,也就是服务器路径,清理这个路径里面的内容。
到这里我们要知道的信息是我需要清理哪个路径下面的内容。
2.找到对应的分区或者目录之后要进一步确认要清理的目录
这里面我推荐的命令是
du -ah / | sort -rh | head -n 10
这个命令如果权限不够可以尝试加sudo。
执行结果示例:
100G /
50G /home
45G /home/user
20G /var
15G /var/log
10G /usr
8.0G /opt
6.0G /lib
5.0G /tmp
4.5G /home/user/Documents
结果说明
du -ah /:du是“disk usage”的缩写,用于估算文件和目录的磁盘使用情况。-a选项表示“all”,即包括目录中的所有文件和子目录。-h选项表示“human-readable”,即以人类可读的格式(如K、M、G)显示磁盘使用情况。/表示根目录,即检查整个文件系统的磁盘使用情况。
|:管道符号,用于将前一个命令的输出作为后一个命令的输入。
sort -rh:sort用于对输入进行排序。-r选项表示“reverse”,即逆序排序(从大到小)。-h选项表示“human-numeric-sort”,即按照人类可读的数字格式进行排序(如能够正确识别并比较K、M、G等单位)。
head -n 10:head用于显示输入的前几行。-n 10表示显示前10行。
在上面的示例中:
/(根目录)占用了100G的磁盘空间(这个数字可能包括了挂载在根目录下的其他文件系统的空间,具体取决于系统配置)。
/home目录占用了50G。
/home/user目录占用了45G,是/home目录下的一个子目录。
接下来的几行显示了其他占用较多磁盘空间的目录,如/var、/var/log、/usr等。
可以看到目录的占用的磁盘空间大小是一个递进的关系。简单来说如果/home/user占用了很多磁盘空间,那么它的上级目录/home也一定占据了很多的磁盘空间,并且只多不少。
通常du -ah / | sort -rh | head -n 10看前十行就够了,当然对于比较复杂的情况也可以看更大的范围。
3清理目录,删除文件
1.清理某个路径下所有文件的命令
要清理(即删除)某个路径下的所有文件和子目录,可以使用rm -rf命令。但请务必小心,因为这个命令会递归地删除指定路径下的所有内容,并且不会提示确认。一定要对重要文件备份备份再备份。
rm -rf /home/tomcact/logs/*
注意:将/path/to/directory/替换为您要清理的实际路径。使用*表示删除该目录下的所有文件和子目录。如果您只想删除文件而保留子目录,可以使用find命令结合-type f选项:
find /home/tomcact/logs/ -type f -exec rm -f {} \;
2.删除某个特定的文件
rm /home/tomcact/logs/catalina.out
上面rm加文件路径是可以直接删除某个文件,但是对于calalina.out通常不会这样处理。直接删除打印日志会有问题。一般用下面的方法把文件置空。
> /opt/tomcat/logs/catalina.out
这个命令会打开 /opt/tomcat/logs/catalina.out 文件,并将其内容清空。如果文件不存在,这个命令会创建一个空文件。但是,请注意,如果 Tomcat 正在向该文件写入日志,这个操作可能会导致一些日志丢失(即那些尚未写入磁盘但在 Tomcat 内部缓冲区中的日志)。
或者
truncate -s 0 /opt/tomcat/logs/catalina.out
truncate 命令用于调整文件的大小。使用 -s 0 选项可以将文件大小设置为0,从而清空文件内容。与 > 操作符类似,如果文件不存在,truncate 命令通常会报错(除非使用了特定的选项来允许创建文件)。但是,truncate 通常被认为在处理大文件时比 > 更高效,因为它不需要实际地读取或写入文件内容。
3.删除某一类文件
删除Tomcat日志路径下所有以.log结尾的文件
find /home/tomcact/logs/ -name "*.log" -exec rm -f {} \;
标签:linux,文件,分区,清理,文件系统,dev,服务器,home,目录
From: https://blog.csdn.net/qq_42985657/article/details/144985134