帶你深入理解Linux系統檔案與紀錄檔分析

2021-04-27 12:01:17

目錄

一、inode與block

(一)概述

1、檔案資料

包括元資訊與實際資料。檔案儲存在硬碟上,硬碟最小儲存單位是「磁區」,每個磁區儲存512位元組。檔案資料包括實際資料與元資訊(類似檔案屬性)。檔案資料儲存在「塊"中,儲存檔案元資訊(比如檔案的建立者、建立日期、檔案大小、檔案許可權等)的區域就叫做 inode ,因此,一個檔案必須佔用一個inode,並且至少佔用一個block。inode不包含檔名。檔名是存放在目錄當中的。Linux系統中一切皆檔案,因此目錄也是一種檔案。

2、block (塊)

連續的八個磁區組成一個block(4K)
是檔案存取的最小單位

3、inode (索引節點)

中文譯名為"索引節點",也叫 i節點,用於儲存檔案元資訊
每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。
Linux系統內部不使用檔名,而使用inode號碼來識別檔案。
對於系統來說,檔名只是inode號碼便於識別的別稱,檔名和inode號碼是一 一 對應關係,每個inode號碼對應一個檔名。

4、Linux系統檔案三個主要的時間屬性

ctime(change time) #最後一次改變檔案或目錄(屬性)的時間
atime(access time) #最後一次存取檔案或目錄的時間
mtime(modify time) #最後一次修改檔案或目錄(內容)的時間

通過inode 刪除檔案命令:

find  ./   -inum   52305140   -exec   rm   -i   {} \;
find  ./  -inum    50464299     -delete

5、總結

當使用者在Linux系統中試圖存取一個檔案時,系統會先根據檔名去查詢它對應的inode號碼;通過inode號碼,獲取inode資訊;根據inode資訊,看該使用者是否具有存取這個檔案的許可權;如果有,就指向相對應的資料block,並讀取資料。

(二)inode 號碼

1、使用者通過檔名開啟檔案時,系統內部的過程

系統找到這個檔名對應的inode號碼
通過inode號碼,獲取inode資訊
根據inode資訊,找到檔案資料所在的block,讀出資料

2、檢視檔名對應的 inode 號碼有兩種方式:

ls     -i     檔名
stat       檔名

在這裡插入圖片描述
在這裡插入圖片描述

(三)inode的大小

inode也會消耗硬碟空間,所以格式化的時候,作業系統自動將硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是inode區,存放inode所包含的資訊。每個inode的大小,一般是128位元組或256位元組。

通常情況下不需要關注單個inode的大小,而是需要重點關注inode總數。inode的總數在格式化時就給定了,執行 「df -i」 命令即可檢視每個硬碟分割區對應的的inode總數和已經使用的inode數量。
在這裡插入圖片描述

由於inode號碼與檔名分離,導致Linux系統具備以下幾種特有的現象:
1)檔名包含特殊字元,可能無法正常刪除。這時直接刪除inode,能夠起到刪除檔案的作用;
2)移動檔案或重新命名檔案,只是改變檔名,不影響inode號碼;
3)開啟一個檔案以後,系統就以inode號碼來識別這個檔案,不再考慮檔名。
4)檔案資料被修改儲存後,會生成一個新的inode號碼。

(四)檔案儲存

1、硬碟分割區後結構

在這裡插入圖片描述

2、存取檔案的簡單流程

在這裡插入圖片描述

二、inode節點耗盡故障處理

#使用fdisk建立分割區/dev/sdb1,分割區大小30M即可
fdisk  /dev/sdb     n→p→+30M→w
mkfs.ext4  /dev/sdb1    #對於centos 7系統,節點耗盡故障處理的檔案型別可以是ext3或ext4
mkdir  /test    #建立掛載點
mount  /dev/sdb1  /test
df   -i      #檢視inode號一共有多少個

