Ubuntu18的回收站爆了,节点爆了

Posted langb2014

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu18的回收站爆了,节点爆了相关的知识,希望对你有一定的参考价值。

由于近期训练网络,小碎片已经到达几十亿,经常手动删除文件夹,然后虽然文件清理了,可是INode爆满,也无法进行复制啊删除啊创建啊等操作。之前碰到过但是稍微删除一下就可以运行了,这次怎么也不行,百度了好多,清理tmp目录,其实都无效。然后查看节点发现home节点爆满100%。

记录一下过程:

首先看个linux命令df
df命令作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。
df命令显示系统中包含每个文件名参数的磁盘使用情况,如果没有文件名参数,则显示所有当前已挂载文件系统的磁盘空间使用情况,参考示例1。
在默认情况下,磁盘空间是以1KB为单位进行显示的,但是,如果POSIXLY_CORRECT环境变量被设置为true,这种情况下默认使用512字节为单位显示,参考示例9。

df命令语法
df [选项] [文件名]
参数:
-a:--all,显示所有的文件系统,包括虚拟文件系统,参考示例2。
-B:--block-size,指定单位大小。比如1k,1m等,参考示例3。
-h:--human-readable,以人们易读的GB、MB、KB等格式显示,参考示例4。
-H:--si,和-h参数一样,但是不是以1024,而是1000,即1k=1000,而不是1k=1024。
-i:--inodes,不用硬盘容量,而是以inode的数量来显示,参考示例5。
-k:以KB的容量显示各文件系统,相当于--block-size=1k。
-m:以KB的容量显示各文件系统,相当于--block-size=1m。
-l:--local,只显示本地文件系统。
--no-sync:在统计使用信息之前不调用sync命令(默认)。
-sync:在统计使用信息之前调用sync命令。
-P:--portability,使用POSIX格式显示,参考示例6。
-t:--type=TYPE,只显示指定类型的文件系统,参考示例7。
-T:--print-type,显示文件系统类型,参考示例8。
-x:--exclude-type=TYPE,不显示指定类型的文件系统。
--help:显示帮助信息。
--version:显示版本信息。

df命令示例

示例1:查看包含给定文件磁盘空间使用情况

[root@localhost ~]# df /home   #指定一个文件夹,查看该文件夹所在磁盘的使用情况
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /

[root@localhost ~]# df /bin/ls   #指定一个文件
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /

[root@localhost ~]# df /bin/ls /home  #指定多个文件或文件夹
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /
/dev/sda2             16036224   2749160  12459316  19% /

[root@localhost ~]# df /bin/ls /home /usr/  #指定多个文件或文件夹
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /
/dev/sda2             16036224   2749160  12459316  19% /
/dev/sda2             16036224   2749160  12459316  19% /

[root@localhost ~]# df   # 默认情况
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2750464  12458012  19% /
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm

输出结果列说明:

Filesystem:代表该文件系统时哪个分区,所以列出的是设备名称。
1K-blocks:说明下面的数字单位是1KB,可利用-h或-m来改变单位大小,也可以用-B来设置。
Used:已经使用的空间大小。
Available:剩余的空间大小。
Use%:磁盘使用率。如果使用率在90%以上时,就需要注意了,避免磁盘容量不足出现系统问题,尤其是对于文件内容增加较快的情况(如/home、/var/spool/mail等)。
Mounted on:磁盘挂载的目录,即该磁盘挂载到了哪个目录下面。

示例2:查看所有文件系统

[root@localhost ~]# df -a    #包括虚拟文件系统
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /
proc                         0         0         0   -  /proc
sysfs                        0         0         0   -  /sys
devpts                       0         0         0   -  /dev/pts
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm
none                         0         0         0   -  /proc/sys/fs/binfmt_misc
none                         0         0         0   -  /proc/fs/vmblock/mountPoint
sunrpc                       0         0         0   -  /var/lib/nfs/rpc_pipefs

[root@localhost ~]# df     # 默认
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm

说明:系统里面存在很多特殊的文件系统,这些比较特殊的文件系统几乎都是在内存当中,(如/proc挂载点),所以,这些特殊文件系统都不会占据硬盘空间。

示例3:指定单位大小

[root@localhost ~]# df -B 1k    #1k为单位
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2749160  12459316  19% /
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm

[root@localhost ~]# df --block-size 1m   #1M为单位
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/sda2                15661      2685     12168  19% /
/dev/sda1                  289        17       258   7% /boot
tmpfs                     1005         0      1005   0% /dev/shm

示例4:以人们易读的方式显示

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  2.7G   12G  19% /
/dev/sda1             289M   17M  258M   7% /boot
tmpfs                1005M     0 1005M   0% /dev/shm

示例5:以inode的数量显示

[root@localhost ~]# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda2            4141216  101279 4039937    3% /
/dev/sda1              76304      35   76269    1% /boot
tmpfs                 257068       1  257067    1% /dev/shm

示例6:使用POSIX格式显示

[root@localhost ~]# df -P  #使用POSIX格式显示
Filesystem         1024-blocks      Used Available Capacity Mounted on
/dev/sda2             16036224   2750464  12458012      19% /
/dev/sda1               295561     16911    263390       7% /boot
tmpfs                  1028272         0   1028272       0% /dev/shm

[root@localhost ~]# df 
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2750464  12458012  19% /
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm

示例7:只显示类型为ext3的文件系统

