inode和block概述一:

1、文件數(shù)據(jù)包括源信息與實(shí)際數(shù)據(jù)

文件存儲(chǔ)在硬盤上,硬盤最小存儲(chǔ)單位是“扇區(qū)。每個(gè)扇區(qū)存儲(chǔ)512字節(jié)”

block (塊):

連續(xù)的八個(gè)扇區(qū)組成一個(gè)block(4k)

!是文件存取的最小單位,扇區(qū)是最小的存儲(chǔ)單位

2、inode:

(索引節(jié)點(diǎn),也叫i節(jié)點(diǎn))

用于存儲(chǔ)文件元信息

備注:一個(gè)文件必須占用一個(gè)inode,但是至少占用一個(gè)block(就是說只能同時(shí)擁有一個(gè)inode號(hào),可以擁有多個(gè)block)

3、目錄文件的結(jié)構(gòu):

目錄也是一種文件,此外目錄文件的結(jié)構(gòu)如下圖所示


4、重點(diǎn):
每個(gè)文件都有一個(gè)inode號(hào)碼,操作系統(tǒng)使用inode號(hào)碼來識(shí)別不同的文件
linux系統(tǒng)內(nèi)部不使用文件名,而是使用inode號(hào)進(jìn)行識(shí)別文件
對(duì)于用戶,文件名只是inode號(hào)碼便于識(shí)別的別稱


inode和block概述二:

文件是存儲(chǔ)在硬盤上的,硬盤的最小存儲(chǔ)單位叫做扇區(qū),每個(gè)扇區(qū)存儲(chǔ)512字節(jié)

一般連續(xù)八個(gè)扇區(qū)組成一個(gè)塊,一塊是4k大小,是文件存取的最小單位,操作系統(tǒng)讀取硬盤時(shí)候,是一次性連續(xù)讀取多個(gè)扇區(qū),就是一個(gè)塊一個(gè)塊地讀取的。

文件數(shù)據(jù)包括實(shí)際數(shù)據(jù)與元信息,文件數(shù)據(jù)存儲(chǔ)在“塊中,存儲(chǔ)文件元信息的區(qū)域叫做inode。因此,一個(gè)文件必須占用一個(gè)inode,并且至少占用一個(gè)block

inode不包含文件名,文件名是存放在目錄當(dāng)中的,linux系統(tǒng)中一切皆為文件,因此目錄也是一種文件

每個(gè)inode都有一個(gè)號(hào)碼,操作系統(tǒng)用inode號(hào)來識(shí)別不同的文件,linux系統(tǒng)內(nèi)部不使用文件名去識(shí)別文件的(是使用inode號(hào)碼去識(shí)別文件的,每一個(gè)inode號(hào)碼一一對(duì)應(yīng)一個(gè)文件名)。

所以,當(dāng)用戶在linux系統(tǒng)中試圖訪問一個(gè)文件,系統(tǒng)會(huì)先根據(jù)文件名去查找它對(duì)應(yīng)的inode號(hào)碼,通過inode號(hào)碼,獲取inode信息。根據(jù)inode信息,查看該用戶是否具有訪問該文件的權(quán)限,如果有就指向相應(yīng)的數(shù)據(jù)block,并且讀取數(shù)據(jù)。如果沒有就拒絕


inode包含的元信息

文件的字節(jié)數(shù)

文件擁有者的USER ID

文件的GROUP ID

文件的讀、寫、執(zhí)行權(quán)限

文件時(shí)間戳

用stat命令可以查看某個(gè)文件的inode信息

比如: stat 123.txt ;查看123.txt文件的inode號(hào)

實(shí)操:使用stat命令


備注:
1、以上兩圖是一份英文語言一份是中文語言對(duì)照
2、change time (ctime):最后一次改變文件或者目錄屬性的時(shí)間
3、access time (atime):最后一次訪問文件或者目錄的時(shí)間
4、modify time(mtime): 最后一次修改文件或者目錄內(nèi)容的時(shí)間

inode號(hào)碼

用戶通過文件名打開文件時(shí),系統(tǒng)內(nèi)部的過程
1、系統(tǒng)找到這個(gè)文件名對(duì)應(yīng)的inode號(hào)碼
2、通過inode號(hào)碼,獲取inode信息
3、根據(jù)inode信息,找到文件數(shù)據(jù)所在的block,并讀出數(shù)據(jù)
查看inode號(hào)碼的方法:
1、ls -i命令:查看文件對(duì)應(yīng)的inode號(hào)碼
ls -i 文件名

