導圖 1.inode表結構 每個文件的屬性信息,比如:文件的大小,時間,類型,許可權等,稱為文件的元數據(meta data) 元數據是存放在inode(index node)表中。inode 表中有很多條記錄組成,第一條記錄對應的存放了一個 文件的元數據信息。 1.1硬鏈接和軟連接 硬連接 同一個文 ...
導圖
1.inode表結構
元數據是存放在inode(index node)表中。inode 表中有很多條記錄組成,第一條記錄對應的存放了一個
1.1硬鏈接和軟連接
軟連接 類似於windows里快捷方式,軟連接,符號連接
- 文件的類型
- 文件的許可權
- UID
- GID
- 鏈接數(指向這個文件名路徑名稱個數)
- 該文件的大小和不同的時間戳
- 指向磁碟上文件的數據塊指針
查看inode號 [root@localhost data]# ls 123 1.txt 2.txt 3.txt 4.txt 5.txt data1 data2 [root@localhost data]# ls -i //方法1 35802872 123 35802838 1.txt 35802839 2.txt 35802840 3.txt 35802841 4.txt 35802842 5.txt 2420054 data1 35802875 data2 [root@localhost data]# stat /data/1.txt //方法2 文件:"/data/1.txt" 大小:0 塊:0 IO 塊:4096 普通空文件 設備:fd00h/64768d Inode:35802838 硬鏈接:1 許可權:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 環境:unconfined_u:object_r:default_t:s0 最近訪問:2022-10-12 18:52:31.654822781 +0800 最近更改:2022-10-12 18:52:31.654822781 +0800 最近改動:2022-10-12 18:52:31.654822781 +0800 創建時間:- 3個時間戳: 最近訪問atime:最後一次差看文件 最近更改mtime:最近更改文件內容的時間,註意:更改完內容之後,ctime也會改變 最近改動ctime:最近更改文件元信息的時間,比如改變許可權等
1.3用戶訪問文件的原理/過程:
- 用戶訪問文件時 先去查找 自己 文件夾中的目錄項 ,
- 文件名和inode之間對應的關係,
- 通過 inode號利用指針(直接指針/間接指針)去指向 實際數據
直接指針:直接指向數據塊
間接指針:不直接指向數據塊,要經過中間數據塊,最後指向數據塊
圖解:
1.4補充:文件相關
-
文件是存儲在硬碟上的,硬碟的最小存儲單位叫做“扇區”(sector),每個扇區存儲512位元組。
-
一般連續八個扇區組成一個"塊”(block),一個塊是4K大小,是文件存取的最小單位。操作系統讀取硬碟的時候,是一次性連續讀取多個扇區,即一個塊一個塊的讀取的。
-
文件數據包括實際數據與元信息(類似文件屬性)。文件數據存儲在“塊"中,存儲文件元信息(比如文件的創建者、創建日期、文件大小、文件許可權等)的區域就叫做inode表。 因此,一個文件必須占用一個inode,並且至少占用一個block。
-
inode不包含文件名。文件名是存放在目錄文件夾當中的。Linux 系統中一切皆文件,因此目錄也是一種文件。
-
每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來說,文件名只是inode號碼便於識別的別稱,文件名和inode號碼是一一對應關係,每個inode號碼對應一個或多個文件名。
唯一 同一文件系統() 不同的文件
-
所以,當用戶在Linux系統中試圖訪問一個文件時,系統會先根據文件名去查找它對應的inode號碼:通過inode號碼,獲取inode信息;根據inode信息,看該用戶是否具有訪問這個文件的許可權;如果有,就指向相對應的數據block,並讀取數據。
tops:
硬碟上最小的存儲單位為扇區(512位元組)
-
-
owner info:所有者
-
size:大小
-
inode號與命令cp,rm,mv的關係:
cp 命令:
-
分配一個空閑的inode號,在inode表中生成新條目
-
在目錄中創建一個目錄項,將名稱與inode編號關聯
-
拷貝數據生成新的文件
rm 命令:
-
硬鏈接數遞減,從而釋放的inode號可以被重用
-
把數據塊放在空閑列表中
-
刪除目錄項
-
數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋
mv 命令:
- 如果mv命令的目標和源在同一設備,不影響inode表(除時間戳)或磁碟上的數據位置:沒有數據被移動!
#可以通過inode號來刪除指定文件 [root@localhost data]# ls -i 35802872 123 35802838 1.txt 35802839 2.txt 35802840 3.txt 35802841 4.txt 35802842 5.txt 2420054 data1 35802875 data2 [root@localhost data]# find -inum 35802872 -delete //命令1 [root@localhost data]# find -inum 35802872 -exec rm {} /; //命令2 [root@localhost data]# ls 1.txt 2.txt 3.txt 4.txt 5.txt data1 data2
刪除文件空間不釋放,解決方法 [root@localhost opt]#lsof |grep delete //列出文件 過濾已刪除 [root@localhost opt]#echo " " > /boot/bigfile //寫空字元導給文件
2.文件恢復extundelete
刪除一個文件,實際上並不清除 inode 節點和 block 的數據,只是在這個文件的父目錄 裡面的 block 中,刪除這個文件的名字。
Linux 是通過 Link 的數量來控制文件刪除的,只有 當一個文件不存在任何 Link 的時候,這個文件才會被刪除。
在 Linux 系統運維工作中,經常會遇到因操作不慎、操作錯誤等導致文件數據丟失的情 況,尤其對於客戶企業中一些新手。
當然,這裡所指的是徹底刪除,即已經不能通過“回收 站”找回的情況,比如使用“rm -rf”來刪除數據。
針對 Linux 下的 EXT 文件系統,可用的恢復 工具有 debugfs、ext3grep、extundelete 等。
其中 extundelete 是一個開源的 Linux 數據 恢復工具,支持 ext3 文件系統。
2.1使用extundelete工具如何恢復誤刪文件
這兩個包在系統安裝光碟的/Package 目錄下就有,使用 rpm 或 yum 命令將其安裝;
[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs #安裝依賴軟體 [root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt #解壓軟體 [root@localhost ~]# cd /opt/extundelete-0.2.4 #切換到目錄下 [root@localhost extundelete-0.2.4]# ./configure //定義模塊和路徑 #編譯安裝 [root@localhost extundelete-0.2.4]#make //編譯 [root@localhost extundelete-0.2.4]#make install //寫入硬碟 [root@localhost extundelete-0.2.4]#cd /usr/local/bin/ [root@localhost bin]#ls extundelete you-get #驗證恢復,目前使用版本只對ext3 有效,分區略 [root@localhost ~]# mkfs.ext3 /dev/sdb1 [root@localhost ~]# mkdir /test/ [root@localhost ~]# mount /dev/sdb1 /test/ [root@localhost ~]# cd /test/ [root@localhost test]# echo a>a [root@localhost test]# echo a>b [root@localhost test]# echo a>c [root@localhost test]# echo a>d
2.2模擬誤刪並恢復
查看文件系統/dev/sdb1 下存在哪些文件
具體的使用情況:
其中--inode 2 代表從 i 節點為 2 的文件開始查看,一般文件系統格式化掛載之後,i 節點是從 2 開始的,2 代表該文件系統最開始的目錄。
[root@localhost test]# rm -rf a b //模擬誤刪除 [root@localhost test]# ls c d lost+foun [root@localhost test]# cd [root@localhost ~]# umount /test/ #解掛載 [root@localhost ~]#extundelete /dev/sdb1 --inode 2 //查看該分區下的存在哪些文件 # 命令 查看的分區 從2節點開始 [root@localhost ~]# extundelete /dev/sdb1 --restore-all //使用恢復 # 命令 需要恢復的分區設備 恢覆選項,全都要 [root@localhost ~]# ls anaconda-ks.cfg extundelete-0.2.4 extundelete-0.2.4.tar.bz2 RECOVERED_FILES [root@localhost ~]# cd RECOVERED_FILES/ //進入恢複目錄 [root@localhost RECOVERED_FILES]# ls //查看 a b //恢覆成功
3.xfs類型備份和恢復
若系統中未安裝 xfsdump與xfsrestore工具,可以通過yum install -y xfsdump命令安裝。
xfsdump 按照inode 順序備份一個 xfs 文件系統。
3.1xfsdump 的備份級別:
-
0 表示完全備份
-
1-9 表示增量 備份
-
xfsdump 的備份級別預設為 0
xfsdump 的命令格式為:
xfsdump -f 備份存放位置 要備份路徑或設備文件。
選項:
選項 | 作用 |
-f | 指定備份文件目錄 |
-L | 指定標簽 session label |
-M | 指定設備標簽 media label |
-s | 備份單個文件,-s 後面不能直接跟路徑 |
3.2使用 xfsdump 時,需要註意以下的幾個限制:
-
不支持沒有掛載的文件系統備份,所以只能備份已掛載的;
-
必須使用 root 的許可權才能操作;
-
只能備份 XFS 文件系統;
-
備份下來的數據只能讓 xfsrestore 解析;
-
4.日誌
4.1常見的日誌文件
4.2內核和公共日誌
4.3用戶日誌
4.4查詢當前登陸的用戶情況
4.5查詢用戶登陸的歷史情況