[root@localhost ~]# df -t ext3
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2750464  12458012  19% /
/dev/sda1               295561     16911    263390   7% /boot

示例8:显示出每个文件系统的类型

[root@localhost ~]# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda2     ext3    16036224   2750464  12458012  19% /
/dev/sda1     ext3      295561     16911    263390   7% /boot
tmpfs        tmpfs     1028272         0   1028272   0% /dev/shm

示例9:显示出每个文件系统的类型

[root@localhost ~]# df   #默认情况是1024
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2750464  12458012  19% /
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm

[root@localhost ~]# export POSIXLY_CORRECT=true   #设置POSIXLY_CORRECT为true

[root@localhost ~]# df    #POSIXLY_CORRECT为true时默认512
Filesystem         512B-blocks      Used Available Use% Mounted on
/dev/sda2             32072448   5500928  24916024  19% /
/dev/sda1               591122     33822    526780   7% /boot
tmpfs                  2056544         0   2056544   0% /dev/shm

[root@localhost ~]# unset POSIXLY_CORRECT   #取消设置POSIXLY_CORRECT
[root@localhost ~]# df 
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             16036224   2750464  12458012  19% /
/dev/sda1               295561     16911    263390   7% /boot
tmpfs                  1028272         0   1028272   0% /dev/shm

搬砖厂:https://blog.csdn.net/gnail_oug/article/details/70217446

画个重点:

在df -h 和df -i  显示使用率100%,基本解决方法都是删除文件。

df -h   是去删除比较大无用的文件-----------大文件占用大量的磁盘容量。

df -i    则去删除数量过多的小文件-----------过多的文件占用了大量的inode号

用命令一看自己的home下节点爆满!!!

inode究竟是什么?为什么它使用完,就不能创建文件和文件夹了?

  解释:文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

  文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

  每一个文件都有对应的inode,里面包含了与该文件有关的一些信息,可以使用stat命令查看inode的信息:stat example.txt。另外,单个目录下子目录的数量也是有限制的

统计目录inode占用数目:

find */ ! -type l | cut -d / -f 1 | uniq -c

find */ -exec stat -c "%n %i"  \\;|awk -F "[/ ]" 'if(! a[$1-$NF]++) l[$1]++ENDfor (i in l) print i,l[i]'

自己一个data_work将近1亿节点,发现其他文件夹也是节点爆满。。。。。。

解决方案:

思路1:删除无用的临时文件,释放inode

进入/tmp目录,执行find -exec命令
find /tmp  -type f -exec rm  \\;
遍历寻找0字节的文件,并删除:
find /home -type f -size 0 -exec rm  \\;
再用df  -i 查看inode的使用量

思路2:如果想彻底解决这个问题就需要按照如下的思路来操作了:

1. 卸载文件系统
umount /dev/sdb1
2. 建立文件系统,指定inode节点数
mkfs.ext4 /dev/sdb1 -N 18276352
3. 修改fstab文件
vim  /etc/fstab
/dev/sdb1 /data0  ext3 defaults 1 2
4. 挂载文件系统
mount -a
5. 查看修改后的inode参数
dumpe2fs -h /dev/sdb1 | grep node

思路3:删除节点占用多的无用文件夹(亲测有效)

还有一个find命令可以辅助一下。

不知道有哪些目录中存在大量碎片文件时,可通过命令:(查找出超过10M的目录,再行处理)

find / -type d -size +10M

或者使用命令:(找出目录下文件总数,可能需要执行多次,直到找出具体的目录)

cd /
find */ ! -type l | cut -d / -f 1 | uniq -c

当找到的目录中存在上百万文件时 rm 是无法一次性删除的,可以使用rsync命令来删除:

mkdir /tmp/del_path  #创建临时空目录
rsync --delete  -a -H -v  /tmp/del_path/  /val/logs/   #删除/val/logs/下所有文件

关于rsync 比较复杂了,想了解的同学可以看一下。

rsync 的介绍:https://wiki.archlinux.org/index.php/Rsync_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

rsync的算法原理及应用:https://zhuanlan.zhihu.com/p/59086295

rsync的增量同步备份文件:http://einverne.github.io/post/2017/07/rsync-introduction.html

rsync好文:https://blog.csdn.net/lianzg/article/details/24817087

我自己电脑问题已经OK了。。。。

================================================================================

加个小插曲,linux删除文件的原理是怎么回事呢?为什么是上面删除操作?

cp、mv、rm 到底做了什么?

https://zhuanlan.zhihu.com/p/25600743

删除正在使用的文件——釜底抽薪?

https://zhuanlan.zhihu.com/p/25650525

================================================================================

可供学习链接:

https://blog.csdn.net/weixin_30955617/article/details/99901865

https://blog.csdn.net/gnail_oug/article/details/70217446

https://www.ibm.com/developerworks/cn/linux/l-cn-usagecounter/

 

以上是关于Ubuntu18的回收站爆了,节点爆了的主要内容,如果未能解决你的问题,请参考以下文章

windowsCPU利用率100%爆了爆了

Gitlab runner:无法在 Ubuntu 上回收 Docker 空间 - 设备上没有剩余空间

地图之美——帅爆了!!!

爆了,爆了!阿里 P9 纯手打 Java 面试小抄(21 版)在 GitHub 上已获 80 万 star

为什么有些大公司技术弱爆了?

如何快速上手Jetpack?Jetpack入门到精通再到(网易云)强化实战,Github已标星80K+,爆了爆了!