標籤:

磁碟分區、磁碟格式化以及文件系統基礎

磁碟分區、磁碟格式化以及文件系統基礎

5 人贊了文章

在我使用虛擬機安裝Linux的過程中,都需要對硬碟進行分區,但是當時只是為了linux 能夠儘快的跑起來,並沒有注意磁碟分區以及磁碟系統裡面大有門道。

首先講講為什麼要有磁碟分區?整塊硬碟就一個區不行嗎?在我看來,有下面幾個原因:

1. 磁碟分區後,各個區間的數據不會互相影響。比如你創建了一個/boot分區(說好的是硬碟分區,怎麼是一個目錄?)和一個/分區,此時你的啟動配置文件是放在/boot分區,而你的其他數據文件、配置文件都放在/分區中,及時你的/分區的重要數據被誤刪了,也不會導致你的linux系統啟動不了,因為你的啟動信息是在/boot分區中;

2. 方便查找:如果一個硬碟只有一個分區,那麼所有的數據都存放在這一個分區中。相比我講硬碟分為若干個區,每個區用作不同的用途,比如/sda1存放電影,/sda2存放遊戲等等,這樣找內容時,直接找到相應的分區,效率就更高。

對於一塊磁碟來講,它的功能就是存儲數據。那麼一個裸盤需要經過什麼樣的操作流程才可以向硬碟中存儲數據呢?大概需要這麼幾部:磁碟分區------->磁碟格式化--------->掛載。可以這樣來理解這個過程:講你的硬碟比作你買的房子,往房間添加傢具比作你對硬碟進行存儲。毛坯房就是裸盤,此時你不會往房間里添加傢具,因為還沒有裝修,也還沒有劃分隔層,你不知道哪一間是廚房,哪一間是卧室,所以你得先將各個房間劃分好,才可以將餐桌、床等傢具放入對應的房間。劃分房間的這一步操作就叫做硬碟分區;在房間劃分好之後,你還不能進去,因為你還沒有對房間進行裝修,此時廚房來做飯吃飯的,所有需要水龍頭、餐桌,卧室是用來睡覺的,所以需要安裝床,不同房間的用途給每個房間的使命不一樣,這一步叫做磁碟格式化(因為廚房要裝水龍頭就需要把水管接進來,而卧室不需要);當你把把各個房間都裝修好後(上粉,水電),你可以往各個房間里添加傢具,但是你怎麼把你需要的傢具從傢具市場搬到你的房間呢?如果你需要將床搬到卧室,你要經過卧室的門(掛載點),通過這扇門你可以往房間里存儲東西。下面分別來講磁碟分區、格式化以及改在操作。

磁碟分區用到命令fdisk命令,可以使用fdisk -l 觀察磁碟分區的情況,如下圖所示。這一部分內容只需要熟悉fsidk命令,自己多練加好了。需要注意的是分區信息是寫在MBR上的,它最大的限制來自於他的大小不夠大到儲存所有分割與開機管理程序的信息,因此,MBR 僅提供最多四個 partition 的記憶,這就是所謂的 Primary (P)與 Extended (E) 的 partition最多只能有四個的原因了。

磁碟格式化,就是把你的硬碟裝修一下----->裝入一個文件系統,如下所示:將sdb6分區格式裝入ext4系統,此時會對sdb6進行初始化。文件系統由二部分組成:inode和block。而第一塊block稱之為superblock,superblock 的作用是儲存像是檔案系統的大小、空的和填滿的區塊,以及他各自的總數和其它諸如此類的信息等等, 這也就是說,當您要使用這一個磁碟分割槽( 或者說是檔案系統 )來進行數據存取的時候,第一個要經過的就是 superblock 這個區塊了。

block是文件系統層面上的概念,在磁碟上,存儲的最小單元為扇區(512Byte),加入你要存一下大文件,那麼你需要讀取硬碟很多次。為了克服這個效率上的困擾,所以就有邏輯區塊( Block )的產生了! 邏輯區塊是在分區進行文件系統的格式化時, 所指定的最小存儲單位,Block 的大小為 sector 的 2 的次方,如上圖,Block size=4096為512的8倍。此時,磁頭一次可以讀取一個 block ,指定 Block 為 4 KBytes ( 亦即由連續的八個 扇區所構成一個 block ),只需要原來的1/8次讀完,這個時候可就大大的增加檔案的讀取效能啦!

inode 則是記錄該檔案的相關屬性,以及檔案內容放置在哪一個 Block之內的信息。 簡單的說, inode 除了記錄檔案的屬性外,同時還必須要具有指向( pointer )的功能,亦即指向檔案內容放置的區塊之中,好讓操作系統可以正確的去取得檔案的內容啊。

當創建個文件或者目錄時,系統就為該文件分配了inode和block,下圖來自鳥哥的私房菜,創建目錄和創建文件時,文件系統會給改文件或目錄一個inode號和只是一個block塊,inode號指向該block塊,若創建的是一個目錄,該block塊會記錄這個目錄下的相關聯的檔案或者目錄的關聯性,在我理解就是記錄目錄下文件或者子目錄的名字和inode號,這個二元組信息又可以通過inode號去找文件。

那麼修改文件時時系統是如何找到這個文件的呢?用cat /etc/passwd例子進行說明。入下圖所示:第一步是先找到/的inode,然後會inode指針會指向block /,而在block /中存在著子目錄和文件的inode號和名字,也就是可以找到inode etc;第二步是通過block /中etc 的inode號找到inode etc;第三部通過inode etc 找到block etc;第四步,通過block etc找到passwd的inode;第五步,通過inode passwd找到block passwd,然後就可以對文件進行修改了

推薦閱讀:

Linux中sed和awk的使用及其相關實例解析 | IT宅.com
學習Vim的四周計劃
你應該知道關於 Ubuntu 18.04 的一些事
Linux命令行常用命令及python應用
77%的Linux運維都不懂的內核問題

TAG:Linux |