一、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