#模擬inode節點耗盡故障
for  ((i=1; i<=7680; i++)) ;do  touch  /test/file$i; done    或者  touch {1..7680}.txt     #建立超過它限額的節點號
df  -i   
df  -hT   
#刪除檔案恢復
rm  -rf  /test/*
df   -i

1、新增一塊磁碟

在這裡插入圖片描述

2、管理磁碟

在這裡插入圖片描述

3、格式化為ext3

在這裡插入圖片描述

4、在根目錄下建立子目錄/data用於掛載

在這裡插入圖片描述

5、使用for迴圈建立檔案,超出inode號無法建立

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

6、解除inode佔用,即可建立檔案

在這裡插入圖片描述

三、EXT型別檔案恢復

命令步驟:

● 使用fdisk建立分割區/dev/sdb2,格式化ext3檔案系統

fdisk /dev/sdb
mkfs.ext3 /dev/sdb2
mkdir /sdb2
mount /dev/sdb2 /sdb2

yum -y install e2fsprogs-devel e2fsprogs-libs             #安裝依賴包

cd /sdb2
拖入壓縮包
tar jxvf extundelete-0.2.4.tar.bz2                        #進行解壓縮
cd extundelete-0.2.4/
./configure --prefix=/usr/local/extundelete && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/

●模擬刪除並執行恢復操作

cd /sdb1
echo a>a
echo a>b
echo a>c
echo a>d
ls

●檢視檔案系統/dev/sdb2下存在哪些檔案,i 節點是從 2 開始的,2 代表該檔案系統最開始的目錄。

extundelete /dev/sdb1 --inode 2			
rm -rf a b
cd ~
umount /sdb2
extundelete /dev/sdb2 --restore-all		恢復/dev/sdb2檔案系統下的所有內容

在當前目錄下會出現一個RECOVERED_FILES/目錄,裡面儲存了已經恢復的檔案
ls RECOVERED_FILES

詳細過程(接上述inode耗盡實驗的設定)

1、管理磁碟sdb,建立分割區2,將剩餘大小全部分配給分割區2,並partprobe重新整理分割區

在這裡插入圖片描述

2、新磁碟要使用就得掛載,掛載就需要掛載點,要掛載的前提就是確定檔案系統型別,也就是格式化

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

3、下載壓縮包,下載好後將壓縮包拖入Xshell中,在哪個目錄下執行的,壓縮包就在哪個目錄下

在這裡插入圖片描述
在這裡插入圖片描述

4、(可複製),切換進入extundelete目錄中將configure進行編譯安裝

在這裡插入圖片描述
在這裡插入圖片描述

5、建立軟連結,在/sdb2中建立檔案寫入內容,並查詢inode號

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

6、模擬刪除,並使用工具恢復內容,恢復之前需解掛載,恢復的是磁碟內的內容

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

四、恢復XFS型別的檔案

CentOS 7 系統預設採用 xfs型別的檔案,xfs 型別的檔案可使用 xfsdump 與 xfsrestore 工具進行備份恢復。

●xfsdump 命令常用的選項:
-f:指定備份檔案目錄
-L:指定標籤 session label
-M:指定裝置標籤 media label
-s:備份單個檔案,-s 後面不能直接跟路徑

●xfsdump使用限制:
1.只能備份已掛載的檔案系統
2.必須使用root的許可權才能操作
3.只能備份XFS檔案系統
4.備份後的資料只能讓xfsrestore解析
5.不能備份兩個具有相同UUID的檔案系統(可用 blkid命令檢視)

命令步驟:

使用fdisk建立分割區/dev/sdb1,格式化xfs檔案系統

fdisk /dev/sdb
partprobe /dev/sdb
mkfs.xfs  /dev/sdb1
mkdir /sdb1
mount /dev/sdb1 /sdb1
cd /sdb1
cp /etc/passwd ./
mkdir test
touch test/a

使用 xfsdump 命令備份整個分割區

yum install -y xfsdump
xfsdump -f /opt/dump_sdb1 /dev/sdb1 -L dump_sdb1 -M sdb1

模擬資料丟失並使用 xfsrestore 命令恢復檔案

cd /sdb1
rm -rf ./*
xfsrestore -f /opt/dump_sdb1 /sdb1

詳細過程

1、虛擬機器器快照,重新新增磁碟。進行格式化,建立掛載點,磁碟掛載,進入掛載點,複製或建立一下目錄檔案用於實驗

在這裡插入圖片描述
在這裡插入圖片描述

2、檢查安裝xfsdump工具,一般系統預設安裝,若是沒有,使用rpm -qa | grep 「xfsdump」,再使用yum -y install 進行安裝

在這裡插入圖片描述

3、接下來,進行備份,刪除,恢復

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

五、紀錄檔檔案

(一)紀錄檔的功能

1、用於記錄系統、程式執行中發生的各種事件
2、通過閱讀紀錄檔,有助於診斷和解決系統故障

(二)紀錄檔檔案的分類

1、核心及系統紀錄檔

1)由系統服務 rsyslog 統一進行管理,紀錄檔格式基本相似
   軟體包:rsyslog-7.4.7-16.el7.x86_64
   主要程式:/sbin/rsyslogd
   組態檔:/etc/rsyslog.conf
2)主組態檔 /etc/rsyslog.conf
 
Linux作業系統本身和大部分伺服器程式的紀錄檔檔案都預設放在目錄 /var/log/ 下
也可以指定查詢某個特定日期或者時間點的系統紀錄檔

3)查詢系統核心紀錄檔組態檔:/etc/rsyslog.conf

vim   /etc/rsyslog.conf         #檢視rsyslog.conf 組態檔
*.info;mail.none;authpriv.none;cron.none       /var/log/messages  

*.info     #表示info等級及以上的所有等級的資訊都寫到對應的紀錄檔檔案裡
mail.none     #表示某事件的資訊不寫到紀錄檔檔案裡(這裡比如是郵件)

4)Linux系統核心紀錄檔訊息的優先順序別(數位等級越小,優先順序越高,訊息越重要)

級號訊息級別說明
0EMERG緊急會導致主機系統不可用的情況。
1ALERT警告必須馬上採取措施解決的問題
2CRIT嚴重比較嚴重的情況
3ERR錯誤 運行出現錯誤
4WARNING提醒可能影響系統功能,需要提醒使用者的
5NOTICE注意不會影響正常功能,但是需要注意的事件
6INFO資訊一般資訊
7DEBUG偵錯程式或系統偵錯資訊等

2、使用者紀錄檔

記錄系統使用者登入及退出系統的相關資訊 vim /var/log/secure

3、程式紀錄檔

1)由各種應用程式獨立管理的紀錄檔檔案,記錄格式不統一
2)程式紀錄檔分析,由相應的應用程式獨立進行管理
▶Web服務:Nar/log/httpd/
access_log //記錄客戶存取事件
error_log //記錄錯誤事件
▶代理服務:/var/log/squid/
access.log、cache.log
▶分析工具
▶文字檢視、grep過濾檢索、Webmin管理套件中檢視
▶awk、sed等文字過濾、格式化編輯工具
▶Webalizer、Awstats等專用紀錄檔分析工具

4、主要紀錄檔檔案介紹

核心及公共訊息紀錄檔 ./var/log/messages
計劃任務紀錄檔./var/log/cron
系統引導紀錄檔./var/log/dmesg
郵件系統紀錄檔. /var/log/maillog
使用者登入紀錄檔./var/log/lastlog   ./var/log/secure   ./var/log/wtmp  ./var/run/btmp

5、紀錄檔記錄的一般格式

在這裡插入圖片描述

(三)常見的一些紀錄檔檔案

1、核心及公共訊息紀錄檔

/var/log/messages:記錄Linux核心訊息及各種應用程式的公共紀錄檔資訊,包括啟動、IO錯誤、網路錯誤、程式故障等。對於未使用獨立紀錄檔檔案的應用程式或服務,一般都可以從該紀錄檔檔案中獲得相關的事件記錄資訊。

2、計劃任務紀錄檔

/var/log/cron:記錄 crond 計劃任務產生的事件資訊

3、系統引導紀錄檔

/var/log/dmesg:記錄Linux系統在引導過程中的各種事件資訊

4、郵件系統紀錄檔

/var/log/maillog:記錄進入或發出系統的電子郵件活動。

5、使用者登入紀錄檔

/var/log/secure:記錄使用者認證相關的安全事件資訊。
/var/log/lastlog:記錄每個使用者最近的登入事件。二進位制格式
/var/log/wtmp:記錄每個使用者登入、登出及系統啟動和停機事件。二進位制格式
/var/run/btmp:記錄失敗的、錯誤的登入嘗試及驗證事件。二進位制格式

5、分析工具

users、 who、w 、last、lastb
last命令用於查詢成功登入到系統的使用者記錄
lastb命令用於查詢登入失敗的使用者記錄

在這裡插入圖片描述

六、紀錄檔管理策略

1、及時作好備份和歸檔
2、延長紀錄檔儲存期限
3、控制紀錄檔存取許可權
紀錄檔中可能會包含各類敏感資訊,如賬戶、口令等
4、集中管理紀錄檔
將伺服器的紀錄檔檔案發到統一的紀錄檔檔案伺服器
便於紀錄檔資訊的統一收集、整理和分析
杜絕紀錄檔資訊的意外丟失、惡意篡改或刪除