Linux 文件系統與日誌分析

来源:https://www.cnblogs.com/suoluo212/archive/2022/10/15/16776656.html
-Advertisement-
Play Games

導圖 1.inode表結構 每個文件的屬性信息,比如:文件的大小,時間,類型,許可權等,稱為文件的元數據(meta data) 元數據是存放在inode(index node)表中。inode 表中有很多條記錄組成,第一條記錄對應的存放了一個 文件的元數據信息。 1.1硬鏈接和軟連接 硬連接 同一個文 ...


導圖

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.總結


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • AttribteError: ‘module’ object has no attribute xxx’ 描述:模塊沒有相關屬性。可能出現的原因:1.命名.py文件時,使用了Python保留字或者與模塊名等相同。解決:修改文件名2…pyc文件中緩存了沒有更新的代碼。解決:刪除該庫的.pyc 文件 A ...
  • 某寶秒殺,用毫秒級的精準度來搶購! 還記得前段時間情人節,各種產品活動秒殺。結果自然少不了被對象一番折磨 (註意:不是new出來的哈,也不是橡膠的,實實在在的女朋友) 於是乎徹底激發了我的求生欲,在這種關頭我是必鬚髮揮出自己的才能了,這才有了這篇毫秒級秒殺的精品出來,話不多說直接進入主題 項目環境​ ...
  • 2022-10-11 10:58:41 😀 前言 本文開始流程式控制制方面的學習,主要包括用戶交互和流程式控制制語句,適合新手學習。 1 用戶交互Scanner 1.1 Scanner對象 Java提供了一個可以獲取用戶輸入的Scanner工具類 基本語法: Scanner s = new Scanner ...
  • 各種語言用到的編輯器 python開發:pycharm(收費),vscode(免費),sublintext, go開發:goland(收費),vscode,國產的 java:idea(收費),eclipse(免費),MyEclipse(收費) android:androidstudio(免費),ec ...
  • 大家好,我是三友~~ 最近突然心血來潮(就是閑的)就想著擼一個簡單的配置中心,順便也照葫蘆畫瓢給整合到SpringCloud。 本文大綱 配置中心的概述 隨著歷史的車輪不斷的前進,技術不斷的進步,單體架構的系統都逐漸轉向微服務架構。雖然微服務架構有諸多優點,但是隨著越來越多的服務實例的數量,配置的不 ...
  • 在一個項目中,客戶要求對報表中的簽名進行仿手寫的簽名處理,因此我們原先只是顯示相關人員的姓名的地方,需要採用手寫方式簽名,我們的報表是利用FastReport處理的,在利用楷體處理的時候,開發展示倒是正常效果,不過實際上在伺服器運行的時候,出來的確實正規的宋體格式,相應的字體都已經安裝,不過還是沒有... ...
  • 1.進程 進程的概念從字義上理解相對還是比較抽象的,但進程實際上對我們並不陌生,可以說它無時不刻的伴隨著我們的生活。當你每天上班打開電腦,運行微信與好友通訊、運行瀏覽器閱讀網頁新聞等,這一些將程式運行起來的操作,都屬於創建了一個進程。並且我們可以對同一種程式重覆運行多次,這意味著一個程式可以創建多個 ...
  • 一:背景 1.講故事 前段時間有位朋友微信找到我,說他生產機器上的 Console 服務看起來像是卡死了,也不生成日誌,對方也收不到我的httpclient請求,不知道程式出現什麼情況了,特來尋求幫助。 哈哈,一般來說卡死的情況在窗體程式(WinForm,WPF) 上特別多,在 Console,We ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...