Linux文件系統與日誌文件(節點inode、塊block、恢復誤刪文件)

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記錄訪問錯誤事件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章