主頁 > 作業系統 > Linux 檔案系統與日志分析

Linux 檔案系統與日志分析

2022-10-16 07:11:00 作業系統

導圖

1.inode表結構

每個檔案的屬性資訊,比如:檔案的大小,時間,型別,權限等,稱為檔案的元資料(meta data)

元資料是存放在inode(index node)表中,inode 表中有很多條記錄組成,第一條記錄對應的存放了一個

檔案的元資料資訊,

1.1硬鏈接和軟連接

硬連接 同一個檔案取不同的名或者叫多個名字(比如 蘇軾 字子瞻 號東坡居士 蘇二 謚號文忠 )不支持檔案夾,創建一個連接數加一,多路徑訪問,

軟連接 類似于windows里快捷方式,軟連接,符號連接

1.2inode表中存放的對應資料

  • inode number 節點號
  • 檔案的型別
  • 檔案的權限
  • UID
  • GID
  • 鏈接數(指向這個檔案名路徑名稱個數)
  • 該檔案的大小和不同的時間戳
  • 指向磁盤上檔案的資料塊指標
  • 有關檔案的其他資料
查看inode號
[root@localhost data]# ls
123  1.txt  2.txt  3.txt  4.txt  5.txt  data1  data2

[root@localhost data]# ls -i     //方法1
35802872 123  35802838 1.txt  35802839 2.txt  35802840 3.txt  35802841 4.txt  35802842 5.txt   2420054 data1  35802875 data2

[root@localhost data]# stat /data/1.txt  //方法2
  檔案:"/data/1.txt"
  大小:0               塊:0          IO 塊:4096   普通空檔案
設備:fd00h/64768d      Inode:35802838    硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:default_t:s0
最近訪問:2022-10-12 18:52:31.654822781 +0800
最近更改:2022-10-12 18:52:31.654822781 +0800
最近改動:2022-10-12 18:52:31.654822781 +0800
創建時間:-

3個時間戳:
最近訪問atime:最后一次差看檔案
最近更改mtime:最近更改檔案內容的時間,注意:更改完內容之后,ctime也會改變
最近改動ctime:最近更改檔案元資訊的時間,比如改變權限等

1.3用戶訪問檔案的原理/程序:

  • 用戶訪問檔案時 先去查找 自己 檔案夾中的目錄項 ,
  • 檔案名和inode之間對應的關系,
  • 通過 inode號利用指標(直接指標/間接指標)去指向 實際資料

直接指標:直接指向資料塊

間接指標:不直接指向資料塊,要經過中間資料塊,最后指向資料塊

圖解:

 

1.4補充:檔案相關

  • 檔案是存盤在硬碟上的,硬碟的最小存盤單位叫做“扇區”(sector),每個扇區存盤512位元組,

  • 一般連續八個扇區組成一個"塊”(block),一個塊是4K大小,是檔案存取的最小單位,作業系統讀取硬碟的時候,是一次性連續讀取多個扇區,即一個塊一個塊的讀取的,

  • 檔案資料包括實際資料與元資訊(類似檔案屬性),檔案資料存盤在“塊"中,存盤檔案元資訊(比如檔案的創建者、創建日期、檔案大小、檔案權限等)的區域就叫做inode表, 因此,一個檔案必須占用一個inode,并且至少占用一個block,

  • inode不包含檔案名,檔案名是存放在目錄檔案夾當中的,Linux 系統中一切皆檔案,因此目錄也是一種檔案,

  • 每個inode都有一個號碼,作業系統用inode號碼來識別不同的檔案,Linux系統內部不使用檔案名,而使用inode號碼來識別檔案,對于系統來說,檔案名只是inode號碼便于識別的別稱,檔案名和inode號碼是一一對應關系,每個inode號碼對應一個或多個檔案名,

    唯一 同一檔案系統() 不同的檔案

  • 所以,當用戶在Linux系統中試圖訪問一個檔案時,系統會先根據檔案名去查找它對應的inode號碼:通過inode號碼,獲取inode資訊;根據inode資訊,看該用戶是否具有訪問這個檔案的權限;如果有,就指向相對應的資料block,并讀取資料,

tops:

硬碟上最小的存盤單位為扇區(512位元組)

檔案存盤的最小單位為塊8個扇區組成為4k

圖解:

  • mode:權限

  • owner info:所有者

  • size:大小

  • timestamps:三個時間戳

inode號與命令cp,rm,mv的關系:

cp 命令:

  • 分配一個空閑的inode號,在inode表中生成新條目

  • 在目錄中創建一個目錄項,將名稱與inode編號關聯

  • 拷貝資料生成新的檔案

rm 命令:

  • 硬鏈接數遞減,從而釋放的inode號可以被重用

  • 把資料塊放在空閑串列中

  • 洗掉目錄項

  • 資料實際上不會馬上被洗掉,但當另一個檔案使用資料塊時將被覆寫

mv 命令:

 

  • 如果mv命令的目標和源在同一設備,不影響inode表(除時間戳)或磁盤上的資料位置:沒有資料被移動!
  • 洗掉舊的目錄對應關系新建目錄對應關系

 

 

#可以通過inode號來洗掉指定檔案
[root@localhost data]# ls -i
35802872 123  35802838 1.txt  35802839 2.txt  35802840 3.txt  35802841 4.txt  35802842 5.txt   2420054 data1  35802875 data2

[root@localhost data]# find -inum 35802872 -delete           //命令1
[root@localhost data]# find -inum 35802872 -exec rm {}  /;  //命令2

[root@localhost data]# ls
1.txt  2.txt  3.txt  4.txt  5.txt  data1  data2

 

