Linux文件系統與日誌文件
文章目錄
inode和block概述
文件數據包括元信息與實際數據
文件存儲在硬盤上,硬盤最小存儲單位是“扇區”,每個扇區存儲512字節
block(塊)
連續的八個扇區組成一個block
是文件存儲的最小單位
inode(索引節點)
中文譯名爲“索引節點”,也叫i節點
用於存儲文件元信息
inode包含文件的元信息
文件的字節數
文件擁有者的User ID(不包含文件名)
文件的Group ID
文件的讀寫執行權限
文件的時間戳
……
用stat命令可以查看某個文件的inode信息
[root@localhost opt]# touch aa.txt
[root@localhost opt]# stat aa.txt
文件:"aa.txt"
大小:0 塊:0 IO 塊:4096 普通空文件
設備:fd00h/64768d Inode:33567187 硬鏈接:1
權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
環境:unconfined_u:object_r:usr_t:s0
最近訪問:2020-07-02 03:01:28.719405830 +0800
最近更改:2020-07-02 03:01:28.719405830 +0800
最近改動:2020-07-02 03:01:28.719405830 +0800
創建時間:-
##Linux系統文件三個主要的時間屬性
ctime(change time)
最後一次改變文件或目錄(屬性)的時間
atime(access time)
最後一次訪問文件或目錄的時間
mtime(modify time)
最後一次修改文件或目錄(內容)的時間
目錄文件的結構
目錄也是一種文件
目錄文件的結構
每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件
Linux系統內部不適用文件名,而使用inode號碼來識別文件
對於用戶,文件名只是inode號碼便於識別的別稱
inode的號碼
用戶通過文件名打開文件時,系統內部的過程
1.系統找到這個文件名對應的inode號碼
2.通過inode號碼,獲取inode信息
3.根據inode信息,找到文件數據所在的block,讀出數據
查看inode號碼的方法
ls -i命令:查看文件名對應的inode號碼
[root@localhost opt]# ls -i aa.txt
33567187 aa.txt
[root@localhost opt]# stat aa.txt
文件:"aa.txt"
大小:0 塊:0 IO 塊:4096 普通空文件
設備:fd00h/64768d Inode:33567187 硬鏈接:1
權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
環境:unconfined_u:object_r:usr_t:s0
最近訪問:2020-07-02 03:01:28.719405830 +0800
最近更改:2020-07-02 03:01:28.719405830 +0800
最近改動:2020-07-02 03:01:28.719405830 +0800
創建時間:-
硬盤分區後的結構
inode的大小
inode也會消耗硬盤空間
每個inode的大小
一般是128字節或256字節
格式化文件系統時確定inode的總數
使用df -i命令可以查看每個硬盤分區的inode總數和已經使用的數量
inode的特殊作用
由於inode號碼與文件名分離,導致一些Unix/Linux系統具有以下的現象
當文件名包含特殊字符,可能無法正常刪除文件,直接刪除inode,也可以刪除文件
移動或重命名文件時,之改變文件名,不影響inode號碼
打開一個文件後,系統通過inode號碼來識別該文件,不再考慮文件名
鏈接文件
爲文件或目錄建立鏈接文件
鏈接文件分類
軟鏈接(又稱符號鏈接) | 硬鏈接 | |
---|---|---|
刪除原始文件後 | 失效 | 仍舊可用 |
使用範圍 | 適用於文件或目錄 | 只可用於文件 |
保存位置 | 與原始文件可以位於不同的文件系統中 | 必須與原始文件在同一個文件系統(如一個Linux分區)內 |
硬鏈接
一般情況下,文件名和inode號碼是一一對應關係,每個inode號碼對應一個文件名。
但是Linux系統允許,多個文件名指向同一個inode號碼。這表示可以用不同的文件名來訪問同樣的內容
ln命令可以創建硬鏈接,命令基本格式
ln 源文件 目標
不能對目錄做硬鏈接
運行此命令後,源文件和目標文件的inode號碼相同,都指向同一個inode。
inode信息中的“鏈接數”此時就會增加1
當一個文件擁有多個硬鏈接時,對文件內容修改,會影響到所有文件名,但刪除一個文件名,不會影響另一個文件名的訪問,刪除一個文件名,就會使得inode信息中的“鏈接數”減少1
軟鏈接
軟鏈接就是再創建一個獨立的文件,而這個文件會讓數據的讀取指向它連接的那個文件的文件名
軟鏈接的創建命令的基本格式爲:
ln [-s] 源文件或目錄… 鏈接文件或目標位置
恢復誤刪除的文件
恢復XFS類型的文件
xfsdump命令格式
xfsdump -f 備份存放位置 要備份的路徑或者設備文件
xfsdump備份級別(默認爲0)
0:完全備份
1-9:增量備份
xfsdump常用選項:-f,-L,-M,-s
xfsrestore -f 恢復文件的位置 存放恢復後文件的位置
xfsdump使用限制
只能備份已掛載的文件系統
必須使用root的權限才能操作
只能備份XFS文件系統
備份後的數據只能讓xfsrestore解析
不能備份兩個具有相同UUID的文件系統
恢復EXT類型的文件
安裝extundelete軟件包
[root@localhost ~]# yum -y install e2fsprogs*
[root@localhost ~]# yum -y install wget
[root@localhost ~]# cd /opt
[root@localhost opt]# wget http://nchc.dl.sourceforge.net/project/extundel/extundelete-0.2.4.tar.bz2
[root@localhost opt]# ls
data extundelete-0.2.4.tar.bz2
把一塊磁盤格式化成ext4格式
[root@localhost ~]# mkfs.ext3 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost opt]# mkdir data
[root@localhost opt]# mount /dev/sdb1 /opt/data
[root@localhost opt]# cd data/
[root@localhost data]# ls
lost+found
[root@localhost data]# touch aa bb cc dd
[root@localhost data]# ls
aa bb cc dd lost+found
[root@localhost data]# rm -rf aa bb
[root@localhost data]# ls
cc dd lost+found
[root@localhost data]# cd ~
[root@localhost ~]# umount /opt/data/
[root@localhost ~]# extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 28 descriptors loaded.
Searching for recoverable inodes in directory / ...
0 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
No files were undeleted.
[root@localhost opt]# mount /dev/sdb1 /opt/data
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
aa cc
[root@localhost RECOVERED_FILES]# cp a /opt
[root@localhost RECOVERED_FILES]# ls /opt
aa bb cc dd lost+found
日誌文件
日誌的功能
用於記錄系統、程序運行中發生的各種事件
通過閱讀日誌,有助於診斷和解決系統故障
日誌文件的分類
內核及系統的分類
- 內核及系統日誌
由系統服務rsyslog統一進行管理,日誌格式基本相似 - 用戶日誌
記錄系統用戶登錄退出系統的相關信息 - 程序日誌
由各種應用程序獨立管理的日誌文件,記錄格式不統一
日誌文件保存位置
默認位於:/var/log目錄下
主要日誌文件介紹
內核及公共消息日誌 | /var/log/messages |
計劃任務日誌 | /var/log/cron |
系統引導日誌 | /var/log/dmesg |
郵件系統日誌 | /var/log/maillog |
用戶登錄日誌 | /var/log/lastlog、/var/log/secure、/var/log/wtmp、/var/log/btmp |
內核及系統日誌
由系統服務rsyslogd統一管理
軟件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
日誌消息的級別
受rsyslogd服務管理的日誌文件都是Linux系統中最重要的日誌文件,它們記錄了Linux系統中內核,用戶認證,郵件,計劃任務等最基本的系統消息
在Linux內核中,根據日誌消息的重要程度不同,將其分爲不同的優先級(數字等級越小,優先級越高,消息越重要)
級別 | 解釋 |
---|---|
0 EMERG(緊急) | 會導致主機系統不可用的情況 |
1 ALERT(警告) | 必須馬上採取措施解決的問題 |
2 CRIT(嚴重) | 比較嚴重的情況(某些功能不可用) |
3 ERR(錯誤) | 運行出現錯誤 |
4 WARNING(提醒) | 可能會影響系統功能的事件 |
5 NOTICE(注意) | 不會影響系統但值得注意 |
6 INFO(信息) | 一般信息 |
7 DEBUG(調試) | 程序或系統調試信息等(做維護的時候可能會用到) |
內核及大多數系統消息都被記錄到公共日誌文件/var/log/messages中,而其他一些程序消息被記錄到各自獨立的日誌文件中
日誌消息還可以記錄到特定的存儲設備中,或者直接發送給指定用戶
用戶日誌
保存目錄
保存了用戶登錄,退出系統等相關信息
/var/log/lastlog:最近的用戶登錄事件
/var/log/wtmp:用戶登錄,註銷及系統開,關機事件
/var/log/utmp:當前登錄的每個用戶的詳細信息
/var/log/secure:與用戶驗證相關的安全性事件
程序日誌分析
由相應的程序獨立進行管理
web服務:/var/log/httpd/
- access_log、error_log
代理服務:/var/log/squid/ - access.log 、cache.log
FTP服務:/var/log/xferlog
分析工具
- 文本查看、grep過濾檢索、webmin管理套件中查看
- awk、sed等文本過濾,格式化編輯工具
- webalizer、awstats等專用日誌分析工具
日誌管理策略
及時做好備份和歸檔
延長日誌保存期限
控制日誌訪問權限
- 日誌中可能會包含各類敏感信息,如賬戶、口令等
集中管理日誌 - 將服務器的日誌文件發到統一的日誌文件服務器
- 便於日誌信息的統一收集,整理和分析
- 杜絕日誌信息的意外丟失、惡意篡改或刪除