故障現象:
[root@localhost ~]# df -ia
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 34390016 1001472 33388544 3% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
tmpfs 4078835 14733 4064102 1% /dev/shm
/dev/sda1 65536 46 65490 1% /boot
/dev/sdb1 301989888 196723 301793165 1% /data
none 0 0 0 - /proc/sys/fs/binfmt_misc
/dev/sdc1 26226048 25935058 290990 99% /usr/local/tomcat7/webapps/dsideal_yy/html/down
99%的inode滿了,不能繼續寫入文件。
===========================================================================================
思考方法:
參考別人的文檔:
https://www.landui.com/help/show-9636.html
2T --> 122101760 別人的2T硬盤,一般划分122101760個inode
100T --> 26226048 赤峰的磁盤100T, 划分了 26226048 個 inode,真是醉了~,不提前規划好,這個整不死才怪。
看到有 122101760 個 inodes 吧,一個 inode 占256字節,那么換算成 M 單位是:(122101760 * 256) / (1024 ** 20 = 29810M,差不多 30G 啊!
#查看文件個數
cd /usr/local/tomcat7/webapps/dsideal_yy/html/down/Material
for i in /usr/local/tomcat7/webapps/dsideal_yy/html/down/Material/*; do echo $i; find $i |wc -l; done
for i in /usr/local/tomcat7/webapps/dsideal_yy/html/down/Thumbs/*; do echo $i; find $i |wc -l; done
for i in /usr/local/tomcat7/webapps/dsideal_yy/html/down/Preview/*; do echo $i; find $i |wc -l; done
結果顯示,一個 Material的Hash化后一個子目錄下文件個數約:26287
總計: 256*26287=6729472 約 670W
一個 Preview的Hash化后一個子目錄下文件個數約:41901
總計: 256*41901=10726656 約 1000W
一個 Thumbs的Hash化后一個子目錄下文件個數約:5000
總計: 256*5000=10726656 約 100W
文件總數約為:670W+1000W+100W=1770W
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
學習了一下,inode這個東東是在分區,格式化時指定的,指定后不能修改!!!!!!
[root@localhost ~]# tune2fs -l /dev/sdc1 | grep 'Inode count'
Inode count: 26226048
#Linux創建GPT分區格式化並掛載
https://blog.csdn.net/sinat_38769473/article/details/91366873
#
man 一下 mkfs.ext4,發現有兩個參數可以制定 inode 數量
-i bytes-per-inode:多少個字節一個 inode
-N number-of-inodes:直接制定 inode 數量
默認 16k 一個 inode 相當於
mkfs.ext4 -i 16384 -n /dev/sdc
把這個數字加大了就行了,最好是 1024 的倍數。比如 1M,即 1048576 字節。
mkfs.ext4 -i 1048576 -n /dev/sdc
===========================================================================================
以下是自定義inodes值,其實正常情況是不需要的。
因為60GB分區默認分配400萬個inodes,一個圖片100KB算,400萬個inodes存滿會達到400GB尺寸,已經超過分區本身容量,所以不用特意自定義inodes。
ext4格式最低的bytes-per-inode值為1024 好吧我們根據磁盤大小手動指定Inodes最大數吧
fdisk -l
新的磁盤是/dev/sdb 32g
我們可以看到/dev/sdb 這個盤共有 32212254720 bytes 可用那我們手工計算下他允許的最大的inode數目31457280 好了算出來了我們現在就可以指定Inodes值格盤了
mkfs.ext4 -N 31457280 /dev/sdb
當然你也可以直接用 mkfs.ext4 -i 1024 /dev/sdb mkfs.ext4 -i 2048 /dev/sdb mkfs.ext4 -i 4096 /dev/sdb 這樣來格盤調整Inodes值
掛盤
mount /dev/xvdd /home/1
查看Inodes使用數df -i
好了。。是不是已經千萬級別了。。基本等於無限。。。
注意更多的Inodes值會占用磁盤的容量大約是百分之一。為了獲取更多的可用文件數相信大家也不會在乎那幾百M的磁盤空間吧。好了本次教程到此為止。。血的教訓啊,
吐槽啊ext4 格式下100G的磁盤默認格盤才給了我600w的可用文件數吐血總么可能滿足萬惡的html文件和縮略圖文件的需求呢
https://www.baishitou.cn/1180.html
如何計算出分區支持的最多inodes數量呢?
比如500GB硬盤=524288000kb
524288000個inodes,5億多個。
==========================================================================================
刨根問底:ext3/ext4文件系統最大空間及單個文件大小演算法則
http://blog.sina.com.cn/s/blog_4a2fadfb0102v05o.html
linux 下 ext4最大文件數
https://blog.csdn.net/llq_200/article/details/80493738
比如500GB硬盤=524288000kb
524288000個inodes,5億多個。
CentOS 6下建立GPT分區的方法
1、parted 或 gparted
2、gdisk
使用parted方法
# /usr/sbin/parted -s /dev/sdb mklabel gpt
其中gdisk最簡單,跟fdisk用法幾乎一樣
# gdisk /dev/sdb
跟fdisk一樣,衍生工具還有cgdisk、sgdisk
可以通過epel源來安裝gdisk
# yum install gdisk --enablerepo=epel
2,按提示操作,”? for help“; 3,選“o”---This option deletes all partitions and creates a new protective MBR; 4,選“n”---新建分區; 5,選“1”---分區數為1(生成、dev/sdb1); 6,選“enter”默認---起始終止扇區選擇; 7,選“w”保存---保存退出; 二、格式化硬盤 mkfs -t ext4 /dev/sdb1 (網上推薦ext4,它為ext3的升級版) 三、創建掛載點,掛載 mkdir /home/wd4t (命名:wd的硬盤,4T大小) sudo mount /dev/sdb1 /home/wd4t 若要取消掛載: umount /dev/sdb1 四、開機自動掛載 vi /etc/fstab,添加如下行: /dev/sdb1 /home/wd4t1 ext4 defaults 0 1
查找所有零字節文件
cd /usr/local/tomcat7/webapps/dsideal_yy/html/down find . -name "*" -type f -size 0c
刪除所有零字節文件
https://blog.csdn.net/yellow_a/article/details/48086801