關于Linux文件系統的的簡單理解和認識-20160730

關于Linux文件系統的的簡單理解和認識

關于文件系統的運作,這與操作系統帶的檔案數據有關。例如Linux操作系統的檔案權限(rwx)與文件屬性(擁有者,群組,時間參數等)。文件系統通常會將這兩部分的數據分別存放在不同的區塊,權限與屬性放置到inode中,至于實際數據則放置到date block區塊中,另外,還有一個超級塊區(super block)會記錄整個文件系統的整體信息,包含inodeblock的總量,使用量,剩余量等。

每個inodeblock都有編號,至于這三個數據的意義可以簡單說明如下:

super block :記錄filessystem的整體信息,包括inode/block的總量,使用量,剩余量,以及文件系統的格式與相關信息等;#這個文件系統對應的是一個分區,應該可以這樣理解

Inode 表:記錄檔案的屬性,一個檔案占用一個inode號,同時記錄此檔案的數據所在的block號碼;

Block :實際記錄檔案的內容,若檔案太大時,會占用多個block

如果當一個分區分的容量分得比較大,所有的inode  block superblock統一管理不是很方便,所以我們有在分區上存在分組的概念,把一個分區我們分成多個區塊群組,不同的區塊群組管理自身的inode  block  superblock

 111.png

 

 

 

 

Inode  table inode 表格)

格式化分區的時候inode的數量和大小128bytes就已經固定)

數據內容:

該文件的權限(rwx);

該文件的擁有者與群組;

該文件的容量;

該文件建立或狀態改變的時間(ctime);

最近一次的讀取時間(atime);

最近修改的時間(mtime);

