前言
簡單總結上一篇的文件系統,一個文件或目錄的元數據(Meta)都是保存在inode Table表中,我們要訪問一個文件,就需要通過inode找到對應的數據塊位置,然後再找到數據塊讀取。
實例
找到文件 /var/log/msg.txt的內容
- step1:linux文件系統會保存/ 根文件的inode,在inode Table中保存有/ 所在的數據塊
注意目錄項,在上篇講到(可以看目錄項圖),其數據塊可以存放在inode 中,但也有存放指針指向數據塊的位置,這裏都保存在數據塊中 - step2:在存放根 的目錄項中會有 . 的inode編號(根 目錄) 以及根目錄存放的所有目錄inode編號,
這裏找到目錄var的inode編號 - step3:通過var的inode編號,在inode Table中找存放的數據塊位置
- step4:在4號數據塊中有 . 的iNode編號(var 目錄) …的inode編號(根目錄),以及var下的目錄inode編號和文件inodeb編號,找到log的inode編號
- step5:通過log的inode編號,在inode Table中找存放的數據塊6號塊
- step6、step7,可以繼續分析
文件的刪除
找到文件,將目錄中條目項刪除
文件的inode的inode bitmap標爲0
文件佔用的數據塊的block bitmap對應的標爲0
注:不用刪除所在是數據塊。所以剛刪除的內容,也是能恢復的,只要知道其數據塊的位置
文件的複製剪切
複製,複製數據到新的數據塊
ls -i 查看文件的inode號
通過將文件a,複製到test下,會複製a文件到新的數據塊,其inode號也改變
ps:可以將此複製過程,完整的想一遍,從找到文件,然後複製數據塊,然後新建文件
[ubpara link]$ls
a test
[ubpara link]$ls -il
總用量 8
660108 -rw-rw-r-- 1 ubpara ubpara 6 5月 14 19:17 a
660116 drwxrwxr-x 2 ubpara ubpara 4096 5月 14 19:20 test
[ubpara link]$cp a test/a
[ubpara link]$ls -il test/
總用量 4
660117 -rw-rw-r-- 1 ubpara ubpara 6 5月 14 19:20 a
[ubpara link]$
剪切,只是更改inode目錄條項
將a文件剪切(移動)到test目錄下,只修改文件項的內容,依然是原來的數據塊。所以其inode號前後不變,都是660108
[ubpara link]$ls -il
總用量 8
660108 -rw-rw-r-- 1 ubpara ubpara 6 5月 14 19:17 a
660116 drwxrwxr-x 2 ubpara ubpara 4096 5月 14 19:21 test
[ubpara link]$mv a test/
[ubpara link]$ls -il test/
總用量 4
660108 -rw-rw-r-- 1 ubpara ubpara 6 5月 14 19:17 a
[ubpara link]$
總結
- ls -i 可以查看文件的inode號
- 複製是將數據塊的內容進行復制一遍
- 剪切只是修改了文件項中的內容,其數據塊保持不變
將整個過程畫一遍,你就會很清楚整個模塊