linux文件系統只有幾k,關于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號

2fe98840d482147a2614a4e7f0a43522.png

Inode ?table (inode表格)

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

數據內容:

該文件的權限(rwx);

該文件的擁有者與群組;

該文件的容量;

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

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

最近修改的時間(mtime);

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

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

1a1f887892efee0286a8e7481322a118.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

文件名

654789

1.txt

654790

2.txt

654800

3.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/385808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385808.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385808.shtml

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

相關文章

Java高級工程師必備知識!java入門書籍pdf

美團技術一面20分鐘 晚7點,因為想到下周一才面試,我剛準備出去打個羽毛球,北京的電話就來了。面試官各種抱歉,說開會拖延了。 1、自我介紹 說了很多遍了,很流暢撿重點介紹完。 2、問我數據結構算法好不好 挺好的&…

機器人足球比賽linux,機器人足球實驗報告.doc

機器人足球實驗報告.doc實驗一一、實驗目的掌握RoboCup仿真機器人足球比賽相關知識點,具體內容如下:Linux操作系統的熟悉及了解其基本操作。掌握Linux下如何進行C編程,了解gcc編譯器以及一些簡單編輯工具,如:vi、emacs…

linux eclipse設置顏色,Linux Eclipse美化:解決工具欄過大和 Javadoc背景色修改

Eclipse 在Ubuntu 下總是感覺上面的工具欄感覺特別的大,控件之間的空隙非常的大,和在Windows 下的感覺非常的不一樣(畢竟是剛剛從windows叛逃出來),其實也不光光是Eclipse 是這樣,其他也軟件也同樣有這個問題。嘗試過通過更換主題…

Java高級工程師面試實戰,mysqlsettimeout

我聽到的一些發聲 你們賺的錢已經可以了: 我一個發小是做土木工程的,上海大學博士,參與很多著名建筑的工程,但是從薪資上看,還不如一些稍微像樣的公司的6年多的高級開發。為什么?這就是行業的紅利&#xf…

manjaro linux 關機,給本子安裝manjaro 出現無法關機的解決辦法

manjaro-kde-17.1.8-stable 和* win10* 雙系統 總是發現在關機或者重啟的時候,出現莫名凍屏的情況,只能按電腦的電源按鈕才可以強行關掉,(在進行解決的時候強行關機了 好多次!!。。心疼啊!!) 最…

Java高級開發面試,java字符串拼接的方法

一面:70分鐘 突擊電話面試 正思考著項目功能模塊,阿里面試官打來了電話,開始了阿里一面。 阿里面試官自我介紹,介紹了5分鐘左右,部門的情況,主要的業務 提問開始 會哪些操作系統 Linux會一點說一下操作指…

linux下安裝nginx1.10,Linux(RHEL7.0)下安裝nginx-1.10.2(示例代碼)

查看當前系統版本是否支持當前,nginx發布包支持以下Linux操作系統版本:RHEL/CentOS:VersionSupported Platforms5.xx86_64, i3866.xx86_64, i3867.xx86_64, ppc64leDebian:VersionCodenameSupported Platforms7.xwheezyx86_64, i3868.xjessiex86_64, i386Ubuntu:Ver…

Java高級開發面試,java泛型下界通配符

微服務是什么 微服務起源于2005年Peter Rodgers博士在云端運算博覽會提出的微Web服務(Micro-Web-Service),根本思想類似于Unix的管道設計理念。2014年,由Martin Fowler 與 James Lewis共同提出了微服務的概念,定義了微服務架構風格是一種通過…

c語言extern作用域,函數內定義extern變量是怎么回事?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓http://ca21days.blog.163.com/blog/static/4383729420096102223744/變量的聲明(declarations)會將變量的類型和名稱傳達給程序。當然,定義(definitions)也是一種聲明:當我們定義一個變量的時候,…

Java高級進階學習資料!java開發環境的搭建是什么意思