文件特定的標志(SUID SGID STICK

該文件真正內容的指向(指向block

11.png 

 

 

 

 

 

 

 

 

 

 

 Inode表的數據結構,表前面為文件的元數據基本信息,后面就是數據指向,如果文件太大有400M,分區的block大小假如為4K,由于inode表的容量有限 128字節,不可能有那邊多的空間指針指向數據的block,通常情況下,一個inode表有12個直接數據指向,再就是間接指向,兩間接指向,三間接指向

直接數據指向:一個指向只能指向一個block,所以12個直接指向只能代表48K的數據;

間接指向:間接指向指向一個block,該block上有1024的直接指向可以指向block,故一個間接指向可以表示4M的數據;

兩重間接指向:相當與開始指向一個block1024個間接指向指向block,每個block又有1024個直接指向數據塊,所以可以表示:4K*1024*1024=4G;

三重間接指向:通過以上推理,一個三重間接指向可以代表 4T的數據;

 

# 由于inode的表容量有限,所以導致每個inode的表示的空間是有上限的,也就導致不同文件系統的單個分區容量也有上限.

 

 

 

 

superblock超級區塊

Superblock是記錄整個filesysytem相關信息的地方,沒有Superblock,就沒有文件系統,它記錄的信息主要有:

Blockinode的總量;

未使用與已使用的block/inode數量;

Blockinode的大?。?/span>block1 2 4 K ,inode128bytes

文件系統的掛載時間,最近一次寫入數據的時間,最近一次檢驗磁盤的時間等文件系統的相關信息;

一個valid bit數值,若此文件系統已被掛載,則 valib bit 0 ,若未被掛載,則valid bit1

注意:dumpe2fs可以查看相關信息。superblock超級區塊可能在不同的群組上存在,其它的superblock 超級區塊為備份的超級區塊。

 

文件系統描述說明

這個區段可以描述每個block group 的開始與結束的block,以及說明每非區段分別存儲與哪一個block號碼之間。

 

Block bitmap(區塊對照表)

如果你想要新增文件時總會用到block,但是需要使用哪一個block來記錄呢?怎么知道哪些block是空的呢?從block bitmap中我們可以知道哪些block是空的,當刪除一些數據,block bitmap表會記錄block的標志位未使用,下次有數據存儲時,就可以覆蓋此處的block

 

 

 

dumpe2fs /dev/sda1  來看看超級塊中的數據信息

(好像只有ext系列的文件系統才可以使用本工具,請不在要xfs文件系統上使用該命令)

 

 

 

 

[root@love681 ~]# dumpe2fs  /dev/sda1 
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot   #分區掛載點
Filesystem UUID:          0ae2a047-9dd6-4bb1-a284-818f971865ea
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              51200    #inode數量
Block count:              204800   # block數量
Reserved block count:     10240
Free blocks:              160134   #空閑的block數量
Free inodes:              51162    #空閑的是inode數量   
First block:              1
Block size:               1024     #block單元大小為1K
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192     #一個群組中block的數量
Fragments per group:      8192
Inodes per group:         2048    #一個群組中inode的數量
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Fri Jul 22 15:51:06 2016
Last mount time:          Mon Jul 25 11:28:22 2016
Last write time:          Mon Jul 25 11:28:22 2016
Mount count:              6
Maximum mount count:      -1
Last checked:             Fri Jul 22 15:51:06 2016
Check interval:           0 (<none>)
Lifetime writes:          43 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128   #inode單位大小128個字節
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      9e14b616-ea5a-4fa3-b9ea-5c1ef844f87d
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             4096k
Journal length:           4096
Journal sequence:         0x0000001b
Journal start:            0
 
 
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x5827, unused inodes 2010
  Primary superblock at 1, Group descriptors at 2-2  #超級塊的位置,群組描述符的位置
  Reserved GDT blocks at 3-258  #
  Block bitmap at 259 (+258), Inode bitmap at 275 (+274) #區塊對應表位置,inode對應表的位置
  Inode table at 291-546 (+290)  #inode表的位置
  3785 free blocks, 2010 free inodes, 6 directories, 2010 unused inodes
  Free blocks: 4408-8192
  Free inodes: 39-2048
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0xa798, unused inodes 2048
  Backup superblock at 8193, Group descriptors at 8194-8194
  Reserved GDT blocks at 8195-8450
  Block bitmap at 260 (+4294959363), Inode bitmap at 276 (+4294959379)
  Inode table at 547-802 (+4294959650)
  390 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes
  Free blocks: 15995-16384
  Free inodes: 2049-4096

 

 

目錄的存儲方式

ext文件系統中,當新建一個目錄,ext系統會分配一個inode與至少一塊block給該目錄,其中inode記錄該目錄的相關權限與屬性,并記錄分配到的那塊block號碼,而block則是記錄在這個目錄下的文件名和該文件名占用inode的號碼數據,就如下:

Inode number

文件名

654789

1.txt

654790

2.txt

654800

3.txt

 

 

普通文件存儲的方式:

ext文件系統中,新建一個普通文件時,ext文件系統會分配一個inode與相對于該文件大小的block數量給該文件。例如:該文件的大小為100Kbytes,假如一個block大小為4kbytes,這inode需要記錄25block與之對應,為什么是25個,由于inode12個直接指向,合計48kbytes,設置于的使用一個間接指向block,由該block存儲剩余的文件。

 

目錄樹的讀取

以上我們大概可以了解到,inode表中并不記錄文件名與數據的對應關系,inode表記錄文件的基本屬性和block指向,指向的block中記錄文件名和inode的對應關系。

由于目錄樹是又根目錄開始的,因此新系統透過掛載的信息可以找到掛載點的inode號碼(通常一個filesysytem的最頂層是inode號碼由2號開始的,其實不知道是從2號開始的),因此只要讀取到根的inode內容,就可以讀取到該inode對應的block的數據,可以找到該目錄下文件會目錄對應inode的對相應關系。

 

 

舉例說明:

如果我們想要讀取/etc/passed這個文件的內容,系統是如何讀取的呢?

[root@wCentos7 ~]# ll -di /etc/  /etc/passwd /
      128 dr-xr-xr-x.  18 root root 4096 Jul 21 11:34 /
134313217 drwxr-xr-x. 129 root root 8192 Jul 30 12:53 /etc/
136822215 -rw-r--r--.   1 root root 2525 Jul 30 10:44 /etc/passwd

 

如上圖,在我的實驗的電腦上 / indoe號是128,etc目錄的inode號是 13431327,文件passed inode號是136822215,我們來看看數據的讀取過程:

 

1.通過掛載點獲得 /  inode號為128,(其實到底是通過說明方法獲取到 / inode現在確實不了解),讀取128 inode的數據內容,讀取到對于執行程序的用戶 root 權限時 ( r-x,就可以去讀取inode對應的block的信息;

2. / block記錄的是該目錄下所有的文件名稱與之inode的對應關系,在block中找到 etc/與之對應的inode13431327 ,則再去找13431327  inode號碼;

3. Etc/inode 號找到并且讀取數據內容 讀取權限為(rwx),即可讀取到 block指向數據,程序執行者再去讀取block的數據內容;讀取到 passwd 對應的inode號碼為 136822215 ,進而 去查找 136822215 inode表;

4.passwdinode136822215 ,讀取inode表中的數據,由于是管理員,有足夠的權限可以繼續訪問,進而讀取到 block的指向,我們讀取block的數據內容,即可讀取出 passwd的內容。

 

 

 

 

 

     以上只是一個大概的過程,雖然不是很精確,但還是有助于我們理解ext的文件系統,又上述的理論只是我們可以做做一下總結:

1.ext文件系統為什么當個分區有分區大小限制,是由于本身的inode表大小有限,存儲的block指向是有數量上限的;

2.ext文件系統中,刪除數據,其實只是在inode表中清除block指向指針,在相應的block bitmap中標記該block為未使用狀態,等到下次有數據需要存儲的時候,把數據填充至編輯為未使用的block地方;

3.一個Ext文件系統中inode號是唯一的,

4.Ext文件系統查找實際查找數據是以inode號為準,inode表中不記錄文件名,但是會記錄block的指向,block中記錄實際的數據。

 

 

 

 

 

 

原創文章,作者:linux_root,如若轉載,請注明出處:http://www.www58058.com/27701

(0)
linux_rootlinux_root
上一篇 2016-08-04
下一篇 2016-08-04

相關推薦

  • Linux進程管理及作業管理

    進程管理 進程概念 Linux內核:搶占式多任務 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process: 運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限 通常從執行進程的用戶來繼承 進程存…

    Linux干貨 2017-05-08
  • Linux進程管理和計劃任務

    進程管理篇 進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process: 運行中的程序的一個副本,是被載入內存的一個指令集合     進程ID(Process ID,PID)號碼被用來標記各個進程     UID、GID、和SELinux語…

    Linux干貨 2016-09-17
  • 系統自動化安裝

    系統自動化安裝:實現同時部署多臺操作系統,批量進行安裝linux系統 CentOS系統安裝     系統啟動流程:       bootloader–>kernel(initaramfs)–>rootfs–>/sbi…

    Linux干貨 2016-09-22
  • 正則表達與擴展正則表達

    說到正則表達式那就不得不說grep命令: 1.grep命令的作用:grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。2.格式 2.命令格式 :grep [options] 3.主要參數: gre…

    2017-08-07
  • LVS-NAT負載均衡兩個php應用(wordpress,discuzx)( Blog 19)

    結果:需要會話保持,需要共享存儲;

    Linux干貨 2017-12-20
  • NET25第8周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主使用紅色顯示; #!/bin/bashtrap “echo ‘crtrl+c’;exi…

    Linux干貨 2017-03-15
欧美性久久久久