no space left on device

最近遇到一個(gè)Linux機(jī)器上Java程序向/tmp文件夾寫入臨時(shí)文件報(bào)錯(cuò)問題,報(bào)錯(cuò)信息如下:

Caused by: java.nio.file.FileSystemException: /tmp/imageio8208234794343042842.tmp: No space left on device
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.createFile(Files.java:632)
at java.nio.file.TempFileHelper.create(TempFileHelper.java:138)
at java.nio.file.TempFileHelper.createTempFile(TempFileHelper.java:161)
at java.nio.file.Files.createTempFile(Files.java:897)
at javax.imageio.stream.FileCacheImageInputStream.<init>(FileCacheImageInputStream.java:102)
at com.sun.imageio.spi.InputStreamImageInputStreamSpi.createInputStreamInstance(InputStreamImageInputStreamSpi.java:69)
at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:357)
... 41 more

從報(bào)錯(cuò)信息/tmp/imageio8208234794343042842.tmp: No space left on device字面意思來看應(yīng)該是磁盤空間不足,于是我們通過du -f查看了一下啊磁盤空間的占用情況:

[root@iZ23yaz766kZ ~]# df -h                                                                                                                                                                                                    
Filesystem      Size  Used Avail Use% Mounted on                                                                                                                                                                                
/dev/xvda1       40G   24G   14G  63% /                                                                                                                                                                                         
tmpfs           7.8G     0  7.8G   0% /dev/shm                                                                                                                                                                                  
/dev/xvdb1       40G   25G   13G  67% /alidata1

從輸出信息可以看出磁盤空間并沒有滿,還有很多的富裕,而且我們磁盤的空間的使用率是有監(jiān)控的,一旦超過閾值就會(huì)發(fā)送報(bào)警信息,但是我們并沒有收到相應(yīng)的報(bào)警信息,所以可以推斷出不是磁盤空間不足的問題,那到底是什么問題導(dǎo)致報(bào)錯(cuò)呢?

通過查詢資料了解到,除了磁盤空間可能導(dǎo)致無法寫入文件外,還有磁盤的inode數(shù)量也會(huì)影響文件的寫入,當(dāng)inode數(shù)量不足時(shí),也會(huì)導(dǎo)致無法寫入文件,于是通過df -i查看了一下inode的數(shù)量:

[root@iZ23yaz766kZ ~]# df -i                                                                                                                                                                                                    
Filesystem      Inodes   IUsed   IFree IUse% Mounted on                                                                                                                                                                         
/dev/xvda1     2621440 2581440  40000   99% /                                                                                                                                                                                  
tmpfs          2041364       1 2041363    1% /dev/shm                                                                                                                                                                           
/dev/xvdb1     2621440  230217 2391223    9% /alidata1

從輸出可以看到inode使用的數(shù)量占到了99%,幾乎滿了,從而我們我們推斷很可能是當(dāng)時(shí)的inode數(shù)量不足導(dǎo)致無法向/tmp寫入文件。

解決inode數(shù)量不足的方法有兩種

  1. 清理inode占用過高的文件和目錄

    通過for i in /*; do echo $i; find $i | wc -l; done統(tǒng)計(jì)了一下每個(gè)文件夾下的inode數(shù)量,找到了占用數(shù)量比較多的文件夾,然后,逐層進(jìn)入inode占用最高的目錄,繼續(xù)執(zhí)行上述指令,逐步定位占用過高空間的文件或目錄,最后進(jìn)行相應(yīng)清理。

  2. 修改inode的數(shù)量,這種方法需要重新格式化磁盤。具體方法如下:

    1. 執(zhí)行如下命令,卸載系統(tǒng)文件。

      umount /home
      
    2. 執(zhí)行如下命令,重新建立文件系統(tǒng),指定inode節(jié)點(diǎn)數(shù)。

      mkfs.ext3 /dev/xvdb -N 1638400
      
    3. 執(zhí)行如下命令,修改fstab文件。

      vim /etc/fstab
      
    4. 執(zhí)行如下命令,查看修改后的inode節(jié)點(diǎn)數(shù)。

      dumpe2fs -h /dev/xvdb | grep node
      

我們通過第一種方法清理了一下占用inode數(shù)量比較多的文件解決了該問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容