天天看點

inode節點與檔案恢複

一、inode和block

1.塊→block

硬碟劃分為磁頭(Heads)、柱面(Cylinder)、扇區(Sector)。
磁頭(Heads):每張磁片的正反兩面各有一個磁頭,一個磁頭對應一張磁片的一個面。是以,用第幾磁頭就可以
                            表示資料在哪個磁面。
柱面(Cylinder):所有磁片中半徑相同的同心磁道構成“柱面",意思是這一系列的磁道垂直疊在一起,就形成一
                          個柱面的形狀。簡單地了解,柱面就是磁道。
扇區(Sector):将磁道劃分為若幹個小的區段,就是扇區。雖然很小,但實際是一個扇子的形狀,故稱為扇區。
                          每個扇區的容量為512位元組,是硬碟最小的存儲機關。
塊(Block)是系統讀取機關,一個塊大小為4KB,由8個扇區組成           

存儲容量=磁頭數×柱面數×扇區數×每扇區位元組數

2.元資訊→inode(一個檔案/目錄占用一個)

注:當磁盤有剩餘空間,但inode用盡時,不能存儲任何内容

inode内容

(1)檔案大小
(2)檔案所有者
(3)檔案所有組
(4)檔案權限
(5)檔案建立時間           

檢視inode

stat 檔案         //檢視指定檔案的inode資訊;ls -i 檔案也可簡單檢視檔案對應inode号
df -i               //檢視硬碟所有的inode号,已使用inode等資訊
ls -i 檔案 //檢視指定檔案的inode号
ls -id 目錄  //檢視指定目錄的inode号
dumpe2fs -h 分區 | grep  -i "Inode size"  //檢視指定磁盤分區inode号占用大小           

find / -type f -empty //搜尋系統中所有為空的檔案

資料讀取流程

(1)系統通過檔案找到inode号
(2)通過inode,尋找inode資訊
(3)根據inode資訊,找到檔案所對應的block位置,讀取資料           

注:一個檔案的inode号一般不用更改,隻有當删除檔案時會釋放

i節點耗盡

df -i               //檢視硬碟IFree的inode剩餘情況
rm -rf 檔案           //删除硬碟下檔案,會自動釋放inode号           

案例:測試i節點耗盡

(1)新增1G硬碟分區并挂載

fdisk /dev/sdb --> n --> p --> 1 --> 回車 --> 回車 --> w
mkfs -t ext4 /dev/sdb1
mkdir /data
mount /dev/sdb1 /data/           

(2)模拟故障

df -i /dev/sdb1
touch /data/{1..65269}           

(3)測試

touch /data/ab      //報錯,磁盤空間不足
rm -rf /data/1
touch /data/ab      //可正常建立
touch /data/ac      //報錯           

二、硬連結與軟連結

1.硬連結

ln 源檔案 目标檔案           

特點:

a.對其中一個内容修改,其餘全部同步
b.當删除其中一個檔案時,不影響其餘檔案
c.連結的大小為源檔案大小
d.隻支援連結檔案           

2.軟連結

ln -s 源檔案 目标檔案           
a.對其中一個内容修改,其餘全部同步
b.當删除源檔案/目錄時,目标檔案/目錄不能使用
c.目标/檔案不占用空間
d.可連結檔案/目錄           

三、案例:恢複誤删除檔案,恢複誤删除分區

1.安裝依賴包

yum -y install e2fsprogs-*           

2.上傳extundelete軟體包,并編譯安裝

tar -jxvf extundelete-0.2.4.tar.bz2
cd ~/extundelete-0.2.4/
./configure --prefix=/usr/local/ex && make && make install
cd /usr/local/ex/bin           

3.使用

touch /data/11111
mkdir /data/aa/
rm -rf /data/11111          //删除檔案,測試
./extundelete /dev/sdb1 --restore-all   //恢複磁盤被删除内容
ls RECOVERED_FILES/     //檢視恢複目錄下是否有恢複完成的檔案
./extundelete /dev/sdb1 --restore-file=11111        //隻恢複名為11111的檔案
./extundelete /dev/sdb1 --restore-inode=12      //隻恢複inode為12的檔案
./extundelete /dev/sdb1 --restore-directory=aa      //隻恢複aa目錄及其下所有檔案内容
./extundelete /dev/sdb1 --inode=2           //檢視/dev/sdb1所有被誤删除的檔案名及inode号           

4.testdisk恢複分區表

tar -jxvf testdisk-7.1-WIP.linux26-x86_64.tar.bz2   //解壓testdisk軟體包
mv testdisk-7.1-WIP /data/     //移動到别的硬碟中
dd if=/dev/zero of=/dev/sda bs=512 count=1    //模拟磁盤MBR引導損壞
reboot    //重新開機,無法進入系統           
mkdir /a && mount /dev/sdb1 /a      //建立目錄/a,并挂載磁盤/dev/sdb1到/a
/a/testdisk-7.1-WIP/testdisk_static /dev/sda --> Proceed(選擇需恢複的磁盤)-->intel(選擇磁盤分區類型)-->Analyse(分析磁盤分區情況)-->Write(回車,将搜尋到的分區表寫入到磁盤中)-->y-->quit
chroot /mnt/sysimage   //進入原系統環境
grub-install /dev/sda           //重新安裝grub引導程式
reboot           

繼續閱讀