1、磁盤的inode空間, block空間
//inode空間
也叫文件元信息空間,文件的元信息空間裏面包含了i節點號就是文件索引條目的編號,固然元信息裏面還包含了文件名,文件的權限,時間戳,文件內容塊大小開始結束的位置),一個文件必須佔據一個inode元信息空間
//block空間
硬盤最小的存儲空間是扇區,一個扇區是512個字節,即爲512B,可是硬盤通常須要創建分區,劃分block塊大小,數量,硬盤內置驅動讀取文件內容是在分區裏面按block塊讀的,按扇區來讀太慢了,硬盤讀寫文件都是塊大小塊大小的讀寫,因此硬盤分區的好處就是提高文件讀取速度還方便概括整理
//indoe、blcok聯繫
硬盤中不止有block空間存儲文件內容,還有inode空間存儲文件元信息,硬盤驅動就是先讀取inode空間裏面文件的元信息(記錄文件內容從哪一個block編號開始到哪一個block編號結束)而後再去讀取保存在block空間中的文件具體內容,indoe空間中記錄的文件元信息爲硬盤去找這個文件內容提供了一個索引路徑,簡單理解爲索引空間是保存硬盤中全部文件名的一個列表,每一個文件在inode中有了這個文件名記錄索引才能去block中找到文件內容,這個文件佔用空間從哪一個block到那個block,文件權限,修改信息,因此咱們常說的rm -rf刪除通常是刪除這個文件的元信息,內容還在真真實實寫在磁盤裏,這就是硬盤數據恢復的原理,同時硬盤內容大小空間(block空間)能被佔滿,索引空間也是能被佔滿的,一個硬盤能記錄的索引數目是有上限的,因此就有i節點號,好比硬盤inode空間最多支持記錄10萬個文件的元信息,我就建10萬個空文件,空文件的元信息把硬盤inode空間佔滿,因此即便你的硬盤block空間還很充足,你也沒有辦法往硬盤裏面寫東西了。每一個文件的i節點號文件元信息在indoe空間裏的編號,文件元信息的大小就記錄了幾個信息,因此每一個文件內容大小可能不同,可是文件元信息在indole空間裏面大小都是基本同樣的。
//磁盤分區的格式化
分區的格式化就是分完區我仍是個小白,格式化就是給小白定規則,按照必定文件格式給磁盤分區定義分區block塊的大小,4kb仍是8kb,定義block數量的多少,因此纔有mkfs.xfs,mkfs.etx4這些xfs、ext4文件系統,能夠簡單理解爲定義分區block數量大小的文件系統,塊大小是能夠設置的,xfs、ext4等都有本身默認的塊大小,好比對於一個分區咱們都是存放一些大文件,那麼塊大小越大越好,讀取塊數少,若是分區都是一些小文件,那麼塊大小小一點好,由於在分區裏blocksize是最小的儲存單位,塊大小小會節約分區的空間,具體設置塊大小取決於你對速度和空間的平衡。
注意格式化分區文件系統的時候,對indoe空間和indoe索引數量(文件元信息數量條目)也在定義規則,用df -i能夠查看每一個分區的i節點數量也就是最多記錄個多少個文件
node
2、i節點耗盡演示
//原理:利用腳本建不少空文件或者隨機函數建隨機大小的文件把磁盤indoe空間充滿,也就是i節點充滿,致使磁盤沒法正常進行寫入新文件bash
空文件i節點耗盡演示
#!/bin/bash(註釋一下腳本執行程序)
echo "當前系統分區狀況以下:"
df -i
echo
(到這裏就是把df -i的結果顯示在屏幕上)
read -p "請輸入要搞定的分區:" f
(read -p 從輸入獲取變量值 -p表明不換行)
n=$(df -i | grep "$f" | awk '{print $4}')
這個f是你輸入的分區,是個變量,$表示引用這個變量,df - i | grep "$f" 假如這個f是sda3 那麼在下面就篩選出sda3那一行
ide
awk ‘{print $4}'表示打印出當前顯示文本的第四列,那麼能夠看出這個n值就是一個分區的可用i節點
p=$(df -i | grep "$f" | awk '{print $6}')
這個p值就是分區的掛載目錄函數
到這裏就知道一個分區的掛載點p和可用i節點數n
設置條件循環語句往這個p裏面一直寫文件直到n中止
i=1
while [ $i -le $n ]
do
while條件循環語句設置一個變量i從1開始,每次都和n比較,小於n就do
touch $p/${RANDOM}$i
在同名掛載點p目錄下創建一個名字叫${RANDOM}$i的空文件,這個文件名編號前半部分編號是用${RANDOM}隨機函數隨機產生的,這樣讓文件名具備隨機性,怎麼確保文件編號是一個一個按i值順序來的,i值也依序用上,就在文件名後半部分編號引用i值,$符號表示引用變量函數
let i+1 一直按順序+1創建
done
結論:touch建的後果都是空文件很容易被發現。find /sdb1 -size 0K -exec rm -rf {} \;能夠找到分區掛載點下的空文件3d
//非空文件i節點耗盡演示
code
dd if=/dev/zero of=$p/${RANDOM}$i bs=1K count=$((${RANDOM%6}))
每次都建不一樣大小的文件,這樣基本就把這個磁盤幹費了,管理員並不知道哪些文件有用哪些沒用,隨機數字的選擇能夠算一下,保證「隨機文件最大空間*
可用i節點數<可用blcok空間」才能起到i節點驗證做用。
//實驗演示
blog
sh .a.sh :執行腳本索引