Ext4上如何存储3亿个文件?

西安鲲之鹏 发布于 2014/01/27 21:45
阅读 2K+
收藏 1

Ext4上如何存储3亿个文件?

我测试存储(一个目录下存储3.2万个,259个目录)800多万的时候,inode就被耗光了。

[spider@localhost images]$ df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root
                     3276800   43180 3233620    2% /
tmpfs                8242643       1 8242642    1% /dev/shm
/dev/sda1             128016      38  127978    1% /boot
/dev/sdb1            8483456 8483456       0  100% /home

如何解决?


加载中
0
雨翔河
雨翔河

可以修改inode的占用大小。

0
西安鲲之鹏
西安鲲之鹏

引用来自“雨翔河”的答案

可以修改inode的占用大小。

不能动态改吧?只能在格式化分区的时候指定吧?
pikeman_ff
pikeman_ff
采用loop设备其实相当于增加了系统总的inode数量。
雨翔河
雨翔河
我没有实际操作过,不好发表说法,只能提供这么一个可能是的方案。
0
pikeman_ff
pikeman_ff
有很多办法。如数据库。或者做几个大的块文件,挂到loop设备,然后把小文件放到这个块文件里边等。办法还是不少的。
0
西安鲲之鹏
西安鲲之鹏

引用来自“pikeman_ff”的答案

有很多办法。如数据库。或者做几个大的块文件,挂到loop设备,然后把小文件放到这个块文件里边等。办法还是不少的。
多谢。感觉都比较麻烦,最省事的方法是什么呢?我想备份数据,然后重建分区怎么样?
pikeman_ff
pikeman_ff
我的建议是用数据库。inode占用问题容易解决。到你会面临新的问题,比如,在同一个目录下可能不能存放太多的文件,即使能放很多文件,搜索目录下文件的时候就像死机了一样…
0
NealFeng
NealFeng

备份数据,然后根据需求留出余量重建分区,一劳永逸。估计你也可以先调整现分区大小,分出没占用的空间,然后建一个新分区,然后将老分区挂载到新的下面。

 mke2fs -N 可以明确指定inodes数量。

0
西安鲲之鹏
西安鲲之鹏

引用来自“NealFeng”的答案

备份数据,然后根据需求留出余量重建分区,一劳永逸。估计你也可以先调整现分区大小,分出没占用的空间,然后建一个新分区,然后将老分区挂载到新的下面。

 mke2fs -N 可以明确指定inodes数量。

多谢!
webscraping@webscraping-VirtualBox:~$ sudo mkfs.ext4 -N 500000000 /dev/sdb1
mke2fs 1.42 (29-Nov-2011)
mkfs.ext4: inode_size (256) * inodes_count (500000000) too big
for a
    filesystem with 2096896 blocks, specify higher inode_ratio (-i)
    or lower inode count (-N).

-i 参数取多少合适呢?
0
NealFeng
NealFeng
其实我也比较弱。刚又回去翻了下鸟哥私房菜,又Google了下:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout。
貌似这样:一个文件至少要占一个inode和一个block,inode大小ext2时是128bytes,ext4是256bytes,但只使用了156bytes,不知道可不可以设置在156-256之间。block大小可以是1、2、4、64KB。但inodes最多2^32个;32位模式时,block最多2^32个,64位模式下block最多2^64个。
所以你3亿文件,那每个文件不大于1k,按1k的block,需要至少要3亿k(300 000 000k,300G)。3亿个256bytes的inodes需要300G/1024/25
6=75G。根据实际情况设置下吧。不过估计这样访问起来速度估计也是个问题,我觉得你可以参考下上面人的意见,换个方式吧。
西安鲲之鹏
西安鲲之鹏
回复 @NealFeng : 谢谢 还行吧。
NealFeng
NealFeng
回复 @鲲鹏Web数据采集 : 嗯,那可能还预留了放其它内容的空间。看来你的数据采集生意做得不错啊
西安鲲之鹏
西安鲲之鹏
辛苦了,兄弟。 webscraping@webscraping-VirtualBox:~$ sudo mkfs.ext4 -i 256 /dev/sdb1 mkfs.ext4: invalid inode ratio 256 (min 1024/max 67108864) ext4 inode最小是1024
0
OscerSong
OscerSong
ext4解决不了,使用gfs吧
OscerSong
OscerSong
这个针对大文件的上传,下载对于你的需求有得考证
西安鲲之鹏
西安鲲之鹏
MongoDB的GridFS如何?
0
OscerSong
OscerSong
xfs,jfs都可以做到inode动态增加,但是像你这样文件那么多,检索是很慢的,建议把数据分开一些
返回顶部
顶部