1. static 和 final 的用法 static 的作用從三個方面來談,分別是靜態變量、靜態方法、靜態類。 靜態變量:聲明為 static 的靜態變量實質上就是全局變量,當聲明一個對象時,并不產生static 變量的拷貝,而是該類所有實例…

交大c語言第一次作業答案,第一次作業答案(供參考)

以下為《第一次作業答案(供參考)》的無排版文字預覽,完整格式請下載下載前請仔細閱讀文字預覽以及下方圖片預覽。圖片預覽是什么樣的,下載的文檔就是什么樣的。計算最優投資組合:無風險的短期國債貨幣基金期望收益率為:8%股票基金…

Java高級面試題!java小游戲制作視頻

首先我們先來看看這份Spring源碼分析筆記 Spring源碼分類的一覽無余,詳細清晰明了!讓你分分鐘把握! Spring源碼分析筆記手冊內容,共七個部分 第一部分Spring概述 Spring 簡介Spring 發展歷程Spring 的優勢Spring 的核?結構Sprin…

c語言 字符轉int型,C語言—類型之間的轉換

原標題:C語言—類型之間的轉換當混合不同類型的數據進行計算時,便會發生類型轉換。當不同類型的數據進行計算時,應首先將操作數轉換成相同的數據類型,然后再進行計算。類型轉換有兩種形式,即隱式類型轉換和顯示類型轉換…

Java高級面試題!java構造方法的作用和特點

1. Redis面試專題 絕大部分寫業務的程序員,在實際開發中使用 Redis 的時候,只會 Set Value 和 Get Value 兩個操作,對 Redis 整體缺乏一個認知。這里以面試題的形式對 Redis 常見問題做一個總結,解決大家的知識盲點。 什么是Red…

c語言程序改頻率,求問。這個fft c語言程序 采樣的聲音頻率為多少?

timernum,timernum2,LEDnum3,Ltime;//用于分離/*加入數組用于顯示相應led燈數目*/uchar lednum[]{0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//0-7的顯示數組 P2組控制int xdata FftReal[SAMPLE_NUM];int xdata FftImage[SAMPLE_NUM];sbit p30P3^0;sbit p31P3^1;sbit p3…

Java高級面試題!java編程思想怎么學

專題5:Java序列化 1、什么是java序列化,如何實現java序列化? 2、保存(持久化)對象及其狀態到內存或者磁盤 3、序列化對象以字節數組保持-靜態成員不保存 4、序列化用戶遠程對象傳輸 5、Serializable 實現序列化 6、writeObject 和 readO…

計算星期c語言編碼,[轉載]計算任何一天是星期幾的C語言源代碼.

[轉載]計算任何一天是星期幾的C語言源代碼.#include int main(){int day,mn,yr,i,days0,s,k;int mont[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};char wek[][9]{ {S,u,n,d,a,y},{M,o,n,d,a,y},{T,u,e,s,d,a,y},{W,e,d,n,s,d,a,y},{T,h,u,r,s,d,a,y},{F,r,i,d,a,y},{S,a,t,u,…

Java高級:mysqllimit兩個參數

零基礎如何學習Java? 首先,你要明白一點,Java入門不難! 無論你是從事哪個行業,興趣一定是最好的老師,也是你學習的動力。 學習方式1:自學 自學模式其實我個人不建議絕大部分的人選擇&#x…

db2 c語言游標名稱可以是變量,mysql?c語言?游標能取多行嗎

滿意答案xuyingcxm2015.02.03采納率:45% 等級:12已幫助:7182人1、 無返回結果語句,如:INSERT,UPDATE,DROP, DELETE等2、 select語句返回單行變量并可傳給本地變量(select ..into)3、 返回多行結果集的select語句,并…

從入門到精通!javaidea安裝教程

一、秒殺系統架構設計都有哪些關鍵點? 二、設計秒殺系統時應該注意的5個架構原則 架構原則:“4要1不要” 1.1.數據要盡里少 1.2. 請求數要盡里少 1.3.路徑要盡里短 1.4.依賴要盡里少 1.5. 不要有單點2不同場景下的不同架構案例 三、如何才能做好動靜分離&#xff1…