Linux中磁盤還有空間,但創建文件時提示空間不足


  首先需要知道創建文件時,需要滿足兩個條件:1、磁盤上還有空間;2、inode號還有剩余。

  這兩個條件可以分別使用"df -h"以及"df -i"查看使用情況

[xf@xuexi ~]$ df -h
文件系統        容量  已用  可用 已用% 掛載點
/dev/sda2        10G  4.7G  5.4G   47% /
devtmpfs        975M     0  975M    0% /dev
tmpfs           991M     0  991M    0% /dev/shm
tmpfs           991M   11M  980M    2% /run
tmpfs           991M     0  991M    0% /sys/fs/cgroup
/dev/sr0        4.2G  4.2G     0  100% /mnt
/dev/sda1       197M  179M   19M   91% /boot
tmpfs           199M  8.0K  199M    1% /run/user/42
tmpfs           199M   28K  199M    1% /run/user/1000
[xf@xuexi ~]$ df -i
文件系統         Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/sda2      5242880  168213 5074667       4% /
devtmpfs        249532     410  249122       1% /dev
tmpfs           253514       1  253513       1% /dev/shm
tmpfs           253514     956  252558       1% /run
tmpfs           253514      16  253498       1% /sys/fs/cgroup
/dev/sr0             0       0       0        - /mnt
/dev/sda1        38176     347   37829       1% /boot
tmpfs           253514       7  253507       1% /run/user/42
tmpfs           253514      18  253496       1% /run/user/1000

  如果所在的分區inode滿了,可以將一些沒用的文件或目錄刪除,釋放inode號。也可以將部分文件備份到一個新分區,然后刪除這些文件,釋放inode號,再將備份分區掛載到原來的位置。(軟鏈接也可以是試試)例如:/data/cache占用了大量的inode號。那么我可以添加一個新的空分區/dev/sdb1,格式化,掛載。然后將/data/cache下文件備份到/dev/sdb1分區下,接着再刪除原位置的文件。最后我們卸載分區,重新掛載到/data/cache下。(沒有驗證,僅供參考)

  inode號在xfs文件系統前(ext4/ext3/ext2)都是在格式化之前就定下來的,例如ext4文件系統使用命令mkfs.ext4中的-N選項設置數量 。但是我們來到xfs文件系統時,mkfs。xfs沒有-N這個選項,不用擔心,這時使用-i maxpct=n來調整inode區占整個分區的比例(默認n=25,即占用25%的空間大小)。而且似乎可以使用命令xfs_growfs在不重新格式化分區就可以增加inode區占整個分區的比例,從而增加inode總數。

   下面我來使用xfs_growfs命令,舉一個例子:

[root@xuexi ~]# mount /dev/sdb1 /sdb1  //掛載一個分區
[root@xuexi ~]# df -i /sdb1  //看一下inode號
文件系統        Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/sdb1      524288       3  524285       1% /sdb1
[root@xuexi ~]# touch /sdb1/File  //在里面創建一個測試文檔
[root@xuexi ~]# echo aaaaa >> /sdb1/File
[root@xuexi ~]# cat /sdb1/File 
aaaaa
[root@xuexi ~]# xfs_growfs -m 30 /dev/sdb1  //擴展inode占整個磁盤的容量
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
inode max percent changed from 25 to 30
[root@xuexi ~]# df -i /dev/sdb1  //可以發現inode總量增加
文件系統        Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/sdb1      629144       4  629140       1% /sdb1
[root@xuexi ~]# ls /sdb1/  //並且測試文檔沒有損壞
File
[root@xuexi ~]# cat /sdb1/File
aaaaa

   我的/dev/sdb1分配大小為1G(df -h /dev/sdb1查看時顯示的是1014M),此時inode區占比25%,inode單個大小為512字節,那么inode的數量就是1024M*1024K/M*1024B/K*25%/512B,算下來就是第一次顯示的524288。然后我調整了inode區占比到30%,inode單個大小別改還是512字節,那么此時的inode數量應該是1024M*1024K/M*1024B/K*30%/512B,算下來629145.6(NMD,WSM),居然差了1個,不過影響不大。注意:在增加inode占比時需要注意有沒有空間啊,別沒有空間了還在死命加inode區。在加inode區前請計算一下空間啊

  在格式化是更改我就寫一條命令了'mkfs.xfs -i size=num,maxpct=n /dev/sdb1'。-i選項代表我要對inode動手了,size設置一個inode大小,maxpct設置iNode區占比。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM