Linux 文件區塊連續嗎,關于Linux文件系統的的簡單理解和認識

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

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

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

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

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

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

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

b86b635362084e1cb042fc276a8a0dfb.png

Inode ?table (inode表格)

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

數據內容:

該文件的權限(rwx);

該文件的擁有者與群組;

該文件的容量;

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

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

最近修改的時間(mtime);

文件特定的標志(SUID SGID STICK)

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

0008c0b6b952453f069d75ce5ae5a325.png

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

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

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

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

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

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

superblock超級區塊

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

Block和inode的總量;

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

Block與inode的大小(block為1 2 4 K ,inode為128bytes)

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

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

注意: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: ??

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 ()

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文件名

6547891.txt

6547902.txt

6548003.txt

普通文件存儲的方式:

在ext文件系統中,新建一個普通文件時,ext文件系統會分配一個inode與相對于該文件大小的block數量給該文件。例如:該文件的大小為100Kbytes,假如一個block大小為4kbytes,這inode需要記錄25個block與之對應,為什么是25個,由于inode有12個直接指向,合計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/與之對應的inode號13431327,則再去找13431327 ?inode號碼;

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

4.passwd的inode號136822215,讀取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中記錄實際的數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393026.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393026.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393026.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器性能和活動監視

監視數據庫的目的是評估服務器的性能。 有效監視包括定期拍攝當前性能的快照來隔離導致問題的進程,以及連續收集數據來跟蹤性能趨勢。 Microsoft SQL Server 和 Microsoft 操作系統提供實用工具,使您可以查看數據庫的當前狀態并跟蹤性能的狀態變化。 下一…

Microsoft Desktop Virtualization

基本上有兩套啦,一是大家較為熟悉的MED-V。另外就是VDI(虛擬桌面基礎架構),也就是以下的組合:1、Windows Server 2008 with Hyper-V 2、System Center Virtual Machine Manager (VMM) 2008 VMM 20083、Windows Vista Enterprise Centralized …

leetcode60. 第k個排列(回溯算法)

給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。 按大小順序列出所有排列情況,并一一標記,當 n 3 時, 所有排列如下: “123” “132” “213” “231” “312” “321” 給定 n 和 k,返回第 k 個排列。 說明&…

webpack設置應用緩存_如何使用Webpack在Rails應用程序中設置TinyMCE

webpack設置應用緩存by Joanna Gaudyn喬安娜高登(Joanna Gaudyn) 如何使用Webpack在Rails應用程序中設置TinyMCE (How to setup TinyMCE in your Rails app using Webpack) The popularity of using Webpack to deal with your assets in Rails is steadily increasing. Getti…

springmvc ajax 頁面無法重定向問題!!!!

誒誒誒。這個問題困擾了我一天,百度了很多都不行。 剛實戰ssm框架,做登錄跳轉的時候,我是用ajax提交數據到后臺,然后后天返回數據進前臺,前臺再給用戶一些比較友好的提示,比如用戶名或密碼錯誤之類的。 所以…

linux svn log 亂碼,解決p42svn中文log亂碼的問題

現象:將perforce代碼庫遷移至SVN時log亂碼。p42svn.pl在windows下運行至"-|"時會報錯,于是安裝了linux虛擬機,從虛擬linux中運行p42svn.pl生成dump文件,再傳至windows下用svnadmin load。可是在svn查看log時&#xff0…

Django開發中常用的命令總結

1. 創建一個Django Project#使用下面的命令可以創建一個projectdjango-admin.py startproject mysite #創建好之后可以看到如下的pro... 1. 創建一個Django Project 1 2 3 4 5 6 7 8 9 10 11 #使用下面的命令可以創建一個project django-admin.py startproject mysite #創…

xml解析-jaxp添加結點

jaxp添加結點 eg: //在第一個下面添加nv / 1.創建解析器工廠 * 2.根據解析器工廠創建解析器 * 3.解析xml返回document * * 4.得到第一個p1 * -得到所有p1使用item方法得到第一個p1 * * 5.創建sex標簽 createElement * 6.創建文本 createTextNode * 7.把文本添加到se…