2、stat命令:查看文件inode信息中的inode號(hào)碼
stat 文件名
inode的大小
inode也會(huì)消耗磁盤空間
每個(gè)inode的大小一般為128字節(jié)或者256字節(jié)
格式化文件系統(tǒng)時(shí)確定inode的總數(shù)
使用df -i命令可以查看每個(gè)硬盤分區(qū)的inode總數(shù)與已經(jīng)使用的數(shù)量
補(bǔ)充:
1、inode也會(huì)消耗硬盤空間,所以格式化的時(shí)候,操作系統(tǒng)會(huì)自動(dòng)將硬盤分成兩個(gè)區(qū)域,一個(gè)是數(shù)據(jù)區(qū)域,存放文件數(shù)據(jù);另一個(gè)是inode區(qū)域,存放inode包含的信息。,每個(gè)inode的大小,一般是128字節(jié)或者256個(gè)字節(jié)。
通常情況下不需要關(guān)注單個(gè)inode的大小,而是需要重點(diǎn)關(guān)注inode的總數(shù),inode的總字節(jié)在格式化的時(shí)候就給定了,執(zhí)行“df -i”命令即可查看每個(gè)硬盤分區(qū)對(duì)應(yīng)的inode總數(shù)和已經(jīng)使用的inode數(shù)量。
2、由于inode號(hào)碼與文件名稱分離,導(dǎo)致linux系統(tǒng)具備以下幾特有的現(xiàn)象
a、文件名包含特殊字符,可能無法正常刪除,這時(shí)候直接刪除inode,能起到刪除文件的作用
b、移動(dòng)文件或者重命名文件,只是改變文件名字,不影響inode號(hào)
c、開打一個(gè)文件后,系統(tǒng)以inode號(hào)來識(shí)別這個(gè)文件,且不再考慮文件名
4、文件數(shù)據(jù)被保存修改后,會(huì)生成一個(gè)新的inode號(hào)
刪除inode號(hào)的兩種方式
find ./ -inum (inode號(hào)) -exec rm -i {} /;
find ./ -inum (inode號(hào)) -delete

inode號(hào)的特殊作用

由于inode號(hào)碼與文件名分離,導(dǎo)致一些linux系統(tǒng)具有以下的現(xiàn)象:
1、當(dāng)文件名包含特殊字符,可能無法正常刪除文件,直接刪除inode,也可以刪除文件
2、移動(dòng)或者重命名文件時(shí),只改變文件名,不影響inode號(hào)碼
3、打開一個(gè)文件后,系統(tǒng)通過inode號(hào)碼來識(shí)別文件,不再考慮文件名
4、使用vi編輯器修改文件數(shù)據(jù)保存后,會(huì)生成一個(gè)新的inode號(hào)碼。但是,如果使用ehco進(jìn)行“>”的追加內(nèi)容。則不會(huì)變更inode號(hào)。

小結(jié)

1、硬盤分區(qū)后的結(jié)構(gòu)


注意:元信息和數(shù)據(jù)為文件數(shù)據(jù)的組成
2、linux系統(tǒng)中系統(tǒng)訪問文件的過程

鏈接文件

為文件或者目錄建立鏈接文件
鏈接文件的分類(下圖所示)

鏈接文件的命令:
1、硬鏈接
ln 源文件 目標(biāo)位置; 用的很少
2、軟連接!
ln -s 源文件 目標(biāo)位置; 實(shí)際工作環(huán)境經(jīng)常使用!

實(shí)驗(yàn):inode號(hào)節(jié)點(diǎn)耗盡故障處理

使用fdisk創(chuàng)建分區(qū)sdb1,大小30M即可

fdisk /dev/sdb1

mkfs -t ext4 /dev/sdb1

mkdir /test

mount /dev/sdb1 /test

df -i

模擬inode節(jié)點(diǎn)耗盡

for ((i=1; i<=7680; i++)); do touch /test/file$i;done

或者 touch {1..7680}.txt

df -i

df -hT

刪除文件恢復(fù)

