大家好,我是高勝寒,本文是過關斬將系列的第3篇文章, 也是循序漸進學運維繫列的第50篇文章。
面試原題
我們去面試的時候,面試官通常會問一個問題: “小夥子,你在這些年的工作中,遇到過什麼棘手的問題沒有?”
面試題剖析
面試官問這個問題,無非想知道以下幾件事情:
- 你有沒有過處理疑難問題的經驗
- 你解決問題的思路和能力如何
- 你是怎麼解決的
- 你解決完這個問題有哪些收穫
面試錯誤示範
面對這樣的問題,很多小夥伴手無足措,甚至回答出了讓面試官啼笑皆非的答案,我們來看看小王的經歷。
面試官: 你遇到過什麼棘手的問題?
小王: 遇到過一次宕機事故,數據庫宕機。
面試官: 宕機多久?
小王: 兩三天吧
面試官: 這麼長時間,那你是怎麼解決的?
小王: 我當時剛到公司,就在旁邊看老員工做。
面試官: 那你還記得老員工是怎麼解決的嗎?
小王: 時間太久了,忘了。
面試者啥也不會的能力,淋漓盡致的展現了出來,讓面試官吐血而亡。
(正經臉)爲了解決啥也不會的尷尬,我們今天來聊聊磁盤有空間但是無法創建文件的處理方案。
問題再現
問題出現: 小王今天要往磁盤裏創建內檢,發現系統提示磁盤不足,使用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 -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目錄掛載到了一塊新硬盤上,擴充了空間。這樣問題就解決了。
總結:
關於棘手問題,再來回顧下遇到這個問題的回答思路:
- 問題產生時候的情景再現
- 闡述分析問題的過程
- 闡述解決問題的思路
- 闡述如何解決的
- 通過這次棘手問題,你學到了哪些,或者你做了哪些措施來確保後期不再復現。