Linux磁碟系統——磁碟系統簡介 摘要:本文主要學習了Linux系統中有關磁碟的一些知識。 文件系統 說明 硬碟是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬碟,通常要對其進行分區並格式化。分區就如同把一個大櫃按照要求分割成幾個小柜子。格式化就好比在每個小柜子中打入隔 ...
Linux磁碟系統——磁碟系統簡介
摘要:本文主要學習了Linux系統中有關磁碟的一些知識。
文件系統
說明
硬碟是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬碟,通常要對其進行分區並格式化。分區就如同把一個大櫃按照要求分割成幾個小柜子。格式化就好比在每個小柜子中打入隔斷,決定每個隔斷的大小和位置,然後在櫃門上貼上標簽,標簽中寫清楚每件衣服保存的隔斷的位置和這件衣服的一些特性。
在格式化的過程中會向硬碟中寫入文件系統。因為不同的操作系統,管理文件的方式也不盡相同(給文件設定的屬性和許可權也不完全一樣),因此,為了使硬碟有效存放當前系統中的文件數據,就需要將硬碟進行格式化,令其使用和操作系統一樣(或接近)的文件系統格式。
不同的文件系統,其運作模式和操作系統的文件數據有關。
虛擬文件系統
文件系統指文件存在的物理空間。在Linux系統中,每個分區都是一個文件系統,都有自己的目錄層次結構。
Linux的最重要特征之一就是支持多種文件系統,這樣它更加靈活,並可以和許多其它種操作系統共存。
Virtual File System(虛擬文件系統)使得Linux可以支持多個不同的文件系統,由於系統已將Linux文件系統的所有細節進行了轉換,所以Linux核心的其它部分及系統中運行的程式將看到統一的文件系統。
Linux的虛擬文件系統允許用戶同時能透明地安裝許多不同的文件系統,虛擬文件系統是為Linux用戶提供快速且高效的文件訪問服務而設計的。
文件系統類型
minix:在Minix操作系統上使用的文件系統,Linux上運行的第一種文件系統。它有很多限制:64M分區大小限制,短文件名,唯一時間戳等等。只有軟盤或者RAM中可能用的到。
ext:minix文件系統的複雜擴展,Linux中最早的文件系統,由於在性能和相容性上具有很多缺陷,已經被ext2文件系統完全取代。
ext2:是ext文件系統的擴展,可以給Linux的文件系統提供最佳支持(主要是速度和CPU使用上),支持最大16TB的分區和最大2TB的文件。
ext3:是ext2文件系統的擴展,最大的區別就是帶日誌功能,以便在系統突然停止時提高文件系統的可靠性,支持最大16TB的分區和最大2TB的文件。
ext4:是ext3文件系統的擴展。ext4在性能、伸縮性和可靠性方面進行了大量改進,支持最大1EB文件系統和16TB文件、無限數量子目錄、Extents連續數據塊的概念、快速FSCK、日誌校驗、無日誌模式、等。它是CentOS 6的預設文件系統。
xfs:xfs是一個64位文件系統,最大支持8EB減1位元組的單個文件系統,實際部署時取決於宿主操作系統的最大塊限制。對於一個32位Linux系統,文件和文件系統的大小會被限制在16TB。它是CentOS 6的預設文件系統。
swap:swap是Linux中用於交換分區的文件系統(類似於Windows中的虛擬記憶體),當記憶體不夠用時,使用交換分區暫時替代記憶體。一般大小為記憶體的2倍,但是不要超過2GB。它是Linux的必需分區。
nfs:nfs是網路文件系統(Network File System)的縮寫,是用來實現不同主機之間文件共用的一種網路服務,本地主機可以通過掛載的方式使用遠程共用的資源。
iso9660:光碟的標準文件系統。Linux要想使用光碟,必須支持iso9660文件系統。
fat:就是Windows下的fatl6文件系統,在Linux中識別為fat。
vfat:就是Windows下的fat32文件系統,在Linux中識別為vfat。支持最大32GB的分區和最大4GB的文件。
ntfs:就是Windows下的ntfs文件系統,不過Linux預設是不能識別ntfs文件系統的,如果需要識別,則需要重新編譯內核才能支持。它比fat32文件系統更加安全,速度更快,支持最大2TB的分區和最大64GB的文件。
ufs:Sun公司的操作系統Solaris和SunOS所採用的文件系統。
proc:Linux中基於記憶體的虛擬文件系統,用來管理記憶體存儲目錄/proc。
sysfs:和proc一樣,也是基於記憶體的虛擬文件系統,用來管理記憶體存儲目錄/sysfs。
tmpfs:也是一種基於記憶體的虛擬文件系統,不過也可以使用swap交換分區。
硬碟分區
含義
磁碟的組成主要有磁碟盤、機械手臂、磁碟讀取頭與主軸馬達所組成,而資料的寫入其實是在磁碟盤上面。磁碟盤上面又可細分出磁區(Sector)與磁軌(Track)兩種單位,其中磁區的物理量設計有兩種大小,分別是512B與4KB。
整個磁碟的第一個磁區特別的重要,因為他記錄了整顆磁碟的重要數據。早期磁碟使用的分割格式稱為MBR(Master Boot Record)格式,但是由於近年來磁碟的容量不斷擴大,造成讀寫上的一些困擾,甚至有些大於2TB以上的磁碟分割已經讓某些作業系統無法存取,因此後來又多了一個新的磁碟分割格式,稱為GPT(GUID Partition Table)。
分區格式
1)MBR
早期的Linux系統為了相容於Windows的磁碟,因此使用的是支持Windows的MBR(Master Boot Record)的方式來處理開機管理程式和分割表。而開機管理程式紀錄區與分割表則通通放在磁碟的第一個磁區,這個磁區通常是512B的大小(舊的磁碟磁區都是512B),所以說,第一個磁區512B會有這兩個數據:
主要開機記錄(Master Boot Record,MBR):可以安裝開機管理程式的地方,有446B。
分割表(Partition Table):記錄整顆硬碟分割的狀態,有64B。
由於分割表所在區塊僅有64B容量,因此最多僅能有四組分區,每組分區記錄了該區段的啟始與結束的磁柱號碼,可以通過擴展分區的方式增加分區的個數。
一個磁碟最多只能有一個擴展分區,擴展分區不能夠格式化,裡面可以分出邏輯分區。邏輯分區的區號從sda4開始,前面3個分區是保留給主分區使用的,第4個分區sda4代表擴展分區。
2)GPT
因為最新的磁碟的扇區有可能為4K,因此GPT為了和MBR相相容,使用了邏輯區塊位址(Logical Block Address,LBA)來代替扇區,GPT將磁碟所有區塊以此LBA(預設為512B)來規劃,第一個LBA稱為LBA0(從0開始編號)。
LBA0中446位元組存儲開機管理程式,而在原本的分割表的紀錄區內,僅放入一個特殊標誌的分割,用來表示此磁碟為GPT格式。
LBA1紀錄了分割表本身的位置與大小,同時紀錄了備份用的LBA區塊放置的位置。
在LBA2區塊到LBA33區塊,每個LBA可以記錄四個分區信息,因此可以記錄32*4=128個分區信息。每個LBA為512B,因此每個分區使用128B來記錄,用64B來記錄分區的起始或結束LBA,因此一個分區理論最大為2^64*512B=2^33TB。
開機流程中的開機檢測程式
基本上,目前的主機系統在載入硬體驅動方面的程式,主要有早期的BIOS與新的UEFI兩種機制。
1)BIOS
BIOS是一個寫入到主機板上的一個程式,是開機時電腦系統會主動執行的第一個程式。
接下來BIOS會去分析電腦裡面有哪些儲存設備,我們以硬碟為例,BIOS會依據使用者的設定去取得能夠開機的硬碟,並且到該硬碟裡面去讀取第一個磁區的MBR位置。MBR這個僅有446B的硬碟容量裡面會放置最基本的開機管理程式,此時BIOS就功成圓滿,而接下來就是MBR內的開機管理程式的工作了。
2)UEFI
如果你的分割表為GPT格式的話,那麼BIOS也能夠從LBA0的區塊讀取第一階段的開機管理程式碼。如果你的開機管理程式能夠認識GPT的話,那麼使用BIOS同樣可以讀取到正確的作業系統核心。
換句話說,如果開機管理程式不懂GPT,那自然就無法讀取核心檔案,開機就失敗了。
由於LBA0僅提供第一階段的開機管理程式,因此如果你使用類似GRUB的開機管理程式的話,那麼就得要額外分出一個BIOS Boot的分割槽,這個分割槽能夠放置其他開機過程所需的程式。在CentOS當中,這個分割槽通常占用2MB左右而已。
為瞭解決這個問題,因此就有了UEFI(Unified Extensible Firmware Interface)這個統一可延伸程式界面的產生。UEFI直接從預啟動的操作環境載入操作系統,簡化開機過程有效提高啟動速度。
另外,與BIOS模式相比,雖然UEFI可以直接取得GPT的分割表,不過最好依舊擁有BIOS Boot的分割槽支援。同時,為了與Windows相容,並且提供其他第三方廠商所使用的UEFI應用程式儲存的空間,你必須要格式化一個vfat的檔案系統,大約提供512MB到1G左右的容量,以讓其他UEFI執行較為方便。
硬碟分區的好處
1)方便管理和控制
首先,可以將系統中的數據(也包括程式)按不同的應用分成幾類,之後將這些不同類型的數據分別存放在不同的磁碟分區中。由於在每個分區上存放的都是類似的數據或程式,這樣管理和維護就簡單多了。
2)提高系統的效率
給硬碟分區,可以直接縮短系統讀寫磁碟時磁頭移動的距離,也就是說,縮小了磁頭搜尋的範圍;反之,如果不使用分區,每次在硬碟上搜尋信息時可能要搜尋整個硬碟,所以速度會很慢。另外,硬碟分區也可以減輕碎片(文件不連續存放)所造成的系統效率下降的問題。
3)使用磁碟配額的功能限制用戶使用的磁碟量
由於限制用戶使用磁碟配額的功能,只能在分區一級上使用,所以,為了限制用戶使用磁碟的總量,防止用戶浪費磁碟空間(甚至將磁碟空間耗光),最好將磁碟先分區,然後在分配給一般用戶。
4)便於備份和恢復
硬碟分區後,就可以只對所需的分區進行備份和恢復操作,這樣的話,備份和恢復的數據量會大大地下降,而且也更簡單和方便。
掛載硬體設備
為什麼要掛載
Linux系統中“一切皆文件”,所有文件都放置在以根目錄為樹根的樹形目錄結構中。在Linux看來,任何硬體設備也都是文件,它們各有自己的一套文件系統(文件目錄結構)。
因此產生的問題是,當在Linux系統中使用這些硬體設備時,只有將Linux本身的文件目錄與硬體設備的文件目錄合二為一,硬體設備才能為我們所用。合二為一的過程稱為“掛載”。如果不掛載,通過Linux系統中的圖形界面系統可以查看找到硬體設備,但命令行方式無法找到。
什麼是掛載
掛載,指的就是將設備文件中的頂級目錄連接到Linux根目錄下的某一目錄(最好是空目錄),訪問此目錄就等同於訪問設備文件。由於掛載操作會使得原有目錄中文件被隱藏,因此根目錄以及系統原有目錄都不要作為掛載點,會造成系統異常甚至崩潰,掛載點最好是新建的空目錄。Linux系統使用任何硬體設備,都必須將設備文件與已有目錄文件進行掛載。
根目錄下的/dev/目錄文件負責所有的硬體設備文件,事實上,當U盤插入Linux後,系統也確實會給U盤分配一個目錄文件,就位於/dev/目錄下,但無法通過目錄文件直接訪問U盤數據,訪問此目錄只會提供給你此設備的一些基本信息(比如容量)。