2016-02-27 60 views
2

在我的Linux vServer上,inode数量有限(例如250.000)。我发现Yii2安装需要相当多的inode。 inode的数量大致是文件和目录的数量。Yii2:减少vServer上的inode使用量

在当前目录及其子目录所使用的i节点数可以

find . -xdev -printf '%h\n' | sort | uniq -c | awk '{total = total + $1}END{print total}' 

我Yii2项目的平均大约是30K的inode来确定。 ./web/assets./runtime./web/images文件夹中的文件并不多。大部分inode用于./vendor目录中。

因此,我的Yii2项目数量限于8个项目。

我该怎么做才能减少Yii2项目的inode使用量?

+0

我认为解决方案的一部分在于Yii2或作曲家配置。也可以添加一些代码行。但我也会尝试一个交叉帖子。谢谢@aneroid – WeSee

+0

我想在SO中看到任何类型的代码行,例如清理用于处理应用程序中的inode的文件或其他最佳做法。在[Serverfault](http://serverfault.com)中,我期望讨论与配置相关的主题。 – WeSee

+0

Imho,SO可能是一个伟大的“最佳实践”网站,但它本身就是它为什么不适合它的原因:-)这些会因用户偏好,行业规范的变化等而有所不同。因此, d更好地阅读关于书籍,博客,文章等方面的最佳实践,然后确定你想要遵循哪一个。顺便说一句,我不做我的密切+迁移投票。误解了意图。 – aneroid

回答

1

假设您的Linux vServer拥有root用户,您可以将一个新的文件系统嵌入到一个文件中并挂载它。这样的文件在父文件系统中只需要一个inode,而映像中的inode数量由您决定。

# dd if=/dev/zero of=myfs bs=1MB count=512 
512+0 records in 
512+0 records out 
512000000 bytes (512 MB) copied, 4.10134 s, 125 MB/s 
# losetup --find --show `pwd`/myfs 
/dev/loop0 
# mkfs -t ext4 -i 1024 /dev/loop0 
mke2fs 1.42.12 (29-Aug-2014) 
Discarding device blocks: done 
Creating filesystem with 500000 1k blocks and 500464 inodes 
Filesystem UUID: fef5ab29-8991-4f99-8a27-80b4d11b3133 
Superblock backups stored on blocks: 
     8177, 24529, 40881, 57233, 73585, 204401, 220753, 400625 

Allocating group tables: done 
Writing inode tables: done 
Creating journal (8192 blocks): done 
Writing superblocks and filesystem accounting information: done 

# mount /dev/loop0 /mnt 
# df -i | sed -n '1p;/mnt/p' 
Filesystem  Inodes IUsed IFree IUse% Mounted on 
/dev/loop0  500464  11 500453 1% /mnt 

在这里,我选择了EXT4,并设置字节每inode的,-i,其最小值,给人最大的inode数,500464,用于为512MiB上EXT4。

你可以用这种方法制作多个文件系统,每个项目一个文件系统,或者制作一个更大的文件系统,其中有更多的inode。

要在下次重新引导时挂载映像,请将一行添加到/etc/fstab

+0

哇,将文件系统嵌入到vServer中有什么疯狂的想法! +1。请帮我解决该解决方案的缺点,因为我没有任何有关如何创建文件系统的经验:在重新启动期间如何保持文件系统?性能如何? – WeSee

+0

我不检查答案按钮,因为这个解决方案需要在Yii2应用程序中做出更大的改变,我想先减少现有Yii2应用程序中的inode。 – WeSee

+1

通过为'/ etc/fstab'添加一行文件系统来处理持久性。我认为任何性能差异都可以忽略不计。缺点 - 你可能会备份你的数据两次。图像的大小是固定的,但您始终可以创建一个新的图像,然后复制数据以实现尺寸更改。 – dancancode