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的回收站爆了,节点爆了的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab runner:无法在 Ubuntu 上回收 Docker 空间 - 设备上没有剩余空间