2016-02-27 37 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