Linux文件系統與日誌文件
一、inode與block詳解
【1】概述
塊(block):8個扇區一個塊,一個扇區512字節,8一個塊4096字節相當於4k。
i節點(inode):每個文件都對應一個節點,叫索引節點,是儲存元信息的區域,元信息包括:文件的創建者、文件的創建日期、文件的大小。
【2】inode的內容
使用命令stat查看某個文件的inode信息
1、文件的字節數
2、文件擁有者的UID
3、文件的組ID號
4、文件的讀、寫、執行權限
5、文件的時間戳
1】最後一次改變的時間ctime:change time
2】最後一次訪問的時間atime:access time
3】最後一次修改的時間mtime:modify time
【3】inode號碼
使用命令ls -i可以查看文件名對應的inode號碼,也可以使用stat命令查看文件的inode信息找到inode號。
1、系統找到這個文件對應的inode號
2、通過inode號獲取inode信息
4、根據inode信息,找到文件數據所在的block,讀出數據。
【4】inode的大小
1、對於無法刪除的文件,直接刪除i節點就可以刪除這個文件:rm -rf 128016
2、移動和重命名文件只改變文件的名稱,不改變inode號
3、打開一個文件以後系統只看inode號,不管文件名。
【5】inode耗盡故障處理
1、案例說明1
1】案例描述
在配置內存、硬盤比較小的服務器的/data分區內創建文件時,系統提示磁盤空間不足,但是用df -hT查看磁盤使用情況發現/data只是用了50%,還有足夠的空間可以使用。
2】故障原因
(1)使用df -i查看/data下面inode就已經滿了,導致系統無法創建新的文件和目錄。
(2)/data/cache下面有緩存文件,雖然站的block不多,但佔用了大量的inode。
3】解決問題
刪除/data/cache下面不許要的文件就好。
2、模擬inode耗盡故障
步驟:
【1】新建ext4類型的文件系統(/dev/sdb2),並將其掛載到/data目錄下。並使用df -i查看是否掛載成功。
[root@localhost~]#mkdir /data
[root@localhost~]#mount /dev/sdb2 /data
[root@localhost~]#df -i /data
【2】新建一個測試shell腳本,運行,查看i節點的使用情況。
[root@localhost~]#vi killinode,sh
[root@localhost~]#sh killinode.sh
[root@localhost~]#df -i /data
這時會顯示i節點使用100%
[root@localhost~]#touch testfile
無法創建,設備上沒有空間
[root@localhost~]#df -hT
但是block使用才6%說明系統分配的inode使用完了。
【3】解決方案
刪除/data下面的緩存文件。
[root@localhost~]#rm -rf /data/file*
二、硬鏈接與軟連接詳解
鏈接使用命令ln
Linux文件系統中,有所謂的鏈接(link),我們可以將其視爲檔案的別名,鏈接又可分爲兩種 : 硬鏈接與軟鏈接,硬鏈接的意思是一個檔案可以有多個名稱,而軟鏈接的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬鏈接是存在同一個文件系統中,而軟鏈接卻可以跨越不同的文件系統。不論是硬鏈接或軟鏈接都不會將原本的檔案複製一份,只會佔用非常少量的磁碟空間。
ln -b 刪除,覆蓋以前建立的鏈接
ln -d 允許超級用戶製作目錄的硬鏈接
ln -f 強制執行
ln -i 交互模式,文件存在則提示用戶是否覆蓋
ln -n 把軟鏈接視爲一般目錄
ln -s 軟鏈接(符號鏈接)
【1】硬鏈接ln
硬鏈接,以文件副本的形式存在。但不佔用實際空間。
不允許給目錄創建硬鏈接
硬鏈接只有在同一個文件系統中才能創建,使用-d可以給目錄創建硬鏈接
格式:ln 原文件名 鏈接文件名
【2】軟連接ln -s
軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式
可以 跨文件系統 ,硬鏈接不可以
可以對一個不存在的文件名進行鏈接
可以對目錄進行鏈接
格式:ln -s 原文件名 鏈接文件名
三、恢復誤刪文件步驟
1、ext文件類型
【1】安裝依賴包
[root@localhost~]#rpm -ivm e2fsprogs-libs-1.41.12......64.rpm
[root@localhost~]#rpm -ivm e2fsprogs-devel1.41.12....64.rpm
安裝完依賴包之後通過xftp上傳exdundelete軟件包解壓、配置、編譯、安裝。
[root@localhost~]#tar jxvf extundelete-0.2.4.tar.bz2
[root@localhost~]#ls
[root@localhost~]#cd extundetele-0.2.4
[root@localhost extundetele-0.2.4]#./configure configuring extundetele-0.2.4
[root@localhost extundetele-0.2.4]#make && make instal
【2】模擬刪除
[root@localhost ~]#mount /dev/sdb1 /tmp/
[root@localhost tmp]#echo a >a
[root@localhost tmp]#echo a >b
[root@localhost tmp]#ls
a b lost+found
[root@localhost tmp]#rm -rf a
[root@localhost tmp]#ls
b lost+found
【3】模擬恢復
[root@localhost ~]#umount /tmp/
[root@localhost ~]#extundelete /dev/sdb1 --restore-all //恢復命令
在當前目錄下會出現recovered_file目錄,裏面會有刪除的a。
2、xfs文件類型
【1】格式化磁盤
[root@localhost data]# mkfs -t xfs -f /dev/sdb1
mkfs.xfs: cannot open /dev/sdb1: 設備或資源忙
這是舊磁盤,顯示設備忙,說明在使用,無法格式化,這樣就先結束有關它的進程再格式化
[root@localhost ~]# yum install epel-release –y
[root@localhost ~]# yum install -y psmisc
[root@localhost data]# which fuser
/usr/sbin/fuser
[root@localhost data]# fuser -km /dev/sdb1(結束與設備相關的進程)
/dev/sdb1: 7418c
[root@localhost data]# mkfs -t xfs -f /dev/sdb1
mkfs.xfs: cannot open /dev/sdb1: 設備或資源忙
發現還是資源忙,查看設備信息
[root@localhost ~]# fdisk /dev/sdb(查看磁盤類型)
設備 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 8e Linux LVM
之前做過邏輯卷,所以這個磁盤被使用,從卷組中刪除,在刪除物理卷,並修改設備類型爲83即可。
[root@localhost ~]#vgremove vg0 /dev/sdb1(把磁盤移除卷組)
Do you really want to remove volume group "vg0" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
Logical volume "lv0" successfully removed
Volume group "vg0" successfully removed
[root@localhost ~]# pvremove /dev/sdb1(刪除物理卷)
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@localhost ~]# mkfs -t xfs -f /dev/sdb1(格式化磁盤)
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
【2】創建目錄,掛載磁盤,寫入數據
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data
[root@localhost ~]# cd /data
[root@localhost data]# mkdir xfstest01
[root@localhost data]# cp /etc/shadow ./
[root@localhost data]# ll
總用量 4
----------. 1 root root 645 7月 4 10:34 shadow
drwxr-xr-x. 2 root root 6 7月 4 10:33 xfstest01
【3】模擬備份磁盤,刪除數據
[root@localhost data]# xfsdump -f /opt/data.bak /dev/sdb1(備份磁盤到另一磁盤下面)
please enter label for this dump session (timeout in 300 sec)
-> /opt/data.bak(備份到路徑)
please enter label for media in drive 0 (timeout in 300 sec)
-> /dev/sdb1 (備份的磁盤)
[root@localhost data]# rm -rf ./*(刪除原有數據)
[root@localhost data]# ll
總用量 0
【4】模擬恢復
[root@localhost ~]# xfsrestore -f /opt/data.bak /data(恢復數據)
[root@localhost ~]# cd /data
[root@localhost data]# ll
總用量 4
----------. 1 root root 645 7月 4 10:34 shadow
drwxr-xr-x. 2 root root 6 7月 4 10:33 xfstest01
四、日誌文件分析
【1】日誌文件的分類
/var/log/messages記錄內核消息及各種應用程序的公共日誌信息
/var/log/cron記錄crond計劃任務產生的事件信息
/var/log/dmesg引導過程事件信息
/var/log/maillog郵件活動
/var/log/lastlog最近登錄信息
/var/log/secure認證安全信息
/var/log/wtmp登錄、註銷、啓動、停機
/var/log/btmp失敗,錯誤的登錄嘗試及驗證事件
【2】日誌文件的分析
1、內核及系統日誌:優先級越小越重要
0緊急emerg
1警告alert
2嚴重crit
3錯誤err
4提醒warning
5注意notice
6信息info
7調試debug
2、用戶日誌:user、who、w、last、lastb
user命令輸出當前登錄的用戶名稱
who命令報告當前登錄用戶的信息
w命令顯示當前登錄的用戶進程信息
last命令查詢成功登錄到系統的用戶
lastb命令查詢登錄失敗的用戶記錄
3、程序日誌:由程序自己維護日誌記錄
例如http使用access_log記錄客戶訪問事件,error_log記錄訪問錯誤事件。