洗掉檔案空間不釋放,解決方法

[root@localhost opt]#lsof |grep delete   //列出檔案  過濾已洗掉

[root@localhost opt]#echo " " > /boot/bigfile   //寫空字符導給檔案

 

2.檔案恢復extundelete

洗掉一個檔案,實際上并不清除 inode 節點和 block 的資料,只是在這個檔案的父目錄 里面的 block 中,洗掉這個檔案的名字,

Linux 是通過 Link 的數量來控制檔案洗掉的,只有 當一個檔案不存在任何 Link 的時候,這個檔案才會被洗掉,

 

在 Linux 系統運維作業中,經常會遇到因操作不慎、操作錯誤等導致檔案資料丟失的情 況,尤其對于客戶企業中一些新手,

當然,這里所指的是徹底洗掉,即已經不能通過“回收 站”找回的情況,比如使用“rm -rf”來洗掉資料,

針對 Linux 下的 EXT 檔案系統,可用的恢復 工具有 debugfs、ext3grep、extundelete 等,

其中 extundelete 是一個開源的 Linux 資料 恢復工具,支持 ext3 檔案系統,

2.1使用extundelete工具如何恢復誤刪檔案

在編譯安裝 extundelete 之前需要先安裝兩個依賴包 e2fsprogs-libs 和 e2fsprogs-devel;

這兩個包在系統安裝光碟的/Package 目錄下就有,使用 rpm 或 yum 命令將其安裝;

e2fsprogs-devel 安裝依賴于 libcom_err-devel 包,

[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs
#安裝依賴軟體
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
#解壓軟體
[root@localhost ~]# cd /opt/extundelete-0.2.4
#切換到目錄下
[root@localhost extundelete-0.2.4]# ./configure    //定義模塊和路徑
#編譯安裝 
[root@localhost extundelete-0.2.4]#make           //編譯
[root@localhost extundelete-0.2.4]#make install   //寫入硬碟
[root@localhost extundelete-0.2.4]#cd /usr/local/bin/
[root@localhost bin]#ls
extundelete  you-get


#驗證恢復,目前使用版本只對ext3 有效,磁區略
[root@localhost ~]# mkfs.ext3 /dev/sdb1
[root@localhost ~]# mkdir /test/ 
[root@localhost ~]# mount /dev/sdb1 /test/ 
[root@localhost ~]# cd /test/
[root@localhost test]# echo a>a 
[root@localhost test]# echo a>b 
[root@localhost test]# echo a>c 
[root@localhost test]# echo a>d

 

2.2模擬誤刪并恢復

可以使用extundelete /dev/sdb1 --inode 2   //查看檔案系統/dev/sdb1 下存在哪些檔案

具體的使用情況:

其中--inode 2 代表從 i 節點為 2 的檔案開始查看,一般檔案系統格式化掛載之后,i 節點是從 2 開始的,2 代表該檔案系統最開始的目錄,

在恢復前需要先解掛載

 

[root@localhost test]# rm -rf a b   //模擬誤洗掉

[root@localhost test]# ls c d lost+foun
[root@localhost test]# cd 

[root@localhost ~]# umount /test/
#解掛載
[root@localhost ~]#extundelete /dev/sdb1 --inode 2  //查看該磁區下的存在哪些檔案
#                  命令          查看的磁區   從2節點開始

[root@localhost ~]# extundelete  /dev/sdb1          --restore-all    //使用恢復
#                   命令          需要恢復的磁區設備    恢復選項,全都要

[root@localhost ~]# ls    
anaconda-ks.cfg extundelete-0.2.4 extundelete-0.2.4.tar.bz2 RECOVERED_FILES
[root@localhost ~]# cd RECOVERED_FILES/    //進入恢復目錄
[root@localhost RECOVERED_FILES]# ls   //查看
a b      //恢復成功

 

 

 

 

 

 

3.xfs型別備份和恢復

CentOS 7 系統默認采用 xfs 型別的檔案,針對 xfs 檔案系統目前也沒有比較成熟的檔案恢復工具,所以建議提前做好資料備份以避免資料丟失

 

xfs 型別的檔案可使用 xfsdump 與 xfsrestore 工具進行備份恢復,

若系統中未安裝 xfsdump與xfsrestore工具,可以通過yum install -y xfsdump命令安裝,

 

xfsdump 按照inode 順序備份一個 xfs 檔案系統,

3.1xfsdump 的備份級別

  • 0 表示完全備份

  • 1-9 表示增量 備份

  • xfsdump 的備份級別默認為 0

xfsdump 的命令格式為:

xfsdump   -f    備份存放位置     要備份路徑或設備檔案

選項:

選項 作用
-f 指定備份檔案目錄
-L 指定標簽 session label
-M 指定設備標簽 media label
-s 備份單個檔案,-s 后面不能直接跟路徑

3.2使用 xfsdump 時,需要注意以下的幾個限制:

  • 不支持沒有掛載的檔案系統備份,所以只能備份已掛載的;

  • 必須使用 root 的權限才能操作;

  • 只能備份 XFS 檔案系統;

  • 備份下來的資料只能讓 xfsrestore 決議;

  • 不能備份兩個具有相同 UUID 的檔案系統(可使用blkid查看),

 

 

4.日志

4.1常見的日志檔案

4.2內核和公共日志

4.3用戶日志

4.4查詢當前登陸的用戶情況

4.5查詢用戶登陸的歷史情況

5.總結

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/514268.html

標籤:其他

上一篇:nginx

下一篇:將具有頁面版本的URL重定向到沒有版本的URL

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more