Linux的文件系統
壹、indoe與block
1、inode與block概述
- 文件數據包括元信息與實際數據
- 文件存儲在硬盤上,硬盤最小存儲單位是“扇區”,每個扇區存儲512字節
block (塊)
- 連續的八個扇區組成一個block(4K)
- 是文件存取的最小單位
inode (索引節點)
- 中文譯名為“索引節點”,也叫i節點
- 用于存儲文件元信息
//一個文件必須占用一個inode,且至少占用一個block
2、總結:
文件是存儲在硬盤上的,硬盤的最小存儲單位叫做“扇區”(sector) ,每個扇區存儲512字節。
一般連續八個扇區組成一個"塊”(block) ,一個塊是4K大小,是文件存取的最小單位。操作系統讀取硬盤的時候,是一次性連續讀取多個扇區,即一個塊一個塊的讀取的。
文件數據包括實際數據與元信息(類似文件屬性)。文件數據存儲在“塊"中,存儲文件元信息(比如文件的創建者、創建日期、文件大小、文件權限等)的區域就叫做inode因此,一個文件必須占用一個inode, 并且至少占用一個block
inode不包含文件名。文件名是存放在目錄當中的。Linux系統中一切皆文件,因此目錄也是一種文件。
每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。Linux系統內部不使用文件名,而使用inode號碼來識別文件。對于系統來說,文件名只是inode號碼便于識別的別稱,文件名和inode號碼是一一對應關系, 每個inode號碼對應一個文件名。
所以,當用戶在Linux系統中試圖訪問一個文件時,系統會先根據文件名去查找它對應的inode號碼;通過inode號碼, 獲取inode信息;根據inode信息,看該用戶是否具有訪問這個文件的權限;如果有,就指向相對應的數據block,并讀取數據。
貳、inode的內容
1、inode包含文件的元信息
- 文件的字節數
- 文件擁有者的User ID(不包含文件名)
- 文件的Group ID
- 文件的讀、寫、執行權限
- 文件的時間戳
- ... ...
2、Linux系統文件三個主要的時間屬性
- ctime(change time)
- 最后一次改變文件或目錄(屬性)的時間
當修改文件的權限或者屬性的時候,就會更新這個時間,ctime并不是create time,更像是change time,只有當更新文件的屬性或者權限的時候才會更新這個時間,但是更改內容的話是不會更新這個時間。
- atime(access time)
- 最后一次訪問文件或目錄的時間
當使用這個文件的時候就會更新這個時間。
- mtime(modify time)
- 最后一次修改文件或目錄(內容)的時間
當修改文件的內容數據的時候,就會更新這個時間,而更改權限或者屬性,mtime不會改變,這就是和ctime的區別。
3、目錄文件的結果
- 目錄也是一種文件
- 目錄文件的結構:每一行稱為一個目錄項
文件名1 | inode號碼1 |
---|---|
文件名2 | inode號碼2 |
... ... | ... ... |
每一個iode都要一個號碼,操作系統用inode號碼來識別不同文件
- Linux系統內部不使用文件名,而使用inode號碼來識別文件
- 對于用戶,文件名只是inode號碼便于識別的別稱
4、inode的號碼
用戶通過文件名打開文件時,系統內部的過程
1、系統找到這個文件名對應的inode號碼
2、通過inode號碼,獲取inode信息
3、根據inode信息,找到文件數據所在的block,讀出數據
5、查看inode號碼的方法
- ls -i命令:查看文件對應的inode號碼
ls -i 文件名
- stat命令:查看文件inode信息中的inode號碼
stat 文件名
叁、文件存儲小結
1、硬盤分區后的結構
2、訪問文件的簡單流程
肆、inode的大小
inode也會消耗硬盤空間
- 每個inode的大小
- 驗是128字節或256字節
- 格式化文件系統時確定inode的總數
- 使用
df -i
命令可以查看每個硬盤分區的inode總數和已經使用的數量
小結:
inode也會消耗硬盤空間,所以格式化的時候,操作系統自動將硬盤分成兩個區域。
數據區:存放文件數據
inode區:存放inode所包含的信息
每個inode的大小一般是128字節或256個字節
通常情況下不需要關注單個inode大小,而是需要重點關注inode總數。inode的總數在格式化時就給定了,執行"df -i
"命令即可查看每個硬盤分區對應的inode總數和已經使用的inode數量
1、inode的特殊作用
- 由于 inode 號碼與文件名分離,導致Unix/Linux系統具備以下幾種特有的現象:
1.當文件名包含特殊字符,可能無法正常刪除。這時直接刪除inode,能夠起到刪除文件的作用
2.移動文件或重命名文件,只是改變文件名,不影響inode號碼
3.打開一個文件以后,系統就以inode號碼來識別這個文件,不再考慮文件名
4.使用vi編輯器修改文件數據被修改保存后,會生成一個新的inode號碼
找到并且刪除inode號:find ./ -inum inode號 -exec rm -i {} /;find ./ -inum inode號 -delete
伍、硬鏈接與軟鏈接
- [ ] 為文件或目錄建立鏈接文件
- [ ] 鏈接文件分類
軟鏈接(符號鏈接) | 硬鏈接 | |
---|---|---|
刪除原始文件后 | 失效 | 仍舊可用 |
適用范圍 | 適用于文件或目錄 | 只可用于文件 |
保存位置 | 與原始文件可以位于不同的文件系統中 | 必須與原始文件在同一個文件系統(如一個Linux) |
- 硬鏈接
ln 源文件 目標位置
- 軟鏈接
ln -s 源文件或目錄 鏈接文件或目標位置
陸、恢復誤刪除的文件
案例1:inode節點耗盡故障處理
①使用fdisk創建分區/dev/sdb1,分區大小30M即可
②格式化并且掛載,查看inode號的使用情況
③模擬inode節點耗盡故障
④恢復節點數
案例2:恢復EXT類型的文件
- [ ] 編譯安裝extundelete軟件包
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
- 安裝依賴包
- e2fsprogs-libs-1.41.12-18.el6.x86_ 64.rpm
- e2fsprogs-devel-1. 41.12-18.el6.x86_ 64.rpm
配置、編譯及安裝
- extundelete-0.2.4.tar.bz2
- 指定安裝地址:
- . /configure --prefix=/usr/local/extundelete 66 && make && make install
模擬刪除并執行恢復操作:
①首先將原本的磁盤解掛重新格式化成ext3格式
②安裝extundelete前先安裝環境依賴包,然后安裝extundelete軟件
③掛載目錄內創建文件,并賦予內容,然后查看inode號
④刪除創建的新文件,并且解掛載模擬數據丟失
⑤模擬數據丟失后進行恢復操作
案例3:恢復XFS類型的文件
- [ ] xfsdump命令格式
xfsdump -f 備份存放位置 要備份的路徑或設備文件
[ ] xfsdump備份級別
- 0:完全備份(默認為0)
1-9:增量備份
- [ ] xfsdump常用選項
常用選項 | 介紹 |
---|---|
-f | 指定備份文件目錄 |
-L | 指定標簽 session label |
-M | 指定設備標簽 media label |
-s | 備份單個文件,-s 后面不能直接跟路徑 |
- [ ] xfsdump使用限制:
- 只能備份已掛載的文件系統
- 必須使用root的權限才能操作
- 只能備份XFS文件系統
- 備份后的數據只能讓xfssrestore解析
- 不能備份兩個具有相同UUID的文件系統(可用 blkid命令查看)
模擬刪除并執行恢復操作:
①創建新磁盤分區
②格式化分區,掛載后復制實驗內容到掛載目錄,創建目錄和子文件
③安裝xfsdump軟件
④備份整個分區然后查看
⑤模擬故障,并進行恢復