【過關斬將3】磁盤有空間但無法創建文件


大家好,我是高勝寒,本文是過關斬將系列的第3篇文章, 也是循序漸進學運維繫列的第50篇文章。

面試原題

我們去面試的時候,面試官通常會問一個問題: “小夥子,你在這些年的工作中,遇到過什麼棘手的問題沒有?”

面試題剖析

面試官問這個問題,無非想知道以下幾件事情:

  1. 你有沒有過處理疑難問題的經驗
  2. 你解決問題的思路和能力如何
  3. 你是怎麼解決的
  4. 你解決完這個問題有哪些收穫

面試錯誤示範

面對這樣的問題,很多小夥伴手無足措,甚至回答出了讓面試官啼笑皆非的答案,我們來看看小王的經歷。

面試官: 你遇到過什麼棘手的問題?
小王: 遇到過一次宕機事故,數據庫宕機。
面試官: 宕機多久?
小王: 兩三天吧
面試官: 這麼長時間,那你是怎麼解決的?
小王: 我當時剛到公司,就在旁邊看老員工做。
面試官: 那你還記得老員工是怎麼解決的嗎?
小王: 時間太久了,忘了。

在這裏插入圖片描述

面試者啥也不會的能力,淋漓盡致的展現了出來,讓面試官吐血而亡。

(正經臉)爲了解決啥也不會的尷尬,我們今天來聊聊磁盤有空間但是無法創建文件的處理方案。

問題再現

問題出現: 小王今天要往磁盤裏創建內檢,發現系統提示磁盤不足,使用df -h查看了一下磁盤的使用情況,發現磁盤只使用了90%,還有3G的剩餘空間,但是無法創建文件。

小王的排查思路

小王查看了一下自己使用的用戶是root,之前備份的md5值也沒有任何的告警,可以確認服務器沒有被黑。

小王又使用df -h 命令查看下磁盤的可用空間
[root@gaosh-1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 18G 1.9G 90% /
tmpfs 1.8G 228K 1.8G 1% /dev/shm

小王判斷: 既然有空間,而且自己也有權限,一定是可以創建文件的,小王突然想起了inode節點問題,是不是inode號不夠了。

畢竟我們創建的任何一個文件都需要消耗一個inode號,我們找個正常機器來測試下inode,看看是不是創建文件的時候消耗inode 號

查看inode號的使用情況

可以看到現在的inode -free 有1177557
在這裏插入圖片描述
可以看到inode消耗了兩個,一個文件消耗一個。

想起了這個原理之後,小王查看了一下自己的/data目錄的索引節點,發現inode已經使用百分比了

# df -i  
文件系統         Inode     已用(I)     可用(I)         已用(I)%   掛載點
/data           5242880   5242880    0              100%        /

查找原因:

小王通過排查,發現/data/cache目錄中存在數量非常多的小字節緩存文件,佔用的Block不多,但是佔用了大量的inode。

解決方案:

解決方案1:刪除/data/cache目錄中的部分文件,釋放出/data分區的一部分inode。
解決方案2 : 在/data備份好一些文件,然後刪除這些文件,釋放一些inode。然後創建一個文件夾/data/cache2。將/data/cache2 掛載到另外一塊硬盤上去,下次寫數據就直接寫在/data/cache2,事實上就相當於寫在第二塊硬盤上了。

提問環節

磁盤分完區之後,inode號還可以增加嗎?

答: 不可以, inode的總數是在格式化的時候就固定下來的。

融會貫通

接下來,我們看看,面試遇到面試官問,小夥子,你遇到的最棘手的問題是啥啊,你試着把本文的內容變成你的,講述給面試官。

小王: 好的,面試官,說到棘手的問題的話,我在上家公司有遇到這麼一個問題,有一次一個開發找我請教,說他的磁盤還有空間,但是無法創建文件。

我查看了一下,當時開發的測試目錄剩餘空間還有兩個G,創建文件自然是綽綽有餘的,而且開發用的用戶也有在此目錄創建文件的權限。

我試着創建了一下也是不成功, 要創建文件必須滿足兩個條件,一個是要有足夠的磁盤空間,另一個是要有足夠的inode號,既然磁盤空間還有,就有可能是inode號不足導致的

我使用 df -i 查看了一下,發現開發這臺測試機上的inode號已經耗盡了,我詢問了一下開發,目錄下都是存的什麼問題, 開發反饋說是小圖片。

那麼真相就浮出水面了,每個小文件佔用一個inode號,但是一個小圖片佔用的空間可能沒有達到block的大小,但是佔用了一個inode,長久積累下來就變成了 空間還有,但inode號耗盡的情況。

於是讓開發確認了一下哪些是不需要的空間,予以刪除,釋放空間,同時創建了 data2目錄掛載到了一塊新硬盤上,擴充了空間。這樣問題就解決了。

總結:

關於棘手問題,再來回顧下遇到這個問題的回答思路:

  1. 問題產生時候的情景再現
  2. 闡述分析問題的過程
  3. 闡述解決問題的思路
  4. 闡述如何解決的
  5. 通過這次棘手問題,你學到了哪些,或者你做了哪些措施來確保後期不再復現。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章