導圖
1.inode表結構
每個檔案的屬性資訊,比如:檔案的大小,時間,型別,權限等,稱為檔案的元資料(meta data)
元資料是存放在inode(index node)表中,inode 表中有很多條記錄組成,第一條記錄對應的存放了一個
檔案的元資料資訊,
1.1硬鏈接和軟連接
硬連接 同一個檔案取不同的名或者叫多個名字(比如 蘇軾 字子瞻 號東坡居士 蘇二 謚號文忠 )不支持檔案夾,創建一個連接數加一,多路徑訪問,
軟連接 類似于windows里快捷方式,軟連接,符號連接

1.2inode表中存放的對應資料
- inode number 節點號
- 檔案的型別
- 檔案的權限
- 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位元組)
檔案存盤的最小單位為塊8個扇區組成為4k
圖解:
-
mode:權限
-
owner info:所有者
-
size:大小
-
timestamps:三個時間戳

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工具如何恢復誤刪檔案
在編譯安裝 extundelete 之前需要先安裝兩個依賴包 e2fsprogs-libs 和 e2fsprogs-devel;
這兩個包在系統安裝光碟的/Package 目錄下就有,使用 rpm 或 yum 命令將其安裝;
e2fsprogs-devel 安裝依賴于 libcom_err-devel 包,
[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模擬誤刪并恢復
可以使用extundelete /dev/sdb1 --inode 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型別備份和恢復
CentOS 7 系統默認采用 xfs 型別的檔案,針對 xfs 檔案系統目前也沒有比較成熟的檔案恢復工具,所以建議提前做好資料備份,以避免資料丟失,
xfs 型別的檔案可使用 xfsdump 與 xfsrestore 工具進行備份恢復,
若系統中未安裝 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 決議;
-
不能備份兩個具有相同 UUID 的檔案系統(可使用blkid查看),
4.日志
4.1常見的日志檔案
4.2內核和公共日志
4.3用戶日志
4.4查詢當前登陸的用戶情況
4.5查詢用戶登陸的歷史情況
5.總結
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/514268.html
標籤:其他
上一篇:nginx
