深入理解Linux檔案系統與日誌檔案
目錄:
一、inode與block
二、inode內容
三、inode的號碼
四、inode的大小
五、連結檔案
六、inode節點耗盡故障處理
七、恢復EXT型別的檔案編譯安裝extundelete軟體包
八、xfs型別檔案的備份和恢復
九、日誌檔案
十、核心及系統日誌
十一、使用者日誌檔案
十二、程式日誌分析
十三、日誌管理策略
一、inode與block
inode和block概述
檔案資料包括元資訊與實際資料
檔案儲存在硬碟上,硬碟最小儲存單位是"扇區",每個扇區儲存512位元組
block(塊)
- 連續的八個扇區組成一個 block(4K)
- 是檔案存取的最小單位
inode (索引節點)
- 中文譯名為"索引節點",也叫i節點
- 用於儲存檔案元資訊
知識拓展
檔案是儲存在硬碟上的,硬碟的最小儲存單位叫做"扇區"(sector),每個扇區儲存512位元組。
一般連續八個扇區組成一個"塊"(block),一個塊是4K大小,是檔案存取的最小單位。作業系統讀取硬碟的時候,是一次性連續讀取多個扇區,即一個塊一個塊的讀取的。
檔案資料包括實際資料與元資訊(類似檔案屬性)。檔案資料儲存在"塊"中,儲存檔案元資訊(比如檔案的建立者、建立日期、檔案大小、檔案許可權等)的區域就叫做inode。因此,一個檔案必須佔用一個 inode,並且至少佔用一個 block。 inode不包含檔名。檔名是存放在目錄當中的。Linux 系統中一切皆檔案,因此目錄也是一種檔案。
每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案。Linux系統內部不使用檔名,而使用inode號碼來識別檔案。對於系統來說,檔名只是inode號碼便於識別的別稱,檔名和inode號碼是一一對應關係,每個inode號碼對應一個檔名。
所以,當用戶在Linux系統中試圖訪問一個檔案時,系統會先根據檔名去查詢它對應的inode號碼; 通過inode號碼,獲取inode資訊; 根據inode資訊,看該使用者是否具有訪問這個檔案的許可權;如果有,就指向相對應的資料block,並讀取資料。
注:一個檔案必須佔用一個inode,但至少也佔用一個block
二、inode的內容
1)inode包含檔案的元資訊
- 檔案的位元組數
- 檔案擁有者的User ID
- 檔案的Group ID
- 檔案的讀、寫、執行許可權
- 檔案的時間戳
2)用命令可以檢視某個檔案的inode資訊
兩種方法 ls -i 檔名 stat 檔名
3)Linux系統檔案三個主要的時間屬性
atime (accesstime):
當使用這個檔案的時候就會更新這個時間。
mtime (modification time) :
當修改檔案的內容資料的時候,就會更新這個時間,而更改許可權或者屬性,mtime不會改變,這就是和ctime的區別。
ctime (status time) :
當修改檔案的許可權或者屬性的時候,就會更新這個時間,ctime並不是create time,更像是change time,只有當更新檔案的屬性或者許可權的時候才會更新這個時間,但是更改內容的話是不會更新這個時間。
4)目錄檔案的結構
- 目錄也是一種檔案
- 目錄檔案的結構
每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案
Linux系統內部不使用檔名,而使用inode號碼來識別檔案
對於使用者,檔名只是inode號碼便於識別的別稱
三、inode的號碼
1、使用者通過檔名開啟檔案時,系統內部的過程
- 系統找到這個檔名對應的inode號碼
- 通過inode號碼,獲取inode資訊
- 根據inode資訊,找到檔案資料所在的block,讀出資料
2、硬碟分割槽後的結構
3、 訪問檔案的簡單流程
四、inode的大小
1、inode也會消耗硬碟空間
- 每個inode的大小
- 一般是128位元組或256位元組
格式化檔案系統時確定inode的總數
使用df -i命令可以檢視每個硬碟分割槽的inode總數和已經使用的數量
inode也會消耗硬器空間,所以格式化的時候,作業系統白動將礦盤分成兩個區域。一個是資料,存放檔案資料;另一個是 inode區,存放 inode 所包含的資訊。每個 inode 的大小,一般是 128 位元組或 256 位元組。
通常情況下不需要關注單個 inode 的大小,而是需要重點關注 inode 總數。inode 的總數在格式化時就給定了,執行 "df-i"命令即可檢視每個硬碟分割槽對應的的 inodo 總數和已經使用的inode 數量。
2、由於 inode 號碼與檔名分離,導致Linux 系統具備以下幾種特有的現象∶
1.檔名包含特殊字元,可能無法正常刪除。這時直接刪除 inode,能夠起到刪除檔案的作用;
2.移動檔案或重新命名檔案,只是改變檔名,不影響 inode 號碼;
3.開啟一個檔案以後,系統就以 inode 號碼來識別這個檔案,不再考慮檔名。
4.檔案資料被修改儲存後,會生成一個新的 inode 號碼。
find ./ -inum 52305140 -exec rm -i {} \; find . /-inum 50464299 -delete
注:如果你移動到掛載目錄下,會發現inode號也會改變
五、連結檔案
為檔案或目錄建立連結檔案
連結檔案分類
標記文字
In 原始檔 目標位置
軟連結
In 【-s】原始檔或目錄…連結檔案或目標位置
六、inode節點耗盡故障處理
#使用fdisk建立分割槽/dev/sdb1,分割槽大小30M即可 fdisk /dev/ sdb . mkfs.ext4 /dev/ sdb1 mkdir /test mount /dev/sdb1 /mnt df -i #模擬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 df -hT
舉例
七、恢復EXT型別的檔案編譯安裝extundelete軟體包
安裝依賴包
- 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
#使用fdisk建立分割槽/dev/sdc1,格式化ext3檔案系統 fdisk /dev/sdb partprobe /dev/sdb mkfs.ext3 /dev/ sdb1 mkdir /mnt mount /dev/sdb1 /mnt df -hT #安裝依賴包 yum -y install e2fsprogs-devel e2 fsprogs-l ibs #編譯安裝extundelete cd /opt wget http: //nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 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 /mnt echo a>a echo a>b echo a>C . echo a>d ls extundelete /dev/sdb1 --inode 2 #檢視檔案系統/dev/sdc1下存在哪些檔案,i節點是從2開始的,2代表該檔案系統最開始的目錄 rm-rf a b extundelete /dev/sdc1 -- inode 2 cd ~ umount /mnt extundelete /dev/sdc1 --restore-all #恢復/dev/sdc1檔案系統下的所有內容 #在當前目錄下會出現一-個RECOVERED_ FILES/目錄,裡面儲存了已經恢復的檔案 ls RECOVERED_FILES/
舉例
八、xfs 型別檔案備份和恢復
Centos 7 系統預設採用 xfs型別的檔案,xfs 型別的檔案可使用 xfsdump 與 xfsrestore 工具進行備份恢復,區xfsdump 的備份級別有兩種∶ 0 表示完全備份; 1-9 表示增量備份。xfsdump 的備份級別預設為 0。
xfsdump 的命令格式為∶
xfsdump -f 備份存放位置 要備份的路徑或裝置檔案
xfsdump 命令常用的選項∶-f∶指定備份檔案目錄
-L∶指定標籤 session label
-M∶ 指定裝置標籤 media labe1
-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 [-f] /dev/ sdb1 mkdir /data mount /dev/ sdb1 /data/ cd /data cp /etc/passwd ./ mkdi rtest touch test/a #使用xfsdump 命令備份整個分割槽 rpm -qa| grep xfsdump yum install -y xfsdump xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump sdb1 -M sdb1 ] #模擬資料丟失並使用 x fsrestore 命令恢復檔案 cd /data/ rm -rf ./* ls xfsrestore -f /opt/dump_ sdb1 /data/
舉例
九、日誌檔案
1、日誌的功能
- 用於記錄系統、程式執行中發生的各種事件
- 通過閱讀日誌,有助於診斷和解決系統故障
2、日誌檔案的分類
核心及系統日誌
- 由系統服務rsyslog統一進行管理,日誌格式基本相似
- 主配置檔案/etc/rsyslog.conf
使用者日誌
- 記錄系統使用者登入及退出系統的相關資訊
程式日誌
3、日誌儲存位置
●預設位於∶/var/log目錄下
主要日誌檔案介紹核心及公共訊息日誌
/var/log/messages
記錄Linux核心訊息及各種應用程式的公共日誌資訊,包括啟動、Io錯誤、網路錯誤、程式故障等 對於未使用獨立日誌檔案的應用程式或服務,一般都可以從該日誌檔案中獲得相關的事件記錄資訊 計劃任務日誌
/var/log/cron
記錄crond計劃任務產生的事件資訊 系統引導日誌
/var/log/dmesg
記錄Linux系統在引導過程中的各種事件資訊 郵件系統日誌
/var/log/maillog
記錄進入或發出系統的電子郵件活動 使用者登入日誌
/var /log/lastlog
記錄每個使用者最近的登入事件,二進位制格式 /var/log/secure
記錄使用者認證相關的安全事件資訊 /var/log/wtmp
記錄每個使用者登入、登出及系統啟動和停機事件,二進位制格式 /var/run/btmp
記錄失敗的、錯誤的登入嘗試及驗證事件,二進位制格式
十、核心及系統日誌
1、由系統服務 rsyslog 統一管理
- 軟體包∶rsyslog-7.4.7-16.el7.x86_64
- 主要程式∶ /sbin/rsyslogd
- 配置檔案∶ /etc/rsyslog.conf
2、日誌訊息的級別
注:數字等級越小,優先順序越高,訊息越重要
日誌記錄的一般格式
時間標籤: 訊息發出的日期和時間
主機名:生成訊息的計算機的名稱
子系統名稱: 發出訊息的應用程式的名稱
訊息: 訊息的具體內容
十一、使用者日誌分析
1、儲存了使用者登入、退出系統等相關資訊
- /var/log/lastlog∶ 最近的使用者登入事件
- /var/log/wtmp∶ 使用者登入、登出及系統開、關機事件
- /var/run/utmp∶ 當前登入的每個使用者的詳細資訊
- /var/log/secure: 與使用者驗證相關的安全性事件
2、分析工具
- users、who、w、last、lastb
- last 命令用於查詢成功登入到系統的使用者記錄
- lastb 命令用於查詢登入失敗的使用者記錄
十二、程式日誌分析
1、由相應的應用程式獨立進行管理
Web服務∶ /var/log/httpd/
- access_log //記錄客戶訪問事件
- error_log //記錄錯誤事件
代理服務∶ /var/og/squid/
- access.log、cache.log
2、分析工具
- 文字檢視、grep過濾檢索、Webmin管理套件中檢視
- awk、sed等文字過濾、格式化編輯工具
- Webalizer、Awstats等專用日誌分析工具
十三、日誌管理策略
1、及時作好備份和歸檔
2、延長日誌儲存期限
3、控制日誌訪問許可權
- 日誌中可能會包含各類敏感資訊,如賬戶、口令等
4、集中管理日誌
- 將伺服器的日誌檔案發到統一的日誌檔案伺服器
- 便於日誌資訊的統一收集、整理和分析
- 杜絕日誌資訊的意外丟失、惡意篡改或刪除
總結
1、 block與inode
2、 硬連結與軟連結
3、恢復誤刪除的檔案
4、 Linux主要包含的日誌檔案
5、 Linux系統的日誌訊息級別
6、 Linux系統中使用者日誌的查詢命令
(who、W、users、 last、 lastb)