inode與block概述

文件數(shù)據(jù)包括元信息與實(shí)際數(shù)據(jù)
文件存儲(chǔ)在硬盤上,硬盤最小存儲(chǔ)單位是“扇區(qū)”,每個(gè)扇區(qū)存儲(chǔ)512字節(jié)
block(塊)連續(xù)的八個(gè)扇區(qū)組成一個(gè)block(一個(gè)塊是4k大小)是文件存取的最小單位。操作系統(tǒng)讀取硬盤的時(shí)候,是一次性連續(xù)讀取多個(gè)扇區(qū),即一個(gè)塊一個(gè)塊的讀取的。
文件數(shù)據(jù)包括實(shí)際數(shù)據(jù)與信元信息(類似文件屬性)。文件數(shù)據(jù)存儲(chǔ)在“塊“中,存儲(chǔ)文件元信息(比如文件的創(chuàng)建者、創(chuàng)建日期、文件大小、文件權(quán)限等)的區(qū)域叫做inode。因此,一個(gè)文件必須占用一個(gè)inode,并且至少占用一個(gè)block。
inode不包含文件名。文件名時(shí)存放在目錄當(dāng)中的,linux系統(tǒng)中一切皆文件,因此目錄也是一種文件。
每個(gè)inode都有一個(gè)號(hào)碼,操作系統(tǒng)用inode號(hào)碼來識(shí)別不同的文件。linux系統(tǒng)內(nèi)部不使用文件名,而使用inode號(hào)碼來識(shí)別文件。對(duì)于系統(tǒng)來說,文件名知識(shí)inode號(hào)碼便于識(shí)別的別稱,文件名和inode號(hào)碼是一一對(duì)應(yīng)關(guān)系,每個(gè)inode號(hào)碼對(duì)應(yīng)一個(gè)文件名。
所以,當(dāng)用戶在linux系統(tǒng)中試圖訪問一個(gè)文件時(shí),系統(tǒng)會(huì)先根據(jù)文件名去查找它對(duì)應(yīng)的inode號(hào)碼:通過inode號(hào)碼,獲取inode信息;根據(jù)inode信息,看該用戶是否具有訪問這個(gè)文件的權(quán)限;如果有,就指向相對(duì)應(yīng)的數(shù)據(jù)block,并讀取數(shù)據(jù),如果無,告知沒有權(quán)限。
inode(索引節(jié)點(diǎn)):中文譯名為“索引節(jié)點(diǎn)”,也叫i節(jié)點(diǎn),用于存儲(chǔ)文件元信息。

inode包含文件的元信息(不包含文件名)

1、文件的字節(jié)數(shù),2、文件擁有者的User ID,3、文件的Group ID,4、文件的讀、寫、執(zhí)行權(quán)限,5、文件的時(shí)間戳。

查看文件名對(duì)應(yīng)的inode號(hào)碼有兩種方式:

ls -i 文件名


stat 文件名
stat查看inode號(hào)的信息時(shí)候有三個(gè)時(shí)間:
atime(accesstime):當(dāng)使用這個(gè)文件的時(shí)候就會(huì)更新這個(gè)時(shí)間
mtime(modification time):當(dāng)修改文件的內(nèi)容數(shù)據(jù)的時(shí)候,就會(huì)更新這個(gè)時(shí)間,而更改權(quán)限或者屬性,mtime不會(huì)改變,這就是和ctime的區(qū)別。
ctime(status time):當(dāng)修改文件的權(quán)限或者屬性的時(shí)候,就會(huì)更新這個(gè)時(shí)間,ctime并不是create time,更像是change time,只有當(dāng)更新文件的屬性或者權(quán)限的時(shí)候才會(huì)更新這個(gè)時(shí)間,但是更改內(nèi)容的話是不會(huì)更新這個(gè)時(shí)間。


inode也會(huì)消耗磁盤空間,所以格式化的時(shí)候,操作系統(tǒng)自動(dòng)將硬盤分成兩個(gè)區(qū)域。一個(gè)是數(shù)據(jù)區(qū),存放文件數(shù)據(jù);另一個(gè)是inode區(qū),存放inode所包含的信息。每個(gè)inode的大小,一般是128字節(jié)或256字節(jié)。
通常情況下不需要關(guān)注這單個(gè)inode的大小,而是需要重點(diǎn)關(guān)注inode總數(shù)。inode的總數(shù)在格式化時(shí)就給定了,執(zhí)行"df -i"命令即可查看每個(gè)硬盤分區(qū)對(duì)應(yīng)的inode總數(shù)和已經(jīng)使用的inode數(shù)量。

