/etc/init.d/syslog stop
echo 1 > /proc/sys/vm/block_dump
sleep 60
dmesg | awk '/(read|write|dirtied)/ end ' |sort -nr |awk '' | \
head -n 10
#dmesg | egrep "read|write|dirtied" | egrep -o '([a-za-z]*)' | sort | uniq -c | sort -rn | head
echo 0 > /proc/sys/vm/block_dump
/etc/init.d/syslog start
dmesg -c && echo 1 >/proc/sys/vm/block_dump && sleep 3 && echo 0 > /proc/sys/vm/block_dump&& dmesg | grep sda
dmesg -c && echo 1 >/proc/sys/vm/block_dump && sleep 3 && echo 0 > /proc/sys/vm/block_dump&& dmesg | grep sdh
flush-8:48(1199): dirtied inode 18942347 (00016c30) on sdd1
flush-8:48(1199): write block 151972088 on sdd1
flush-8:48(1199): write block 151972096 on sdd1
通過dmesg資訊可以看到io正在寫那些檔案,有程序號,inode號,檔名和磁碟裝置名;但每個檔案寫了多少呢,僅僅通過dirtied inode就看不出來了,還需要分析write block,後面的數字並不是真正的塊號,而是核心io層獲取的扇區號,除以8即為塊號,然後根據debugfs工具的icheck和ncheck選項,就可以獲取該檔案系統塊屬於哪個具體檔案,具體請google之。
①df ./檢視檔案系統
②debugfs 檔案系統
通過blocks 檔案路徑看檔案的塊號。乙個檔案佔據的塊號並不一定連續。
dd if=檔案系統路徑 of=輸出路徑 bs=4096 count=1 skip=塊號
例如:dd if=/dev/sda5 of=/root/out.txt bs=4096 count=1 skip=10086
/root/out.txt檔案內容就是從塊號中讀到的內容 bs是塊大小(這裡為4k) count表示連續讀幾塊 skip是從第幾塊開始讀
乙個塊一般是4k大小,也可以在磁碟分割槽格式化時指定大小。乙個檔案可能對應多個塊,但乙個塊的內容只能屬於乙個檔案,不足的地方用00佔據。我們檢視out2.txt的內容:
注意:這裡讀指定塊號內容的寫入方式是會覆蓋掉原檔案的內容的(如果原本有內容的話)
如何使用Debugfs查詢Linux檔案建立時間
在linux系統中,所有的東西都被當作乙個檔案來對待,關於檔案的關鍵元資料,如建立和修改日期都儲存在inodes中。我們已經看了如何在linux系統中使用stat httpie和date命令檢查檔案的最後修改日期。在本教程中,我們將向您展示如何使用debugfs命令查詢檔案的建立時間。使用debug...
Linux find 查詢檔案
在日誌資料夾下判斷是否有web伺服器的日誌資料夾,寫了個指令碼 bin bash cd wls annuity acc for sys in cat wiiserver name list.txt do find logs sys name sys xargs echo en n 123.txt f...
Linux查詢檔案
which locate whereis find which命令 用途 查詢可執行檔案並顯示所在的位置,適用於系統命令,shell命令無法查詢 which lsb release 檢視命令的絕對路徑,即這個可執行檔案的位置 usr bin lsb release which cd 查詢不到路徑,c...