inode與block概述
文件數(shù)據(jù)包括元信息與實(shí)際數(shù)據(jù)
文件存儲在硬盤上,硬盤最小存儲單位是“扇區(qū)”,每個扇區(qū)存儲512字節(jié)
block(塊)連續(xù)的八個扇區(qū)組成一個block(一個塊是4k大小)是文件存取的最小單位。操作系統(tǒng)讀取硬盤的時候,是一次性連續(xù)讀取多個扇區(qū),即一個塊一個塊的讀取的。
文件數(shù)據(jù)包括實(shí)際數(shù)據(jù)與信元信息(類似文件屬性)。文件數(shù)據(jù)存儲在“塊“中,存儲文件元信息(比如文件的創(chuàng)建者、創(chuàng)建日期、文件大小、文件權(quán)限等)的區(qū)域叫做inode。因此,一個文件必須占用一個inode,并且至少占用一個block。
inode不包含文件名。文件名時存放在目錄當(dāng)中的,linux系統(tǒng)中一切皆文件,因此目錄也是一種文件。
每個inode都有一個號碼,操作系統(tǒng)用inode號碼來識別不同的文件。linux系統(tǒng)內(nèi)部不使用文件名,而使用inode號碼來識別文件。對于系統(tǒng)來說,文件名知識inode號碼便于識別的別稱,文件名和inode號碼是一一對應(yīng)關(guān)系,每個inode號碼對應(yīng)一個文件名。
所以,當(dāng)用戶在linux系統(tǒng)中試圖訪問一個文件時,系統(tǒng)會先根據(jù)文件名去查找它對應(yīng)的inode號碼:通過inode號碼,獲取inode信息;根據(jù)inode信息,看該用戶是否具有訪問這個文件的權(quán)限;如果有,就指向相對應(yīng)的數(shù)據(jù)block,并讀取數(shù)據(jù),如果無,告知沒有權(quán)限。
inode(索引節(jié)點(diǎn)):中文譯名為“索引節(jié)點(diǎn)”,也叫i節(jié)點(diǎn),用于存儲文件元信息。
inode包含文件的元信息(不包含文件名)
1、文件的字節(jié)數(shù),2、文件擁有者的User ID,3、文件的Group ID,4、文件的讀、寫、執(zhí)行權(quán)限,5、文件的時間戳。
查看文件名對應(yīng)的inode號碼有兩種方式:
ls -i 文件名
stat 文件名
stat查看inode號的信息時候有三個時間:
atime(accesstime):當(dāng)使用這個文件的時候就會更新這個時間
mtime(modification time):當(dāng)修改文件的內(nèi)容數(shù)據(jù)的時候,就會更新這個時間,而更改權(quán)限或者屬性,mtime不會改變,這就是和ctime的區(qū)別。
ctime(status time):當(dāng)修改文件的權(quán)限或者屬性的時候,就會更新這個時間,ctime并不是create time,更像是change time,只有當(dāng)更新文件的屬性或者權(quán)限的時候才會更新這個時間,但是更改內(nèi)容的話是不會更新這個時間。
inode也會消耗磁盤空間,所以格式化的時候,操作系統(tǒng)自動將硬盤分成兩個區(qū)域。一個是數(shù)據(jù)區(qū),存放文件數(shù)據(jù);另一個是inode區(qū),存放inode所包含的信息。每個inode的大小,一般是128字節(jié)或256字節(jié)。
通常情況下不需要關(guān)注這單個inode的大小,而是需要重點(diǎn)關(guān)注inode總數(shù)。inode的總數(shù)在格式化時就給定了,執(zhí)行"df -i"命令即可查看每個硬盤分區(qū)對應(yīng)的inode總數(shù)和已經(jīng)使用的inode數(shù)量。
由于inode號碼與文件名 分離,導(dǎo)致linux系統(tǒng)具備以下幾種特有的現(xiàn)象:
1、文件名包含特殊字符,可能無法正常刪除。這時直接刪除inode,能夠起到刪除文件的作用。
2、移動文件或重命名文件,只是改變文件名,不影響inode號碼;
3、打開一個文件以后,系統(tǒng)就以inode號碼來識別這個文件,不再考慮文件名。
4、使用 vi 編輯器修改文件數(shù)據(jù)保存后,會生成一個新的inode號碼。
目錄文件的結(jié)構(gòu)
目錄也是一種文件 目錄文件的結(jié)構(gòu) | 文件名1 | inode號碼1 |
---|---|---|
文件名2 | inode號碼2 |
每個inode都有一個號碼,操作系統(tǒng)用inode號碼來識別不同的文件
linux系統(tǒng)內(nèi)部不適用文件名,而使用inode號碼來識別文件
對于用戶,文件名只是inode號碼便于識別的別稱
用戶通過文件名打開文件時,系統(tǒng)內(nèi)部的過程
1、系統(tǒng)找到這個文件名對應(yīng)的inode號碼
2、通過inode號碼,獲取inode信息
3、根據(jù)inode信息,找到文件數(shù)據(jù)所在的block,讀取數(shù)據(jù)
刪除某一個inode號的兩種方法
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 ==//一定要安裝這兩個依賴包==
編譯安裝 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 備份級別(默認(rèn)為0)
0:完全備份
1-9:增量備份
xfsdump 常用選項(xiàng)
-f:指定存儲目的地
-L:指定轉(zhuǎn)儲會話的標(biāo)簽
-M:為第一個媒體對象指定一個標(biāo)簽(例如,tape car‐tridge) 在會話期間寫入相應(yīng)的目的地。
-s:將轉(zhuǎn)儲限制為包含在指定路徑名中的文件