本站文章总数为:165
Search Posts

3000W碎文件innode写满的处理方案之转移

内容纲要

innode满了怎么办,蛋疼…..只能转移了

df  -h还有空间

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   26G   12G  69% /
tmpfs            31G     0   31G   0% /dev/shm
/dev/vdb1       493G  392G   76G  84% /data1
/dev/vdc1       3.9T  1.1T  2.7T  28% /data2

df  -i 是我后面mv方案暂停后清理了50W碎文件释放50多W

df -i
Filesystem        Inodes    IUsed     IFree IUse% Mounted on
/dev/vda1        2621440   213239   2408201    9% /
tmpfs            8115346        2   8115344    1% /dev/shm
/dev/vdb1       32768000 32214873    553127   99% /data1
/dev/vdc1      262144000 47467201 214676799   19% /data2

不然的见过就是data1目录明明还有70多G ,但是无法写入了

因为都是日志文件 一个就几kb,三千多万个,写满了innode

科普内容

什么是inode和block?

所谓的inode就是索引节点(index node)的意思,在每一个存储设备被格式化创建文件系统后,所有的文件大致被分为了两部分,分别是inode和block。

其中inode用来存储文件属性信息,其中包括了文件大小,文件的归属者,文件的归属组,权限,类型,修改时间,以及指向文件实体数据(block)的指针。

block中存储的就是文件的实际数据,比如说,照片,视频,音频等等,但是有一点需要注意!就是inode当中不包含文件名!一个文件的文件名,存储在上级目录的block中!

 

其实inode和block之间的关系就像是一本书一样,inode是一本书的目录,一本书会有很多内容,一个知识点或者一个故事会占很多页,一个block就相当于书中的一页内容。

所以说一般情况下一个inode会对应一个或多个block。

开始解决问题 原来的磁盘还要用

开始直接使用mv/  3000w个log文件在/data1/log/ 迁移到4T盘的  /data2/

mv /data1/log /data2/ 执行后发现短时间搞不定,为了防止ssh中断中断执行.我ctrl+z暂停,然后bg拉到后台执行

挂了一个晚上 发现速度不行,而且因为是整个mv,需要全部移动完成innode才会释放,这个目录程序还在跑而且不能停止服务的那种,不然依赖服务的服务全G,只能无奈kill停止,然后mv几个小的子文件文件夹释放了50多innode

然后我想着cp  -r 会不会快一点,拿了个10多w子文件夹测试,速度基本一样.

最终方案rsync

rsync -a /data1/log/ /data2/log/

因为可以多线程……同步完之后,直接rm  -rf删除

后续未测试方案

读取所有子文件夹,然后批量nohup  mv 后台运行….后续有测试在更新

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注