leetcode107. 二叉樹的層次遍歷 II

給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)例如: 給定二叉樹 [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其自底向上的層次遍歷為&#xff1a…

javascript 圖表_JavaScript 2018年的三個有爭議的圖表

javascript 圖表by Sacha Greif由Sacha Greif JavaScript 2018年的三個有爭議的圖表 (Three Controversial Charts From the State of JavaScript 2018) 您認為統計數據和圖表很無聊嗎? 再想一想… (You thought stats and graphs were boring? Think again…) “…

簽入在服務器上之后,別人獲取了,在解決方案資源管理器中找不到。

簽入在服務器上之后,別人獲取了,在解決方案資源管理器中找不到。 這個問題具體原因我也不太清楚,但是我找到了一個解決方案。直接在解決方案上右鍵,添加,添加現有項。把在解決方案資源管理器上看不見的選中&#xff0c…

03JavaScript程序設計修煉之道-2019-06-20_20-31-49

## DomDocument object model 文檔對象模型Dom樹html|head body| |meta title div|ul|li li li在js世界中,把dom樹的每個元素都看成一個對象,對象就有屬性和方法dom學什么 dom節點操作 查找元素 元素增刪改查 樣式操作 事件綁定等## 事件三要素 1 事件源…

linux 獨占 cpu,宋寶華:談一談Linux讓實時 高性能任務獨占CPU的事

本文主要討論在高實時要求、高效能計算、DPDK等領域,Linux如何讓某一個線程排他性獨占CPU;獨占CPU涉及的線程、中斷隔離原理;以及如何在排他性獨占的狀況下,甚至讓系統的timer tick也不打斷獨占任務,從而實現最低的延遲…

leetcode347. 前 K 個高頻元素(排序)

給定一個非空的整數數組&#xff0c;返回其中出現頻率前 k 高的元素。 示例 1: 輸入: nums [1,1,1,2,2,3], k 2 輸出: [1,2] 示例 2: 輸入: nums [1], k 1 輸出: [1] 代碼 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer,Integer>…

如何在React中從其父組件更改子組件的狀態

by Johny Thomas約翰尼托馬斯(Johny Thomas) 如何在React中從其父組件更改子組件的狀態 (How to change the state of a child component from its parent in React) We will be building a simple React app which shows the real name of a superhero on a button click.我們…

vue-property-decorator 提供 OO 的風格 Vue Component 方便類型聲明

Prop 父子組件之間傳值 Install: npm install --save vue-property-decoratorChild: <template><div>{{fullMessage}}</div> </template><script lang"ts">import Vue from vue import {Component, Prop} from vue-property-decorato…

python學習筆記(1)

變量的命名 變量名只能包含字母、數字、下劃線&#xff0c;不能以數字打頭不要用Python關鍵字、函數名、保留用于特殊用途的單詞作變量名變量名應短且有描述性慎用小寫l和大寫O字符串 就是一系列字符 在Python中&#xff0c;用引號擴起的都是字符串&#xff0c;引號可以是單引號…

使用這些HTTP標頭保護您的Web應用程序

by Alex Nadalin通過亞歷克斯納達林 使用這些HTTP標頭保護您的Web應用程序 (Secure your web application with these HTTP headers) This is part 3 of a series on web security: part 2 was “Web Security: an introduction to HTTP”這是有關Web安全的系列文章的第3部分&…

leetcode547. 朋友圈(并查集)

班上有 N 名學生。其中有些人是朋友&#xff0c;有些則不是。他們的友誼具有是傳遞性。如果已知 A 是 B 的朋友&#xff0c;B 是 C 的朋友&#xff0c;那么我們可以認為 A 也是 C 的朋友。所謂的朋友圈&#xff0c;是指所有朋友的集合。 給定一個 N * N 的矩陣 M&#xff0c;表…

linux ssh Unused,安裝openssh-portable時遇到的問題及解決辦法

問題1&#xff1a;configure: error: Your OpenSSL headers do not match yourlibrary. Check config.log for details.If you are sure your installation is consistent, you can disable the checkby running “./configure –without-openssl-header-check”.Also see cont…