摘要:本文主要學習了Linux系統中有關磁盤的一些知識。安全
硬盤是用來存儲數據的,能夠將其想象成櫃子,只不過櫃子是用來存儲衣物的。新買來的硬盤,一般要對其進行分區並格式化。分區就如同把一個大櫃按照要求分割成幾個小櫃子。格式化就比如在每一個小櫃子中打入隔斷,決定每一個隔斷的大小和位置,而後在櫃門上貼上標籤,標籤中寫清楚每件衣服保存的隔斷的位置和這件衣服的一些特性。網絡
在格式化的過程當中會向硬盤中寫入文件系統。由於不一樣的操做系統,管理文件的方式也不盡相同(給文件設定的屬性和權限也不徹底同樣),所以,爲了使硬盤有效存放當前系統中的文件數據,就須要將硬盤進行格式化,令其使用和操做系統同樣(或接近)的文件系統格式。性能
不一樣的文件系統,其運做模式和操做系統的文件數據有關。學習
文件系統指文件存在的物理空間。在Linux系統中,每一個分區都是一個文件系統,都有本身的目錄層次結構。spa
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盤數據,訪問此目錄只會提供給你此設備的一些基本信息(好比容量)。