虛擬文件系統(tǒng)(Virtual File System,簡稱VFS)是Linux內(nèi)核的子系統(tǒng)之一,它為用戶程序提供文件和文件系統(tǒng)操作的統(tǒng)一接口,屏蔽不同文件系統(tǒng)的差異和操作細(xì)節(jié)。借助VFS可以直接使用open()、read()、write()這樣的系統(tǒng)調(diào)用操作文件,而無須考慮具體的文件系統(tǒng)和實(shí)際的存儲介質(zhì)。
通過VFS系統(tǒng),Linux提供了通用的系統(tǒng)調(diào)用,可以跨越不同文件系統(tǒng)和介質(zhì)之間執(zhí)行,極大簡化了用戶訪問不同文件系統(tǒng)的過程。另一方面,新的文件系統(tǒng)、新類型的存儲介質(zhì),可以無須編譯的情況下,動(dòng)態(tài)加載到Linux中。
"一切皆文件"是Linux的基本哲學(xué)之一,不僅是普通的文件,包括目錄、字符設(shè)備、塊設(shè)備、套接字等,都可以以文件的方式被對待。實(shí)現(xiàn)這一行為的基礎(chǔ),正是Linux的虛擬文件系統(tǒng)機(jī)制。
VFS之所以能夠銜接各種各樣的文件系統(tǒng),是因?yàn)樗橄罅艘粋€(gè)通用的文件系統(tǒng)模型,定義了通用文件系統(tǒng)都支持的、概念上的接口。新的文件系統(tǒng)只要支持并實(shí)現(xiàn)這些接口,并注冊到Linux內(nèi)核中,即可安裝和使用。
舉個(gè)例子,比如Linux寫一個(gè)文件:
int ret = write(fd, buf, len);
調(diào)用了write()系統(tǒng)調(diào)用,它的過程簡要如下:
首先,勾起VFS通用系統(tǒng)調(diào)用sys_write()處理。
接著,sys_write()根據(jù)fd找到所在的文件系統(tǒng)提供的寫操作函數(shù),比如op_write()。
最后,調(diào)用op_write()實(shí)際的把數(shù)據(jù)寫入到文件中。
操作示意圖如下:
文件系統(tǒng)
Linux下常用文件系統(tǒng)介紹
-
swap 文件系統(tǒng)
swap文件系統(tǒng)用于Linux的交換分區(qū)。在Linux中,使用整個(gè)交換分區(qū)來提供虛擬內(nèi)存,其分區(qū)大小一般應(yīng)是系統(tǒng)物理內(nèi)存的2倍,在安裝Linux操作系統(tǒng)時(shí),就應(yīng)創(chuàng)建交換分區(qū),它是Linux正常運(yùn)行所必需的,其類型必須是swap,交換分區(qū)由操作系統(tǒng)自行管理 - Btrfs 文件系統(tǒng)
-
Ext系列文件系統(tǒng)
ext是第一個(gè)專門為Linux設(shè)計(jì)的文件系統(tǒng)類型,稱為擴(kuò)展文件系統(tǒng)。目前已經(jīng)到了第四版分別是ext2, ext3,ext4 其中 centOS6默認(rèn)是ext4文件系統(tǒng) - xfs 文件系統(tǒng)
- NFS文件系統(tǒng)
- FAT系列文件系統(tǒng)
比較
文件系統(tǒng) | 最大文件名長度 | 最大文件大小 | 最大分區(qū)大小 |
ext2 | 255 bytes | 2 TB | 16 TB |
ext3 | 255 bytes | 2 TB | 16 TB |
ext4 | 255 bytes | 16 TB | 1 EB |
XFS | 255 bytes | 8 EB | 8 EB |
Btrfs | 255 bytes | 16 EB | 16 EB |
選擇
文件系統(tǒng) | 適用場景 | 原因 |
ext2 | U盤 | U盤一般不會存很多文件,且U盤的文件在電腦上有備份,安全性要求沒那么高,由于ext2不寫日志(journal),所以寫U盤性能比較好。當(dāng)然由于ext2的兼容性沒有fat好,目前大多數(shù)U盤格式還是用fat |
ext3 | 對穩(wěn)定性要求高的地方 | 有了ext4后,好像沒什么原因還要用ext3,ext4現(xiàn)在的問題是出來時(shí)間不長,還需要一段時(shí)間變穩(wěn)定 |
ext4 | 小文件較少 | ext系列的文件系統(tǒng)都不支持inode動(dòng)態(tài)分配,所以如果有大量小文件需要存儲的話,不建議用ext4 |
xfs | 小文件多或者需要大的xttr空間,如openstack swift將數(shù)據(jù)文件的元數(shù)據(jù)放在了xttr里面 | xfs支持inode動(dòng)態(tài)分配,所以不存在inode不夠的情況,并且xttr的最大長度可以達(dá)到64K |
btrfs | 沒有頻繁的寫操作,且需要btrfs的一些特性 | btrfs雖然還不穩(wěn)定,但支持眾多的功能,如果你需要這些功能,且不會頻繁地寫文件,那么選擇btrfs |
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【865977150】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。?/p>
磁盤的組成原理
除了固態(tài)硬盤之外,硬盤一般都由磁盤、主軸馬達(dá)、磁頭臂、磁頭、永磁鐵等部分組成。
盤片
盤片的表面涂有磁性物質(zhì),這些磁性物質(zhì)用來記錄二進(jìn)制數(shù)據(jù)。因?yàn)檎磧擅娑伎赏可洗判晕镔|(zhì),故一個(gè)盤片可能會有兩個(gè)盤面,硬盤的存儲介質(zhì)是磁性材料,磁頭通過電流改變磁盤的磁性來存儲數(shù)據(jù)。硬盤在邏輯上被劃分為磁道、柱面以及扇區(qū)。
扇區(qū),磁道
每個(gè)盤片被劃分為一個(gè)個(gè)磁道,每個(gè)磁道又劃分為一個(gè)個(gè)扇區(qū)。如下圖:
其中,最內(nèi)側(cè)磁道上的扇區(qū)面積最小,因此數(shù)據(jù)密度最大。
柱面
硬盤通常由重疊的一組盤片構(gòu)成,每個(gè)盤面都被劃分為數(shù)目相等的磁道,并從外緣的“0”開始編號,具有相同編號的磁道形成一個(gè)圓柱,稱之為磁盤的柱面。
分區(qū)
為什么要對硬盤進(jìn)行分區(qū)呢?
因?yàn)槲覀儽仨氁嬖V操作系統(tǒng):這塊硬盤可以訪問的區(qū)域是從 A 柱面到 B 柱面。如此一來,操作系統(tǒng)才能控制硬盤磁頭去 A-B 范圍內(nèi)的柱面上訪問數(shù)據(jù)。如果沒有告訴操作系統(tǒng)這些信息,它就無法在磁盤上存取數(shù)據(jù)。所以對磁盤分區(qū)的要點(diǎn)是:記錄每一個(gè)分區(qū)的起始與結(jié)束柱面。 實(shí)際上,分區(qū)時(shí)指定的開始和結(jié)束位置是柱面上的扇區(qū)(sector):
下面我們以CentOS7 為例來看一下分區(qū)情況:
[root@CentOS7 ~]# fdisk -l
磁盤 /dev/sda:21.5 GB, 21474836480 字節(jié),41943040 個(gè)扇區(qū)
Units = 扇區(qū) of 1 * 512 = 512 bytes
扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié)
I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié)
磁盤標(biāo)簽類型:dos # 使 用dos---MBR 分區(qū)方式
磁盤標(biāo)識符:0x000ce1c0
設(shè)備 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM(邏輯卷)
# sda 分區(qū)
磁盤 /dev/mapper/centos-root:18.2 GB, 18249416704 字節(jié),35643392 個(gè)扇區(qū)
Units = 扇區(qū) of 1 * 512 = 512 bytes
扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié)
I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié)
# 交換分區(qū)
磁盤 /dev/mapper/centos-swap:2147 MB, 2147483648 字節(jié),4194304 個(gè)扇區(qū)
Units = 扇區(qū) of 1 * 512 = 512 bytes
扇區(qū)大小(邏輯/物理):512 字節(jié) / 512 字節(jié)
I/O 大小(最小/最佳):512 字節(jié) / 512 字節(jié)
分區(qū)的組成結(jié)構(gòu)
MBR
那么,這些分區(qū)的信息(起始柱面與結(jié)束柱面)被存放在磁盤的主引導(dǎo)區(qū)(Master Boot Recorder, MBR)。MBR 在一塊硬盤的第 0 軌上,這也是計(jì)算機(jī)啟動(dòng)之后要去使用硬盤時(shí)必須讀取的第一個(gè)區(qū)域。
這個(gè)區(qū)域內(nèi)記錄了硬盤里所有分區(qū)的信息即磁盤分區(qū)表,以及啟動(dòng)時(shí)可以寫入引導(dǎo)程序的位置。因此 MBR 對于硬盤來說至關(guān)重要,如果它壞掉了,這塊磁盤也就壽終正寢了。
主引導(dǎo)記錄由三個(gè)部分組成:
- 引導(dǎo)程序占用其中的前446字節(jié)(偏移0~1BDH)
- 隨后的64字節(jié)(偏移1BEH~1FDH)為DPT(Disk Partition Table,硬盤分區(qū)表)
- 最后的兩個(gè)字節(jié)“55 AA”(偏移1FEH~1FFH)是結(jié)束標(biāo)志。
分區(qū)表:
GDT
Disk label type: gpt—GPT
在MBR硬盤中,分區(qū)信息直接存儲于主引導(dǎo)記錄(MBR)中(主引導(dǎo)記錄中還存儲著系統(tǒng)的引導(dǎo)程序)。但在GPT硬盤中,分區(qū)表的位置信息儲存在GPT頭中。但出于兼容性考慮,硬盤的第一個(gè)扇區(qū)仍然用作MBR,之后才是GPT頭。
跟現(xiàn)代的MBR一樣,GPT也使用邏輯區(qū)塊地址(LBA)取代了早期的CHS尋址方式。傳統(tǒng)MBR信息存儲于LBA 0,GPT頭存儲于LBA 1,接下來才是分區(qū)表本身。
為什么要提出新的方案呢?那就讓我們看看MBR分區(qū)方案有什么問題。前面已經(jīng)提到了
- 主分區(qū)數(shù)目不能超過4個(gè)的限制
- 關(guān)鍵的是MBR分區(qū)方案無法支持超過2TB容量的磁盤。因?yàn)檫@一方案用4個(gè)字節(jié)存儲分區(qū)的總扇區(qū)數(shù),最大能表示2的32次方的扇區(qū)個(gè)數(shù),按每扇區(qū)512字節(jié)計(jì)算,每個(gè)分區(qū)最大不能超過2TB。磁盤容量超過2TB以后,分區(qū)的起始位置也就無法表示了。
有了扇區(qū)(sector),有了柱面(cylinder),有了 磁頭(head),顯然可以定位數(shù)據(jù)了,這就是數(shù)據(jù)定位(尋址)方式之一,CHS(也稱3D),對早期的磁盤(上圖所示)非常有效,知道用哪個(gè) 磁頭,讀取哪個(gè)柱面上的第幾扇區(qū)就OK了。CHS模式支持的硬盤容量有限,用8bit來存儲 磁頭地址,用10bit來存儲柱面地址,用6bit來存儲扇區(qū)地址,而一個(gè)扇區(qū)共有512Byte,這樣使用CHS尋址一塊硬盤最大容量為256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B來算就是8.4GB)
但現(xiàn)在很多硬盤采用同密度盤片,意味著內(nèi)外磁道上的扇區(qū)數(shù)量不同,扇區(qū)數(shù)量增加,容量增加,3D很難定位尋址,新的尋址模式:LBA(Logical Block Addressing)。在LBA地址中,地址不再表示實(shí)際硬盤的實(shí)際 物理地址(柱面、 磁頭和扇區(qū))。LBA編址方式將CHS這種三維尋址方式轉(zhuǎn)變?yōu)橐痪S的線性尋址,它把硬盤所有的 物理扇區(qū)的C/H/S編號通過一定的規(guī)則轉(zhuǎn)變?yōu)橐痪€性的編號,系統(tǒng)效率得到大大提高,避免了煩瑣的 磁頭/柱面/扇區(qū)的尋址方式。在訪問硬盤時(shí),由硬盤控制器再將這種 邏輯地址轉(zhuǎn)換為實(shí)際硬盤的 物理地址。
LBA下的編號,扇區(qū)編號是從0開始。邏輯扇區(qū)號LBA的公式:
LBA(邏輯扇區(qū)號)=磁頭數(shù) × 每磁道扇區(qū)數(shù) × 當(dāng)前所在柱面號 + 每磁道扇區(qū)數(shù) × 當(dāng)前所在磁頭號 + 當(dāng)前所在扇區(qū)號 – 1
例如:CHS=0/0/1,則根據(jù)公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0
也就是說 物理0柱面0 磁頭1扇區(qū),是 邏輯0扇區(qū)。也就是說 LBA就是扇區(qū)的編號, 按照磁道 柱面 和 磁頭 從小到大的順序編號
計(jì)算機(jī)啟動(dòng)的過程
1. BIOS 程序啟動(dòng)
上個(gè)世紀(jì)70年代初,“只讀內(nèi)存”(read-only memory,縮寫為ROM)發(fā)明,開機(jī)程序被刷入ROM芯片,計(jì)算機(jī)通電后,第一件事就是讀取它。這塊芯片里的程序叫做"基本輸出輸入系統(tǒng)"(Basic Input/Output System),簡稱為BIOS。
2. 硬件自檢
BIOS程序首先檢查,計(jì)算機(jī)硬件能否滿足運(yùn)行的基本條件,這叫做"硬件自檢"(Power-On Self-Test),縮寫為POST。
如果硬件出現(xiàn)問題,主板會發(fā)出不同含義的蜂鳴,啟動(dòng)中止。如果沒有問題,屏幕就會顯示出CPU、內(nèi)存、硬盤等信息。
硬件自檢完成后,BIOS把控制權(quán)轉(zhuǎn)交給下一階段的啟動(dòng)程序。這時(shí),BIOS需要知道,“下一階段的啟動(dòng)程序"具體存放在哪一個(gè)設(shè)備。也就是說,BIOS需要有一個(gè)外部儲存設(shè)備的排序,排在前面的設(shè)備就是優(yōu)先轉(zhuǎn)交控制權(quán)的設(shè)備。這種排序叫做"啟動(dòng)順序”(Boot Sequence)。
打開BIOS的操作界面,里面有一項(xiàng)就是"設(shè)定啟動(dòng)順序"。
3. 主引導(dǎo)記錄
BIOS按照"啟動(dòng)順序",把控制權(quán)轉(zhuǎn)交給排在第一位的儲存設(shè)備。
這時(shí),計(jì)算機(jī)讀取該設(shè)備的第一個(gè)扇區(qū),也就是讀取最前面的512個(gè)字節(jié)。如果這512個(gè)字節(jié)的最后兩個(gè)字節(jié)是0x55和0xAA,表明這個(gè)設(shè)備可以用于啟動(dòng);如果不是,表明設(shè)備不能用于啟動(dòng),控制權(quán)于是被轉(zhuǎn)交給"啟動(dòng)順序"中的下一個(gè)設(shè)備。 這最前面的512個(gè)字節(jié),就叫做"主引導(dǎo)記錄"(Master boot record,縮寫為MBR)。 主引導(dǎo)記錄"只有512個(gè)字節(jié),放不了太多東西。它的主要作用是,告訴計(jì)算機(jī)到硬盤的哪一個(gè)位置去找操作系統(tǒng)
4. 啟動(dòng)管理器
在這種情況下,計(jì)算機(jī)讀取"主引導(dǎo)記錄"前面446字節(jié)的機(jī)器碼之后,不再把控制權(quán)轉(zhuǎn)交給某一個(gè)分區(qū),而是運(yùn)行事先安裝的"啟動(dòng)管理器"(boot loader),由用戶選擇啟動(dòng)哪一個(gè)操作系統(tǒng)。Linux環(huán)境中,目前最流行的啟動(dòng)管理器是Grub。
5. 操作系統(tǒng)
控制權(quán)轉(zhuǎn)交給操作系統(tǒng)后,操作系統(tǒng)的內(nèi)核首先被載入內(nèi)存。 以Linux系統(tǒng)為例,先載入/boot目錄下面的kernel。內(nèi)核加載成功后,第一個(gè)運(yùn)行的程序是/sbin/init。它根據(jù)配置文件(Debian系統(tǒng)是/etc/initab, CentOS 是systemd)產(chǎn)生init進(jìn)程。這是Linux啟動(dòng)后的第一個(gè)進(jìn)程,pid進(jìn)程編號為1,其他進(jìn)程都是它的后代。
然后,init線程加載系統(tǒng)的各個(gè)模塊,比如窗口程序和網(wǎng)絡(luò)程序,直至執(zhí)行/bin/login程序,跳出登錄界面,等待用戶輸入用戶名和密碼。
文件存貯
文件系統(tǒng)到底是怎么管理磁盤的被?首先,操作系統(tǒng)會將磁盤分區(qū)后,同一個(gè)文件系統(tǒng)中,我們以ext系列為例來說明: ext系統(tǒng)將空間(這里的空間是指的一段連續(xù)的磁盤空間)劃分為不同的功能區(qū),比如元數(shù)據(jù)區(qū)和數(shù)據(jù)區(qū)。元數(shù)據(jù)去主要存貯文件的一些屬性,比如說大小,快信息,這些信息被存貯在inode當(dāng)中,而數(shù)據(jù)去以datablock 為存貯單元,主要是存放了文件的數(shù)據(jù)。
因?yàn)榇疟P上的數(shù)據(jù)要和內(nèi)存交互,而內(nèi)存通常是以4KB為單位的,所以從邏輯上,把磁盤按照4KB劃分比較方便(稱為一個(gè)block)?,F(xiàn)在假設(shè)由一個(gè)文件系統(tǒng)管理64個(gè)blocks的一個(gè)磁盤區(qū)域:
順序文件結(jié)構(gòu)
顧名思義,文件的存貯數(shù)據(jù)塊是連續(xù)的空間。
優(yōu)點(diǎn)是不需要額外的空間開銷,只要在文件目錄中指出文件的大小和首塊的塊號即可,對順序的訪問效率很高。適應(yīng)于順序存取且文件不經(jīng)常修改的情況。 缺點(diǎn)是
- 文件動(dòng)態(tài)地增長和縮小時(shí)系統(tǒng)開銷很大;
- 文件創(chuàng)建時(shí)要求用戶提供文件的大小;
- 存儲空間浪費(fèi)較大。
鏈?zhǔn)轿募到y(tǒng)
克服了連續(xù)文件的不足之處,但文件的隨機(jī)訪問系統(tǒng)開銷較大。適應(yīng)于順序訪問的文件。
索引式文件系統(tǒng)
在UNIX時(shí)代,就已經(jīng)實(shí)現(xiàn)了索引式的文件系統(tǒng)。它的原理是為一個(gè)文件的所有塊建立一個(gè)索引表,索引表就是塊地址數(shù)組,每個(gè)數(shù)組元素就是塊的地址,第n個(gè)數(shù)組元素指向文件中的第n個(gè)塊,這樣訪問任意一個(gè)塊的時(shí)候,只需要從索引表中獲得塊地址就可以了。而且文件中的塊依然可以分散到不連續(xù)的零散空間中。其結(jié)構(gòu)如下圖所示
既適應(yīng)于順序存訪問,也適應(yīng)于隨機(jī)訪問,是一種比較好的文件物理結(jié)構(gòu),但要有用于索引表的空間開銷和文件索引的時(shí)間開銷
Ext 文件分區(qū)布局
每個(gè)分區(qū),將若干個(gè)塊兒組成一個(gè)塊組,每個(gè)塊組會有以下幾個(gè)結(jié)構(gòu)
超級塊
1)超級塊(Super Block)描述整個(gè)分區(qū)的文件系統(tǒng)信息,如inode/block的大小、總量、使用量、剩余量,以及文件系統(tǒng)的格式與相關(guān)信息。超級塊在每個(gè)塊組的開頭都有一份拷貝(第一個(gè)塊組必須有,后面的塊組可以沒有)。
為了保證文件系統(tǒng)在磁盤部分扇區(qū)出現(xiàn)物理問題的情況下還能正常工作,就必須保證文件系統(tǒng)的super block信息在這種情況下也能正常訪問。所以一個(gè)文件系統(tǒng)的super block會在多個(gè)block group中進(jìn)行備份,這些super block區(qū)域的數(shù)據(jù)保持一致。 超級塊記錄的信息有:
1、block 與 inode 的總量(分區(qū)內(nèi)所有Block Group的block和inode總量);
2、未使用與已使用的 inode / block 數(shù)量;
3、block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes);
4、filesystem 的掛載時(shí)間、最近一次寫入數(shù)據(jù)的時(shí)間、最近一次檢驗(yàn)磁盤 (fsck) 的時(shí)間等文件系統(tǒng)的相關(guān)信息;
5、一個(gè) valid bit 數(shù)值,若此文件系統(tǒng)已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
它的結(jié)構(gòu)如圖所示
對于ext2/3/4文件系統(tǒng),以上介紹的這些inode bitmap, data block bitmap和inode table,都可以通過一個(gè)名為"dumpe2fs"的工具來查看其在磁盤上的具體位置
GDT
2)塊組描述符表(GDT,Group Descriptor Table)由很多塊組描述符組成,整個(gè)分區(qū)分成多個(gè)塊組就對應(yīng)有多少個(gè)塊組描述符。
每個(gè)塊組描述符存儲一個(gè)塊組的描述信息,如在這個(gè)塊組中從哪里開始是inode Table,從哪里開始是Data Blocks,空閑的inode和數(shù)據(jù)塊還有多少個(gè)等等。
Inode 和 Block 位圖
4)inode位圖(inode Bitmap)和塊位圖類似,本身占一個(gè)塊,其中每個(gè)bit表示一個(gè)inode是否空閑可用。 Inode bitmap的作用是記錄block group中Inode區(qū)域的使用情況,Ext文件系統(tǒng)中一個(gè)block group中可以有16384個(gè)Inode,代表著這個(gè)Ext文件系統(tǒng)中一個(gè)block group最多可以描述16384個(gè)文件。
inode
索引表的索引結(jié)構(gòu)稱為inode,是"index node"的簡稱,用來索引,跟蹤一個(gè)文件的所有塊。inode是文件索引結(jié)構(gòu)組織形式的具體體現(xiàn),一個(gè)文件就必須對應(yīng)一個(gè)inode。
5)inode表(inode Table)由一個(gè)塊組中的所有inode組成。一個(gè)文件除了數(shù)據(jù)需要存儲之外,一些描述信息也需要存儲,如文件類型,權(quán)限,文件大小,創(chuàng)建、修改、訪問時(shí)間等,這些信息存在inode中而不是數(shù)據(jù)塊中。
inode表占多少個(gè)塊在格式化時(shí)就要寫入塊組描述符中。 在Ext2/Ext3文件系統(tǒng)中,每個(gè)文件在磁盤上的位置都由文件系統(tǒng)block group中的一個(gè)Inode指針進(jìn)行索引,Inode將會把具體的位置指向一些真正記錄文件數(shù)據(jù)的block塊,需要注意的是這些block可能和Inode同屬于一個(gè)block group也可能分屬于不同的block group。我們把文件系統(tǒng)上這些真實(shí)記錄文件數(shù)據(jù)的block稱為Data blocks。
索引表本身要占用存儲空間,如果文件很大時(shí),塊就比較多,索引表就會很大。UNIX為了解決這個(gè)問題,采用間接索引表來處理。
ls -i 命令可以顯示inode 號
? command ls -ilt
total 24
3003623(inode號) -rwxr-xr-x 1 root root 78 8 10 16:43 jump
3003622(inode號) -rwxr-xr-x 1 root root 476 8 10 16:42 jumper.sh
3003624(inode號) -rwxr-xr-x 1 root root 3346 3 24 2019 imgcat
data block
6)數(shù)據(jù)塊(Data Block)是用來放置文件內(nèi)容數(shù)據(jù)的地方。根據(jù)不同的文件類型有以下幾種情況:
對于普通文件,文件的數(shù)據(jù)存儲在數(shù)據(jù)塊中。
對于目錄,該目錄下的所有文件名和目錄名存儲在所在目錄的數(shù)據(jù)塊中,除了文件名外,ls -l命令看到的其它信息保存在該文件的inode中。
文件分區(qū)實(shí)踐
我們根據(jù)實(shí)踐一下磁盤分區(qū)的步驟,實(shí)踐一下ext4下的文件管理系統(tǒng)的步驟。我們的系統(tǒng)如下。
Linux CentOS7 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
首先第一步,我們需要一塊硬盤,用于我是CentOS7的系統(tǒng),這里我在虛擬機(jī)上新建了一塊硬盤,容量是1G,這塊硬盤還沒有格式,我可以在我的/dev 目錄下找到這塊硬盤。
[root@CentOS7 ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb
查看分區(qū),我一共有兩塊硬盤,一塊是sda,一塊是sdb。我們接下來需要格式化一下sdb.
格式化硬盤
首先,我們需要用fdisk 將sdb
[root@CentOS7 ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內(nèi)存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標(biāo)識符 0x30c1a40d 創(chuàng)建新的 DOS 磁盤標(biāo)簽。
命令(輸入 m 獲取幫助):m #獲取幫助命令
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(輸入 m 獲取幫助):n
Partition type:
p primary (0 primary, 0 extended, 4 free) (這里表示,我們沒有任何分許,允許你創(chuàng)建4個(gè)可用分區(qū),0個(gè)主分區(qū),和一個(gè)邏輯分區(qū))
e extended
Select (default p): p (我們來創(chuàng)建主分區(qū))
分區(qū)號 (1-4,默認(rèn) 1): (選擇分區(qū)號,默認(rèn)即可)
起始 扇區(qū) (2048-2097151,默認(rèn)為 2048): (0-2048) # 前2048是系統(tǒng)預(yù)留空間
將使用默認(rèn)值 2048
Last 扇區(qū), +扇區(qū) or +size{K,M,G} (2048-2097151,默認(rèn)為 2097151): (我們直接全部將1g劃分為這個(gè)分區(qū))
將使用默認(rèn)值 2097151
分區(qū) 1 已設(shè)置為 Linux 類型,大小設(shè)為 1023 MiB
創(chuàng)建文件系統(tǒng)
使用CentOS7 自帶的文件系統(tǒng)格式工具,將sdb整個(gè)硬盤格式化成ext4文件格式。
mke2fs:ext系列文件系統(tǒng)專用管理工具
[root@CentOS7 ~]# mkfs.ext4 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
無論如何也要繼續(xù)? (y,n) y
文件系統(tǒng)標(biāo)簽=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks # inodes數(shù)量和blicks 是數(shù)量
13107 blocks (5.00%) reserved for the super user
第一個(gè)數(shù)據(jù)塊=0
Maximum filesystem blocks=268435456
8 block groups # 8個(gè)塊組
32768 blocks per group, 32768 fragments per group
8192 inodes per group # 每組 inode 的數(shù)量
Superblock backups stored on blocks: # 超級快的存貯位置
32768, 98304, 163840, 229376
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (8192 blocks): 完成 # 創(chuàng)建日志區(qū)
Writing superblocks and filesystem accounting information: 完成
查看分區(qū)
經(jīng)過生面的步驟,我們已經(jīng)將分區(qū)創(chuàng)建完畢,我們使用blkid 命令來查看一下分區(qū)
[root@CentOS7 ~]# blkid
/dev/sda1: UUID="79678d4f-9276-4d1e-8093-28623d77461e" TYPE="xfs"
/dev/sda2: UUID="FtqgeH-yiRM-f1Wr-73LT-QkQf-2kgX-BkXYi1" TYPE="LVM2_member"
/dev/sr0: UUID="2020-04-22-00-54-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="d0412c8e-07f5-4716-8be7-8ed2da9affca" TYPE="xfs"
/dev/mapper/centos-swap: UUID="ac1ae2c7-d653-4496-97fa-d9315f56993f" TYPE="swap"
/dev/sdb: UUID="6285b923-0ee4-444d-9c68-d6af94914bc3" TYPE="ext4"
查看 超級塊和塊組
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:
Last mounted on:
Filesystem UUID: 6285b923-0ee4-444d-9c68-d6af94914bc3
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file 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: 65536
Block count: 262144
Reserved block count: 13107
Free blocks: 249189
Free inodes: 65525
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 127
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Wed Sep 30 12:22:05 2020
Last mount time: n/a
Last write time: Wed Sep 30 12:22:05 2020
Mount count: 0
Maximum mount count: -1
Last checked: Wed Sep 30 12:22:05 2020
Check interval: 0 ()
Lifetime writes: 33 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 61f49ab4-d494-4be8-95b7-404358b685aa
Journal backup: inode blocks
Journal features: (none)
日志大小: 32M
Journal length: 8192
Journal sequence: 0x00000001
Journal start: 0
Group 0: (Blocks 0-32767)
Checksum 0x4cc2, unused inodes 8181
主 superblock at 0, Group descriptors at 1-1
保留的GDT塊位于 2-128
Block bitmap at 129 (+129), Inode bitmap at 145 (+145)
Inode表位于 161-672 (+161)
28521 free blocks, 8181 free inodes, 2 directories, 8181個(gè)未使用的inodes
可用塊數(shù): 142-144, 153-160, 4258-32767
可用inode數(shù): 12-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT]
Checksum 0xabae, unused inodes 8192
備份 superblock at 32768, Group descriptors at 32769-32769
保留的GDT塊位于 32770-32896
Block bitmap at 130 (bg #0 + 130), Inode bitmap at 146 (bg #0 + 146)
Inode表位于 673-1184 (bg #0 + 673)
32639 free blocks, 8192 free inodes, 0 directories, 8192個(gè)未使用的inodes
可用塊數(shù): 32897-65535
可用inode數(shù): 8193-16384
...
審核編輯:湯梓紅
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40275 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209322 -
文件系統(tǒng)
+關(guān)注
關(guān)注
0文章
284瀏覽量
19904
發(fā)布評論請先 登錄
相關(guān)推薦
評論