2021-05-12 14:32:11
CentOS 7檔案系統與紀錄檔分析詳解
2020-06-16 16:30:48
Linux 檔案系統
在處理 Linux 系統出現的各種故障時,故障的症狀是最易發現的,而導致這一故障的原因才是最終排除故障的關鍵。熟悉 Linux 系統中常見的紀錄檔檔案,了解一般故障的分析與解決辦法,將有助於管理員快速定位故障點、“對症下藥”、並及時解決各種系統問題。
inode 與 block 詳解
-
檔案儲存再硬碟上,硬碟最小儲存單位是“磁區”,每個磁區儲存512位元組
-
檔案資料包括元資訊與實際資料
-
元資訊包含檔案屬性資訊,檔案開啟來輸入的內容為實際資料
-
block(塊)
- 連續的八個磁區組成一個block (4k)
- 是檔案存取的最小單位
- inode(索引節點)
- 中文譯名為“索引節點”,也就i節點
- 用於儲存檔案元資訊
inode的內容
inode包含檔案的元資訊
- 檔案的位元組數
- 檔案擁有著的User ID
- 檔案的Group ID
- 檔案的讀、寫、執行許可權
- 檔案的時間戳
- ……
使用stat命令檢視inode資訊
[root@localhost mnt]# stat abc.txt //檢視abc檔案inode資訊 檔案:"abc.txt" 大小:12 塊:8 IO 塊:4096 普通檔案 裝置:802h/2050d Inode:18123362 硬連結:1 許可權:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 環境:unconfined_u:object_r:mnt_t:s0 最近存取:2019-09-02 04:12:18.210370997 +0800 最近更改:2019-09-02 04:12:18.210370997 +0800 最近改動:2019-09-02 04:12:18.210370997 +0800 建立時間:-
Linux系統檔案三個主要的時間屬性
- ctime(change time):最後一次改變檔案或目錄(屬性)的時間
- atime(access time):最後一次存取檔案或目錄的時間
- mtime(modify time):最後一次修改檔案或目錄(內容)的時間
目錄檔案的結構
- 目錄也是檔案
- 目錄檔案的結構
- 每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案
- Linux系統內部不使用檔名,而使用inode號命來識別檔案
- 對於使用者來說,檔名只是inode號碼便於識別的別稱
inode的號碼
-
使用者通過檔名開啟檔案時,系統內部的過程
- 系統找到這個檔名對應的inode號碼
- 通過inode號碼,獲取inode資訊
- 根據inode資訊,找到檔案資料所在的block,讀出資料
- 檢視inode號碼的方法
- ls -i命令:檢視檔名對應的inde號碼
[root@localhost mnt]# ls -i abc.txt //檢視檔案節點資訊 18123362 abc.txt
inode的大小
-
inode也會消耗硬碟空間,每個inode的大小,一般時128位元組或256位元組
-
格式化檔案系統時確定inode的總數
- 使用df -i命令可以檢視每個硬碟分割區的inode總數和已經使用的數量
[root@localhost mnt]# df -i //檢視分割區節點資訊 檔案系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點 /dev/sda2 10485760 121203 10364557 2% / devtmpfs 229708 376 229332 1% /dev tmpfs 233381 1 233380 1% /dev/shm tmpfs 233381 560 232821 1% /run tmpfs 233381 16 233365 1% /sys/fs/cgroup /dev/sda5 5241856 146 5241710 1% /home /dev/sda1 3145728 328 3145400 1% /boot tmpfs 233381 6 233375 1% /run/user/42 tmpfs 233381 17 233364 1% /run/user/0 /dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
inode的特殊作用
- 由於inode號碼與檔名分離,導致一些Linux系統具有以下的現象
- 當檔名包換特殊字元,可能無法正常刪除檔案,直接刪除inode,也可以刪除檔案
- 按節點號刪除檔案命令:find ./* -inum [節點號] -delete
[root@localhost mnt]# ls -i 16777284 ac1.txt 18123362 ac2.txt 18123366 ac3.txt 18123370 ac4.txt 18123371 ac5.txt [root@localhost mnt]# find ./* -inum 16777284 -delete [root@localhost mnt]# ls -i 18123362 ac2.txt 18123366 ac3.txt 18123370 ac4.txt 18123371 ac5.txt
- 移動或重新命名檔案時,只改變檔名,不影響inode號碼
[root@localhost mnt]# ls -i 18123362 ac2.txt 18123366 ac3.txt 18123370 ac4.txt 18123371 ac5.txt [root@localhost mnt]# mv ac2.txt /opt [root@localhost mnt]# ls -i /opt 18123362 ac2.txt 1389838 rh
- 開啟一個檔案後,系統通過inode號碼來識別該檔案,不再考慮檔名
存取檔案的簡單流程
xfs 型別檔案備份和恢復
xfs檔案的恢復需要我們先把檔案備份到另一塊磁碟,當檔案損壞時可以通過備份的檔案進行恢復(這裡面的備份檔案是通過對檔案做固定格式的壓縮來進行備份)。
- xfs 型別的檔案可使用 xfsdump 與 xfsrestore 工具進行備份恢復。若系統中未安裝xfsdump 與 xfsrestore 工具,可以通過yum來安裝工具。
[root@localhost mnt]# yum install xfsdump -y 已載入外掛:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn 正在解決依賴關係 --> 正在檢查事務 ---> 軟體包 xfsdump.x86_64.0.3.1.4-1.el7 將被 升級 ---> 軟體包 xfsdump.x86_64.0.3.1.7-1.el7 將被 更新 ...//省略部分內容...
-
命令格式
xfsdump -f 備份存放位置 要備份的路徑或裝置檔案
-
xfsdump 的備份級別有兩種
- 0:表示完全備份(預設為0)
- 1~9:表示增量備份
- 常用的備份引數
- -f:指定備份檔案目錄
- -L:指定標籤 session label
- -M:指定裝置標籤 media label
- -s:備份單個檔案,-s 後面不能直接跟路徑。
[root@localhost ~]# fdisk /dev/sdb //建立新磁碟 歡迎使用 fdisk (util-linux 2.23.2)。 更改將停留在記憶體中,直到您決定將更改寫入磁碟。 使用寫入命令前請三思。 Device does not contain a recognized partition table 使用磁碟識別符號 0x57599cea 建立新的 DOS 磁碟標籤。 命令(輸入 m 獲取幫助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分割區號 (1-4,預設 1): 起始 磁區 (2048-41943039,預設為 2048): 將使用預設值 2048 Last 磁區, +磁區 or +size{K,M,G} (2048-41943039,預設為 41943039): 將使用預設值 41943039 分割區 1 已設定為 Linux 型別,大小設為 20 GiB 命令(輸入 m 獲取幫助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁碟。 [root@localhost ~]# mkfs.xfs /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 [root@localhost ~]# mkdir /opt/data //建立掛載點 [root@localhost ~]# mount /dev/sdb1 /opt/data //掛載建立的磁碟 [root@localhost ~]# cp /etc/passwd /opt/data //將passwdd目錄複製到掛載的磁碟中 [root@localhost ~]# ls /opt/data //檢視檔案 passwd [root@localhost ~]# xfsdump -f /mnt/xfs_dump /dev/sdb1 //使用命令備份檔案 xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control ============================= dump label dialog ============================== please enter label for this dump session (timeout in 300 sec) -> xfs_dump //輸入備份的檔名 session label entered: "xfs_dump" --------------------------------- end dialog --------------------------------- xfsdump: level 0 dump of localhost.localdomain:/opt/data xfsdump: dump date: Mon Sep 2 05:27:29 2019 xfsdump: session id: 96c17954-e969-4041-9d9e-4bd59746ddab xfsdump: session label: "xfs_dump" xfsdump: ino map phase 1: constructing initial dump list xfsdump: ino map phase 2: skipping (no pruning necessary) xfsdump: ino map phase 3: skipping (only one dump stream) xfsdump: ino map construction complete xfsdump: estimated dump size: 25216 bytes xfsdump: /var/lib/xfsdump/inventory created ============================= media label dialog ============================= please enter label for media in drive 0 (timeout in 300 sec) -> sdb1 //輸入要備份裝置 media label entered: "sdb1" --------------------------------- end dialog --------------------------------- xfsdump: creating dump session media file 0 (media 0, file 0) xfsdump: dumping ino map xfsdump: dumping directories xfsdump: dumping non-directory files xfsdump: ending media file xfsdump: media file size 24264 bytes xfsdump: dump size (non-dir files) : 2592 bytes xfsdump: dump complete: 13 seconds elapsed xfsdump: Dump Summary: xfsdump: stream 0 /mnt/xfs_dump OK (success) xfsdump: Dump Status: SUCCESS //備份成功 [root@localhost ~]# rm -rf /opt/data/* //刪除磁碟中檔案 [root@localhost ~]# ls /opt/data //檢視檔案是否刪除 [root@localhost ~]# xfsrestore -f /mnt/xfs_dump /opt/data //執行命令恢復檔案 xfsrestore: using file dump (drive_simple) strategy xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control xfsrestore: searching media for dump xfsrestore: examining media file 0 xfsrestore: dump description: xfsrestore: hostname: localhost.localdomain xfsrestore: mount point: /opt/data xfsrestore: volume: /dev/sdb1 xfsrestore: session time: Mon Sep 2 05:27:29 2019 xfsrestore: level: 0 xfsrestore: session label: "xfs_dump" xfsrestore: media label: "sdb1" xfsrestore: file system id: 2e3df4e8-dd92-46f7-84ca-f254c4e579bd xfsrestore: session id: 96c17954-e969-4041-9d9e-4bd59746ddab xfsrestore: media id: d27aafc8-a405-4a8f-b7f0-1a018a7026ee xfsrestore: using online session inventory xfsrestore: searching media for directory dump xfsrestore: reading directories xfsrestore: 1 directories and 1 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: restore complete: 0 seconds elapsed xfsrestore: Restore Summary: xfsrestore: stream 0 /mnt/xfs_dump OK (success) xfsrestore: Restore Status: SUCCESS [root@localhost ~]# ls /opt/data //檢視檔案是否恢復 passwd //成功恢復檔案
- xfsdump使用的限制
- 只能備份已掛載的檔案系統
- 必須使用root的許可權才能操作
- 只能備份XFS檔案系統
- 備份後的資料只能讓xfsrestore解析
- 不能備份兩個具有相同UUID的檔案系統
紀錄檔檔案
紀錄檔的功能
- 用於記錄系統、程式執行中發生的各種事件
- 通過閱讀紀錄檔,有助於診斷和解決系統故障
紀錄檔檔案的分類
-
核心及系統紀錄檔
- 由系統服務syslog統一進行管理,紀錄檔格式基本相似
-
使用者紀錄檔
- 記錄系統使用者登入及退出系統的相關資訊
- 程式紀錄檔
- 由各種應用程式獨立管理的紀錄檔檔案,記錄格式不統一
紀錄檔儲存位置
- 預設位於/var/log目錄下
主要紀錄檔檔案介紹
-
核心及公共訊息紀錄檔:/var/log/messages
-
計劃任務紀錄檔:/var/log/cron
-
系統引導紀錄檔:/var/log/dmesg
-
郵件系統紀錄檔:/var/log/maillog
- 使用者登入紀錄檔:/var/log/lastlog、 /var/log/secure、 /var/log/wtmp、 /var/run/btmp
紀錄檔的管理
- 由系統服務rsyslogd統一管理
- 軟體包:reyelog-7.4.7-16.el7.x86_64
- 主要程式:/sbin/rsyslogd
- 組態檔:/etc/rsyslog.conf
[root@localhost ~]# vim /etc/rsyslog.conf //檢視紀錄檔檔案設定資訊 # rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### # The imjournal module bellow is now used as a message source instead of imuxsock. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read from journald) #$ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 #### GLOBAL DIRECTIVES #### # Where to place auxiliary files $WorkDirectory /var/lib/rsyslog # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat ...//省略部分內容... [root@localhost ~]# cd /var/log //檢視紀錄檔檔案目錄 [root@localhost log]# ls anaconda dmesg libvirt rhsm tallylog Xorg.0.log audit dmesg.old maillog sa tuned Xorg.0.log.old boot.log firewalld messages samba vmware-vgauthsvc.log.0 Xorg.1.log btmp gdm ntpstats secure vmware-vmsvc.log Xorg.9.log chrony glusterfs pluto speech-dispatcher vmware-vmusr.log yum.log cron grubby_prune_debug ppp spooler wpa_supplicant.log cups lastlog qemu-ga sssd wtmp
-
檢視系統紀錄檔檔案
[root@localhost log]# vim messages //檢視系統紀錄檔檔案 Aug 10 03:53:40 localhost journal: Runtime journal is using 8.0M (max allowed 91.1M, trying to leave 136.7M free of 903.6M available → current limit 91.1M). Aug 10 03:53:40 localhost kernel: Initializing cgroup subsys cpuset Aug 10 03:53:40 localhost kernel: Initializing cgroup subsys cpu Aug 10 03:53:40 localhost kernel: Initializing cgroup subsys cpuacct Aug 10 03:53:40 localhost kernel: Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017 Aug 10 03:53:40 localhost kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=UUID=729c9a26-dfdc-40f9-ae91-1ade55be51bb ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8 Aug 10 03:53:40 localhost kernel: Disabled fast string operations Aug 10 03:53:40 localhost kernel: e820: BIOS-provided physical RAM map: Aug 10 03:53:40 localhost kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable Aug 10 03:53:40 localhost kernel: BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved Aug 10 03:53:40 localhost kernel: BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved ...//省略部分內容...
- last命令檢視使用者登入紀錄檔
[root@localhost log]# last root pts/0 192.168.144.1 Mon Sep 2 05:17 still logged in reboot system boot 3.10.0-693.el7.x Mon Sep 2 05:17 - 05:58 (00:40) root pts/0 192.168.144.1 Mon Sep 2 04:11 - crash (01:05) root :0 :0 Mon Sep 2 04:11 - crash (01:05) reboot system boot 3.10.0-693.el7.x Mon Sep 2 04:10 - 05:58 (01:47) root pts/0 :0 Sun Aug 25 01:10 - 01:10 (00:00) root :0 :0 Sun Aug 25 01:10 - crash (8+03:00) ...//省略部分內容...
- lastb檢視使用者登入次數紀錄檔
[root@localhost log]# lastb root :0 :0 Sun Aug 25 01:10 - 01:10 (00:00) root :1 :1 Sat Aug 10 06:26 - 06:26 (00:00) btmp begins Sat Aug 10 06:26:22 2019
-
檢視程式紀錄檔檔案
1、安裝httpd服務,搭建Apache網站服務;然後關閉防火牆,使宿主機可以存取
[root@localhost ~]# yum install httpd -y //安裝httpd服務 已載入外掛:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn 正在解決依賴關係 --> 正在檢查事務 ---> 軟體包 httpd.x86_64.0.2.4.6-89.el7.centos.1 將被 安裝 ...//省略部分內容... [root@localhost ~]# systemctl start httpd //開啟服務 [root@localhost ~]# systemctl stop firewalld.service //關閉防火牆 [root@localhost ~]# setenforce 0 [root@localhost ~]# cd /var/log //檢視紀錄檔檔案目錄,看是否生成httpd紀錄檔聞檔案目錄 [root@localhost log]# ls anaconda dmesg lastlog qemu-ga sssd wtmp audit dmesg.old libvirt rhsm tallylog Xorg.0.log boot.log firewalld maillog sa tuned Xorg.0.log.old btmp gdm messages samba vmware-vgauthsvc.log.0 Xorg.1.log chrony glusterfs ntpstats secure vmware-vmsvc.log Xorg.9.log cron grubby_prune_debug pluto speech-dispatcher vmware-vmusr.log yum.log cups httpd ppp spooler wpa_supplicant.log
2、通過宿主機存取搭建的網站後,檢視系統程式的紀錄檔檔案
[root@localhost log]# cd httpd //進入httpd程式目錄 [root@localhost httpd]# ls access_log error_log [root@localhost httpd]# vim access_log //檢視程式紀錄檔檔案 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /noindex/css/bootstrap.min.css HTTP/1.1" 200 19341 "http://192.168.144.133/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /noindex/css/open-sans.css HTTP/1.1" 200 5081 "http://192.168.144.133/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /images/apache_pb.gif HTTP/1.1" 200 2326 "http://192.168.144.133/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /images/poweredby.png HTTP/1.1" 200 3956 "http://192.168.144.133/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.woff HTTP/1.1" 404 241 "http://192.168.144.133/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.woff HTTP/1.1" 404 239 "http://192.168.144.133/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 192.168.144.1 - - [02/Sep/2019:06:12:48 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://192.168.144.133/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
紀錄檔訊息的級別
- 0 EMERG(緊急):會導致主機系統不可用的情況
- 1 ALERT(警告):必須馬上採取措施解決問題
- 2 CRIT (嚴重):比較嚴重的情況
- 3 ERR (錯誤):執行出現錯誤
- 4 WARNING(提醒):可能會影響系統功能的事件
- 5 NOTICE (注意):不會影響系統但值得注意
- 6 INFO(資訊):一般資訊
- 7 DEBUG (偵錯):程式設計師偵錯資訊
紀錄檔管理策略
- 及時做好備份和歸檔
- 延長紀錄檔儲存期限
- 控制紀錄檔存取許可權
- 紀錄檔中可能會包含各類敏感資訊,如賬戶、口令等
集中管理紀錄檔
-
將伺服器的紀錄檔檔案發到統一的紀錄檔檔案伺服器
- 便於紀錄檔資訊的同一收集、整理和分析
- 杜絕紀錄檔資訊的意外丟失、惡意篡改或刪除
相關文章