rm -rf /test/*

df -i

df -hT
實(shí)驗(yàn)操作:




注備:實(shí)驗(yàn)結(jié)束后,如果不是虛擬機(jī)的話,直接rm -rf /test/*全部刪除就行

實(shí)驗(yàn):EXT類型文件恢復(fù)

extundelete是一個(gè)開源的linux數(shù)據(jù)恢復(fù)工具,支持ext3、ext4文件系統(tǒng)。(備注:ext4只能運(yùn)行在centos6版本恢復(fù))
步驟:
1、使用fdisk創(chuàng)建分區(qū)/dev/sdc1,格式化成ext3系統(tǒng)文件
fdisk /dev/sdc
partprobe /dev/sdc ;此項(xiàng)命令是可以不重啟系統(tǒng),直接添加磁盤
mkfs -t ext3 /dev/sdc1
mkdir /test
mount /dev/sdc1 /test
df -h

2、安裝依賴包
yum install -y e2fsprogs-devel e2fsprogs-libs
接著編譯安裝extundelete(網(wǎng)上先自己下壓縮包)

3、進(jìn)行模擬刪除并恢復(fù)的操作
cd /test
echo a>a
echo a>b
echo a>c
echo a>d
ls
extundelete /dev/sdc1 --inode 2 ;查看文件系統(tǒng)/dev/sdc1下存放在哪些文件,此外i節(jié)點(diǎn)從2開始的,2代表該文件系統(tǒng)最開始的目錄
rm -rf a b
extundelete /dev/sdc1 --inode 2
cd ~
umount /test
extundelete /dev/sdc1 --restore-all ;恢復(fù)/dev/sdc1文件系統(tǒng)下的所有內(nèi)容
#最后:在當(dāng)前目錄下會(huì)出現(xiàn)一個(gè)RECOVERED_FILES/目錄,里面保存了已經(jīng)恢復(fù)的文件
ls RECOVERED_FILES/ ;查看里面的目錄
操作:如上圖步驟所示 (注意:自己先網(wǎng)上下載好extundelete-0.2.4.tar.bz2
后再進(jìn)行試驗(yàn))




實(shí)驗(yàn):恢復(fù)XFS類型的文件

Centos 7系統(tǒng)默認(rèn)采用xfs類型文件,xfs類型的文件可以使用xfsdump、xfsdump工具進(jìn)行備份恢復(fù)。
1、xfsdump命令格式
xfsdump -f 備份存放位置 要備份的路徑或者設(shè)備文件
xfsdump的備份等級(jí)(默認(rèn)為0)
0 : 完全備份
1-9 :增量備份
xfsdump常用選項(xiàng):
-f:指定備份文件目錄
-L:指定標(biāo)簽session label
-M:指定設(shè)備標(biāo)簽 media label
-s:備份單個(gè)文件,- s 后面不能直接跟路徑
xfsdump的使用限制:
a、只能備份已掛載的文件系統(tǒng)
b、必須使用root的權(quán)限才能操作
c、只能備份XFS文件系統(tǒng)
d、備份后的數(shù)據(jù)只能給xfsrestore解析
e、不能備份兩個(gè)具有相同UUID的文件系統(tǒng)
2、xfsrestore命令格式
xfsrestore -f 恢復(fù)文件位置 存放恢復(fù)后文件的位置

操作:
1、使用fdisk創(chuàng)建分區(qū) /dev/sdb1,并格式化成xfs文件系統(tǒng)。最后掛載mount /dev/sdb1 /data/
cd /data
cp /etc/passwd ./
mkdir test
touch abc.txt /test
2、使用xfsdump備份整個(gè)分區(qū)
rpm -qa | grep xfsdump
yum install -y xfsdump
xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1]
3、模擬數(shù)據(jù)丟失并使用xfsrestore
cd /data/
rm -rf /data/*
ls ;此時(shí)發(fā)現(xiàn)數(shù)據(jù)全部消失
xfsrestore -f /opt_sdb1 /data/ ;對(duì)data目錄進(jìn)行數(shù)據(jù)恢復(fù)

日志文件

日志的功能:

用于記錄系統(tǒng)、程序運(yùn)行中發(fā)生的各種事件

通過閱讀日志,有助于診斷和解決系統(tǒng)故障

日志文件的分類

內(nèi)核及系統(tǒng)日志

由系統(tǒng)服務(wù)rsyslog統(tǒng)一進(jìn)行管理,日志格式基本相似

主配置文件/etc/rsyslog.conf

用戶日志

記錄系統(tǒng)用戶登錄與退出系統(tǒng)的相關(guān)信息

程序日志

由各種應(yīng)用程序獨(dú)立管理的日志文件,記錄格式不統(tǒng)一

如何去書寫日志

日志保存的位置

默認(rèn)位于:/var/log ;系統(tǒng)或者用戶日志

主要日志內(nèi)容介紹

補(bǔ)充:系統(tǒng)服務(wù)rsyslog的安裝包與主程序

常見的一些日志

1、內(nèi)核與公共消息日志(排障用)

/var/log/messages: 記錄linux內(nèi)核消息的各種應(yīng)用程序的公共日志信息,包括啟動(dòng)、IO錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤、程序故障等。對(duì)于未使用獨(dú)立日志文件的應(yīng)用程序或者服務(wù),一般都可以從該日志中獲得相關(guān)的日志記錄信息

2、極化任務(wù)日志

/var/log/cron :記錄crond極化任務(wù)產(chǎn)生的時(shí)間信息

3、系統(tǒng)引導(dǎo)日志

/var/log/dmesg :記錄linux系統(tǒng)在引導(dǎo)過程中的各種事件信息

4、郵件登錄日志

/var/log/maillog : 記錄進(jìn)入或者發(fā)出系統(tǒng)電子郵箱活動(dòng)

5、用戶登錄日志

/var/log/secure :記錄用戶認(rèn)證相關(guān)的安全事件信息

/var/log/lastlog :記錄每個(gè)用戶最近的登錄事件(采用二進(jìn)制,需要相關(guān)轉(zhuǎn)碼工具)

/var/log/wtmp :記錄每個(gè)用戶登錄、注銷與系統(tǒng)啟動(dòng)和停機(jī)事件(采用二進(jìn)制,需要相關(guān)轉(zhuǎn)碼工具)

/var/run/btmp :記錄失敗的、錯(cuò)誤的登錄嘗試以及驗(yàn)證事件、二進(jìn)制格式

vim /etc/rsyslog.conf ;查看rsyslog.conf配置文件
之后開打后如下圖所示{設(shè)備.級(jí)別
動(dòng)作}

設(shè)備字段的說明:
auth:用戶認(rèn)證時(shí)產(chǎn)生的日志
authpriv:ssh、ftp等登錄信息的驗(yàn)證日志
daemon:一些守護(hù)進(jìn)程產(chǎn)生的日志
ftp:FTP產(chǎn)生的日志
lpr:打印相關(guān)活動(dòng)
mark:rsyslog內(nèi)部服務(wù)的信息,事件標(biāo)識(shí)
news:網(wǎng)絡(luò)新聞傳輸協(xié)議(nntp)產(chǎn)生的消息
syslog:系統(tǒng)日志
uucp:兩個(gè)unix之間的相關(guān)通訊
console:針對(duì)系統(tǒng)控制臺(tái)的消息
cron:系統(tǒng)執(zhí)行定時(shí)任務(wù)產(chǎn)生的日志
kern:系統(tǒng)內(nèi)核日志
local0~local7:自定義程序使用
mail:郵件日志
user:用戶進(jìn)程

linxu系統(tǒng)內(nèi)核消息的優(yōu)先級(jí)別

0 EMERG(緊急) 如系統(tǒng)崩潰
1 ALERT(警告) 如數(shù)據(jù)庫被破壞
2 CRIT (嚴(yán)重) 如硬盤錯(cuò)誤
3 ERR (錯(cuò)誤) 不是非常緊急的
4 WARNING (提醒) 需要提醒用戶的主要事件
5 NOTICE (注意) 需要注意的事件,無需處理
6 INFO (信息) 一般信息
7 DEBUG (調(diào)試) 調(diào)試程序時(shí)使用
none 沒有優(yōu)先級(jí),不記錄任何消息
日志的一般格式

公共日志 /var/log/messages文件的記錄格式
事件標(biāo)簽:消息發(fā)出的日期和時(shí)間
主機(jī)名:生成消息的計(jì)算機(jī)名稱
子系統(tǒng)名稱:發(fā)出消息的應(yīng)用程序
消息:消息的具體內(nèi)容
此外:程序自己維護(hù)日志記錄,httpd網(wǎng)站服務(wù)程序使用兩個(gè)日志文件:
access_log ;記錄客戶訪問時(shí)間
erro_log ;記錄錯(cuò)誤事件

用戶日志分析

保存了用戶登錄、退出系統(tǒng)等相關(guān)信息
/var/log/lastlog;最近的用戶登錄事件
/var/log/wtmp;用戶登錄、注銷與開關(guān)機(jī)的事件
/var/run/utmp:當(dāng)前擋路的每一個(gè)用戶的詳細(xì)信息
/var/log/secure;與用戶驗(yàn)證相關(guān)的安全事件
分析工具
users 、who、w、last、lastb
last命令用于查詢成功登錄系統(tǒng)的用戶記錄
lastb命令用于查詢登錄失敗的用戶記錄
由相應(yīng)的應(yīng)用程序獨(dú)立進(jìn)行管理
awk、sed、vim 是三大主要使用的工具
日志管理策略
及時(shí)做好備份與歸檔
a、命令/腳本+crontab
b、rsyslog
c、ELK/EFK
延長日志保存期限
控制日志訪問權(quán)限:各類敏感信息如賬戶、口令等
集中管理日志:
1、將服務(wù)器的日志統(tǒng)一發(fā)送到日志文件服務(wù)器
2、便于日志信息的統(tǒng)一收集、整理和分析
3、杜絕日志信息的意外丟失、惡意篡改與刪除

實(shí)驗(yàn):配置日志服務(wù)器

rsyslog是一個(gè)C/S架構(gòu),可以通過套接字來進(jìn)行監(jiān)聽記錄工作??梢曰赥CP和UDP工作。默認(rèn)的監(jiān)聽端口時(shí)514,只需要在MODULES打開即可
發(fā)送服務(wù)器:客戶端 192.168.206.20
收集服務(wù)器:192.168.206.30

步驟:
1、先關(guān)閉服務(wù)端和客戶端防火墻、selinux
setenforce 0
systemctl stop firewalld
systemctl disable firewalld

2、修改客戶端配置文件,并啟動(dòng)服務(wù)
vim /etc/rsyslog.conf
進(jìn)入文本后將下面四行的注釋取消掉

接著添加以下內(nèi)容

$template myFormat, "%timestamp% %hostname% %syslogseverity-text% %syslogtag% %msg%/n"
$ActionFileDefaultTemplate myFormat
*.info;mail.none;authpriv.none;cron.none @@192.168.80.30:514

#%timestamp% :時(shí)間戳
#%fromhost-ip告 : 接收的信息來自于哪個(gè)節(jié)點(diǎn)的IP
#hostname號(hào): 主機(jī)名
#%syslogseverity-text% : 日志等級(jí)
#%syslogtag% :服務(wù)進(jìn)程br/>#%msg%:日志內(nèi)容
#接收方IP前面一個(gè)@表示TCP傳輸,兩個(gè)@表示UDP傳輸
systemcrl restart rsyslog

修改服務(wù)端配置文件,并啟動(dòng)服務(wù)
vim /etc/rsyslog.conf
#將下面四行前的注釋取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
#添加以下內(nèi)容
$AllowedSender tcp, 192.168. 80.0/24 #允許192.168.80.0網(wǎng)段內(nèi)的主機(jī)以tcp協(xié)議來傳輸
$template Remote,"/data/1og/%romhost-ip%/&fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY8.1og"
#定義模板,接受日志文件路徑,區(qū)分了不同主機(jī)的日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote #過濾掉server 本機(jī)的日志
systemcrl restart rsyslog

//在服務(wù)端創(chuàng)建/data/log目錄,以接受大量日志信息,配置文件中的路徑應(yīng)當(dāng)與該路徑一致
mkdir -p /data/log
//驗(yàn)證
客戶端的終端命令輸入或者重啟一個(gè)服務(wù)
logger "hello world"
在服務(wù)端查看日志文件
tree /data/log/
(如果是最小化安裝,請(qǐng)使用yum本地安裝tree)

Centos7 專有日志管理工具

1、查看內(nèi)核日志(不顯示應(yīng)用日志)
journalctl -k
2、查看系統(tǒng)本次啟動(dòng)的日志
journalctl -b [-0] ;"0"指上上次啟動(dòng)的日志
3、查看上一次啟動(dòng)的日志
journalctl -b -1
4、顯示尾部指定行數(shù)的日志
journalctl -n 20 [-f]
備注:查看的是/var/log/messages的日志。但是格式上有所調(diào)整。如主機(jī)名格式不一樣而已
5、!查看某個(gè)服務(wù)的日志
journalctl -u httpd.service [-f]

6、查看指定進(jìn)程的日志
journalctl _PID=1 ;此處的是查看init進(jìn)程(詳情見我的開機(jī)引導(dǎo)那篇)
7、查看指定用戶的日志
journalctl _UID=0 --since today ;查今天的root用戶的日志,用戶UDP=0的就是root用戶
或者
journalctl -xe
-x :是目錄的意思,在報(bào)錯(cuò)的信息下會(huì)附加解決問題的網(wǎng)址
-e:(pager-end)從末尾開始看
8、!查看所有日志(默認(rèn)情況下,只保留本次啟動(dòng)的日志)
journalctl
journalctl -r :r表示倒敘