淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

1、inode與block

1.inode和block概述

文件數據包括元信息與實際數據,一個文件必須佔用一個inode,但至少佔用一個block。node

扇區:文件存儲在硬盤上,硬盤的最小存儲單位是扇區,每一個扇區存儲空間是512字節。
block(塊):連續的八個扇區組成一個block,block是文件存取的最小單位,用來存儲文件數據。
inode(索引節點):也叫i節點,用於存儲文件元信息。linux

2.inode的理解

(1)inode包含文件元信息:c++

  • 文件的字節數
  • 文件擁有者的User ID(UID)
  • 文件的Group ID(GID)
  • 文件具備的讀、寫、執行權限
  • 文件的時間戳(atime、ctime、mtime)

當咱們想查看某個文件的inode信息時,使用的是「stat」命令,後面直接接文件的路徑和名稱便可。windows

[root@localhost opt]# stat test/
  文件:"test/"
  大小:24         塊:0          IO 塊:4096   目錄
設備:802h/2050d   Inode:33574981    硬連接:2
權限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:usr_t:s0
最近訪問:2019-08-28 11:39:33.953003238 +0800
最近更改:2019-08-28 11:39:20.023004045 +0800
最近改動:2019-08-28 11:39:20.023004045 +0800
建立時間:-
[root@localhost opt]#

(2)文件的三個主要時間屬性:session

  • atime(access time):最後一次訪問文件或目錄的時間
  • ctime(change time):最後一次改變文件或目錄(屬性)的時間
  • mtime(modify time):最後一次修改文件或目錄(內容)的時間

3.inode號碼

每一inode都有一個號碼,操做系統是經過inode號碼來識別不一樣文件的。Linux系統內部是不使用文件名來識別文件的,對系統而言inode號碼纔是文件的名字。而文件名只是便於用戶去記憶的名字,至關於inode號碼的別稱。其實這就至關於我們的手機通信錄,我們平時只要記住聯繫人的名字就能夠撥通他的手機,但真正用來鏈接通話的是你保存在通信錄中的手機號碼。移動或重命名文件時,只會改變文件名,inode號碼是不變的。ide

(1)用戶經過文件名打開文件時,系統內部過程以下:工具

  • 系統首先會找到這個文件名對應的inode號碼
  • 經過inode號碼獲取inode信息(查看元信息,看是否有訪問權限)
  • 根據inode信息,找到文件數據所在的block,讀出數據

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

(2)查看inode號碼的方法:this

ls -i命令:查看文件名對應的inode號碼操作系統

[root@localhost opt]# ls -i test/
34964204 test01.txt
[root@localhost opt]#

stat命令:查看文件inode信息中的inode號碼3d

[root@localhost opt]# stat test/test01.txt 
  文件:"test/test01.txt"
  大小:13         塊:8          IO 塊:4096   普通文件
設備:802h/2050d   Inode:34964204    硬連接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:usr_t:s0
最近訪問:2019-08-28 11:39:34.875003185 +0800
最近更改:2019-08-28 11:39:20.023004045 +0800
最近改動:2019-08-28 11:39:20.023004045 +0800
建立時間:-
[root@localhost opt]#

4.inode的大小

inode也會消耗硬盤空間,每一個inode的大小通常是128字節或256字節,在格式化文件系統時會肯定inode的總數。

df -i命令:查看每一個硬盤分區的inode總數和已使用數量

[root@localhost opt]# df -i
文件系統          Inode        已用(I)        可用(I)       已用(I)% 掛載點
/dev/sda2      10485760  121223   10364537          2% /
devtmpfs         229705     368          229337           1% /dev
tmpfs            233378        1                233377         1% /dev/shm
tmpfs            233378         599           232779       1% /run
tmpfs            233378        16             233362         1% /sys/fs/cgroup
/dev/sda5     5241856     144          5241712       1% /home
/dev/sda1     3145728     328          3145400       1% /boot
tmpfs            233378         6             233372         1% /run/user/42
tmpfs            233378         20           233358         1% /run/user/0
[root@localhost opt]#

5.inode的特殊做用

當咱們刪除文件的文件名中包含有沒法用鍵盤敲出的特殊字符,就致使咱們沒法刪除文件。此時咱們能夠直接經過inode來刪除文件。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

2、硬連接與軟連接

在linux系統中有種文件是連接文件,能夠爲解決文件的共享使用。連接的方式能夠分爲兩種,一種是硬連接(Hard Link),另外一種是軟連接或者也稱爲符號連接(Symbolic Link)。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

在Linux系統中,多個文件名指向同一個inode,通常這種連接就稱爲硬連接。硬連接的做用之一是容許一個文件擁有多個有效路徑名,這樣用戶就能夠創建硬連接到重要的文件,以防止誤刪重要文件,不過硬連接只能在同一文件系統中的文件之間進行連接,並且不能對目錄進行建立。文件名其實就至關於硬連接,當咱們給文件創建了硬連接後,再去刪除它的源文件,就至關於刪除了其中一個硬連接。但它的元信息和數據任然在inode與block中存儲着。當最後一個硬連接被刪除後,它的元信息和數據任然在,可是系統會將它的inode號碼釋放到號碼池,當有一個新文件獲取了這個inode號碼後,它的元信息和數據纔會被覆蓋。