由于inode號(hào)碼與文件名 分離,導(dǎo)致linux系統(tǒng)具備以下幾種特有的現(xiàn)象:
1、文件名包含特殊字符,可能無法正常刪除。這時(shí)直接刪除inode,能夠起到刪除文件的作用。
2、移動(dòng)文件或重命名文件,只是改變文件名,不影響inode號(hào)碼;
3、打開一個(gè)文件以后,系統(tǒng)就以inode號(hào)碼來識(shí)別這個(gè)文件,不再考慮文件名。
4、使用 vi 編輯器修改文件數(shù)據(jù)保存后,會(huì)生成一個(gè)新的inode號(hào)碼。

目錄文件的結(jié)構(gòu)

目錄也是一種文件
目錄文件的結(jié)構(gòu)
文件名1inode號(hào)碼1
文件名2inode號(hào)碼2

每個(gè)inode都有一個(gè)號(hào)碼,操作系統(tǒng)用inode號(hào)碼來識(shí)別不同的文件
linux系統(tǒng)內(nèi)部不適用文件名,而使用inode號(hào)碼來識(shí)別文件
對(duì)于用戶,文件名只是inode號(hào)碼便于識(shí)別的別稱


用戶通過文件名打開文件時(shí),系統(tǒng)內(nèi)部的過程
1、系統(tǒng)找到這個(gè)文件名對(duì)應(yīng)的inode號(hào)碼
2、通過inode號(hào)碼,獲取inode信息
3、根據(jù)inode信息,找到文件數(shù)據(jù)所在的block,讀取數(shù)據(jù)


刪除某一個(gè)inode號(hào)的兩種方法
find ./ -inum 52305120 -exec rm -i {} /;
find ./ -inum 52305120 -delete


實(shí)驗(yàn)

實(shí)驗(yàn)一:inode節(jié)點(diǎn)耗盡故障處理

使用fdisk創(chuàng)建分區(qū)/dev/sdb1,分區(qū)大小20M即可
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mkdir /test
mount /dev/sdb1 /test
df -i ==//模擬inode節(jié)點(diǎn)耗盡故障==
for ((i=1; i<=7680; i++)); do touch /test/file$i;done
或者使用 touch {1..7680}.txt
df -i
df -hT
/刪除文件恢復(fù)
rm -rf /text/*









實(shí)驗(yàn)二:恢復(fù)EXT類型的文件

編譯安裝extundelete軟件包
安裝依賴包
yum -y install e2fsprogs-devel e2fprogs-libs ==//一定要安裝這兩個(gè)依賴包==
編譯安裝 extundelete
cd /text
wget http://nchc.dl.sourceforge.net/project/extundelete/0.2.4/extundelet-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=usr/local/extundelete && make && make install
ln -s /usr/local/extundelete/bin/* usr/bin/
echo 1 > a
echo 2 > b
echo 3 > c
echo 4 > d
ls
extundelete /dev/sdc1 --inode 2 ==//查看文件系統(tǒng)/dev/sdc1下存在那些文件,i節(jié)點(diǎn)是從2開始的,2代表該文件系統(tǒng)最開始的目錄。==
rm -rf a b
extundelete /dev/sdc1 --inode 2
cd ~
umount /test
extundelete /dev










實(shí)驗(yàn)三:恢復(fù)XFS類型的文件

xfsdump 命令格式

xfsdump -f 備份存放位置 要備份的路徑或設(shè)備文件
xfsdump 備份級(jí)別(默認(rèn)為0)
0:完全備份
1-9:增量備份

xfsdump 常用選項(xiàng)
-f:指定存儲(chǔ)目的地
-L:指定轉(zhuǎn)儲(chǔ)會(huì)話的標(biāo)簽
-M:為第一個(gè)媒體對(duì)象指定一個(gè)標(biāo)簽(例如,tape car‐tridge) 在會(huì)話期間寫入相應(yīng)的目的地。
-s:將轉(zhuǎn)儲(chǔ)限制為包含在指定路徑名中的文件

模擬刪除并執(zhí)行恢復(fù)操作