1. 程式人生 > >inode節點與文件恢復

inode節點與文件恢復

找到 pty sda 磁盤 半徑 fdisk tun 塊大小 std

一、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.可鏈接文件/目錄

三、案例:恢復誤刪除文件,恢復誤刪除分區


針對ext4文件系統(debugfs、ext3grep、extundelete);testdisk可恢復分區表

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

inode節點與文件恢復