軟連接,其實與windows系統中的快捷方式很類似,與硬連接不一樣,軟連接就是一個普通文件,只是數據塊內容有點特殊,文件用戶數據塊中存放的內容是另外一文件的路徑名的指向,經過這個方式能夠快速定位到軟鏈接所指向的源文件實體。軟連接可對文件或目錄建立,當源文件被刪除後,軟連接也就失效了。

ln命令:建立硬連接。

[root@localhost test]# ls
test01.txt
[root@localhost test]# ls -l
總用量 4
-rw-r--r--. 1 root root 13 8月  28 11:39 test01.txt
[root@localhost test]# ln test01.txt t01.txt
[root@localhost test]# ls -i
34964204 t01.txt  34964204 test01.txt
[root@localhost test]# ls -l
總用量 8
-rw-r--r--. 2 root root 13 8月  28 11:39 t01.txt
-rw-r--r--. 2 root root 13 8月  28 11:39 test01.txt
[root@localhost test]#

咱們能夠看到,文件和它的硬連接的inode號碼是相同的,因此不管咱們用哪一個打開它的內容都是相同的。

ln -s命令:建立軟連接

[root@localhost test]# ls
test01.txt
[root@localhost test]# ln -s test01.txt t01.txt
[root@localhost test]# ls
t01.txt  test01.txt
[root@localhost test]#

file命令:查看文件類型

[root@localhost test]# file test01.txt 
test01.txt: ASCII text
[root@localhost test]# cd ../
[root@localhost opt]# file test/
test/: directory
[root@localhost opt]#

3、恢復誤刪文件

1.恢復Linux6版本的EXT4類型的文件

安裝extundelete軟件包,先安裝它的依賴包。

輸入:cd /mnt/Packages/
輸入:rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
輸入:rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
輸入:rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm
輸入:rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

咱們先新建一個目錄,再將咱們本地的工具包掛載到目錄中。

輸入:mkdir /extundel
輸入:mount.cifs //192.168.100.50/share/ /extundel/
輸入:df -h

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

將掛載過來的工具壓縮包解壓到「/opt/」目錄中

輸入:cd /extundel/
輸入:tar jxvf extundelete-0.2.4.tar.bz2 -C /opt/

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

用「cd」命令進入「/opt/extundelete-0.2.4/」目錄,安裝編譯器,由於如今的源碼包是用C語言寫的,不能直接用。

輸入:cd /opt/extundelete-0.2.4/
輸入:yum install gcc gcc-c++ -y

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

編譯安裝extundelete工具。

輸入:./configure
輸入:make
輸入:make install

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

添加一塊磁盤,對磁盤進行配置,配置完後,將磁盤分區格式化,文件格式爲ext4,再建立一個目錄「/data/」,並將磁盤分區掛載到目錄下。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

進入到「/data/」目錄,建立三個文件a、b、c。而後再將三個文件刪除,模擬文件誤刪。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

咱們先返回宿主目錄,而後將sdb1解掛載。而後用「extundelete /dev/sdb1 --restore-all」來恢復刪除的全部文件。注意:當你誤刪文件後,第一時間必定要將設備解掛載,由於若是有新的文件將刪除的文件inode號給佔用了就沒法恢復了。(工做環境中必定要注意備份)

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

咱們用「cd」命令進入到「RECOVERED_FILES/」目錄中就能看到恢復的文件了。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

2.恢復Linux7版本中的XFS類型文件。

xfsdump命令:備份系統文件

格式:xfsdump -f 備份存放位置 要備份的路徑或設備文件
經常使用選項:

-f:-------------------指定備份文件位置
-L:------------------指定備份會話標籤(免交互)
-M:-----------------指定設備標籤(免交互)
-s:------------------備份指定的文件,使用相對路徑,相對於備份的文件系統路徑

xfsrestore命令:恢復備份的系統文件

格式:xfsrestore -f 恢復文件的位置 存放恢復後文件的位置

經常使用選項:

-f:-----------------------指定備份文件位置
-s:----------------------恢復指定文件恢復
-t:-----------------------查看文件的內容及詳細信息

首先添加一塊硬盤,而後對其進行配置分區,再格式化將文件類型格式化爲xfs格式,掛載到新建的目錄「/data/」下。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

複製passwd文件到「/data/」目錄下,而後在「/data/」目錄裏新建一個「test」目錄,並在目錄裏建立一個空文件。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

退出「/data/」目錄,而後將sdb1分區的文件備份到「/opt/」目錄下,命名爲「xfs_dump」

[root@localhost ~]# xfsdump -f /opt/xfs_dump /dev/sdb1                //備份命令
                                  ..................................                                           //省略部分
please enter label for this dump session (timeout in 300 sec)
 -> xfs_dump                                                                                       //輸入備份後文件名
session label entered: "xfs_dump"
                                  .....................................                                     //省略部分
please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1                                                                                            //輸入備份分區
media label entered: "sdb1"
                                   .........................................                           //省略部分
xfsdump: Dump Status: SUCCESS

刪除「/data/」目錄下的全部文件,模擬文件誤刪。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

刪除完畢咱們經過xfsrestore命令將文件恢復到「/data/」目錄中去。

淺析Linux文件(一)inode與block、硬連接與軟連接、恢復誤刪文件

xfsdump使用限制:

  • 只能備份已掛載的文件系統
  • 必須使用root的權限才能操做
  • 只能備份XFS文件系統
  • 備份後的數據只能讓xfsrestore解析
  • 不能備份兩個具備相同UUID的文件系統
相關文章
相關標籤/搜索