目錄
文件系統(FAT16、32、NTFS和EXT2、3、4、Xfs、Tmpfs)
MBR和GPT
新買一塊硬盤,設置分區時,系統會詢問你是想要使用MBR分區形式還是GPT分區形式(有些硬盤出廠的時候就默認給你設定了分區形式)。MBR是以前的分區形式,GPT是一種新的分區形式,現在逐漸取代MBR分區形式。
GPT帶來了很多新特性,但MBR仍然擁有最好的兼容性。GPT並不是Windows專用的新標准—— Mac OS X,Linux,及其他操作系統同樣使用GPT。在使用新磁盤之前,你必須對其進行分區。MBR(Master Boot Record)和GPT(GUID Partition Table)是在磁盤上存儲分區信息的兩種不同方式。這些分區信息包含了分區從哪里開始,這樣操作系統才知道哪個扇區是屬於哪個分區的,以及哪個分區是可以啟動的。在磁盤上創建分區時,你必須在MBR和GPT之間做出選擇。目前有且只有這兩種分區形式。
MBR的局限性
MBR的意思是“主引導記錄”,最早在1983年在IBM PC DOS 2.0中提出。之所以叫“主引導記錄”,是因為它是存在於驅動器開始部分的一個特殊的啟動扇區。這個扇區包含了驅動器的分區信息(64個字節,大小固定,一個分區用16個字節記錄)和已安裝的操作系統的啟動加載器(446字節)和2個字節的結束標志,所以這個扇區的大小是512個字節。。所謂啟動加載器,是一小段代碼,用於加載驅動器上其他分區上更大的加載器。如果你安裝了Windows,Windows啟動加載器的初始信息就放在這個區域里——如果MBR的信息被覆蓋導致Windows不能啟動,你就需要使用Windows的MBR修復功能來使其恢復正常。如果你安裝了Linux,則位於MBR里的通常會是GRUB加載器。MBR支持最大2TB磁盤,它無法處理大於2TB容量的磁盤。MBR還只支持最多4個主分區——如果你想要更多分區,你需要創建所謂“擴展分區”,並在其中創建邏輯分區。MBR已經成為磁盤分區和啟動的工業標准。
GPT的優勢
GPT意為GUID分區表。(GUID意為全局唯一標識符)。這是一個正逐漸取代MBR的新標准。它和UEFI相輔相成——UEFI用於取代老舊的BIOS,而GPT則取代老舊的MBR。之所以叫作“GUID分區表”,是因為你的驅動器上的每個分區都有一個全局唯一的標識符(globally unique identifier,GUID)——這是一個隨機生成的字符串,可以保證為地球上的每一個GPT分區都分配完全唯一的標識符。這個標准沒有MBR的那些限制。磁盤驅動器容量可以大得多,大到操作系統和文件系統都沒法支持。它同時還支持幾乎無限個分區數量,限制只在於操作系統——Windows支持最多128個GPT分區,GPT硬盤上沒有主分區、擴展分區的概念,所有的分區都是叫分區。在MBR磁盤上,分區和啟動信息是保存在一起的。如果這部分數據被覆蓋或破壞,事情就麻煩了。相對的,GPT在整個磁盤上保存多個這部分信息的副本,因此它更為健壯,並可以恢復被破壞的這部分信息。GPT還為這些信息保存了循環冗余校驗碼(CRC)以保證其完整和正確——如果數據被破壞,GPT會發覺這些破壞,並從磁盤上的其他地方進行恢復。而MBR則對這些問題無能為力——只有在問題出現后,你才會發現計算機無法啟動,或者磁盤分區都不翼而飛了。
GPT的兼容性 可以看到,在GTP磁盤的第一個數據塊中同樣有一個與MBR(主引導記錄)類似的標記,叫做PMBR(保護下MBR)。PMBR的作用是,當使用不支持GPT的分區工具時,整個硬盤將顯示為一個受保護的分區,以防止分區表及硬盤數據遭到破壞。UEFI並不從PMBR中獲取GPT磁盤的分區信息,它有自己的分區表,即GPT分區表。
主分區、擴展分區和邏輯分區
這幾個名詞是在MBR中才有的,因為GPT支持無限多個主分區。倘若你使用的是MBR的分區形式,那么你將最少擁有一個、最多只能有四個主分區;如果你想要有更多的分區,那么你將要建立擴展分區,然后在擴展分區里面在新建多個邏輯分區。且主分區+擴展分區的數量不超過四個;擴展分區可以沒有,最多只能有一個;邏輯分區可以沒有,也可以有多個。擴展分區不能包圍在主分區之間。
激活的主分區是硬盤的啟動分區,他是獨立的,也是硬盤的第一個分區,正常分的話就是C驅。 分出主分區后,其余的部分可以分成擴展分區,一般是剩下的部分全部分成擴展分區,也可以不全分,那剩下的部分就浪費了。但擴展是不能直接用的,他是以邏輯分區的方式來使用的,所以說擴展分區可分成若干個邏輯分區。他們的關系是包含的關系,所有的邏輯分區都是擴展分區的一部分。 在linux中相當於hda分區。
硬盤的容量=主分區的容量+擴展分區的容量
擴展分區的容量=各個邏輯分區的容量之和
-
在MBR分區表中最多4個主分區或者3個主分區+1個擴展分區,也就是說擴展分區只能有一個,然后可以再細分為多個邏輯分區。
-
在Linux系統中,硬盤分區命名為 sda1~sda4 或者 hda1~hda4(sd表示SCSI硬盤,hd表示IDE硬盤,其中a表示硬盤編號,如果有多塊硬盤,那就是b、c、d;1代表第一塊分區,2代表第二塊分區,以此類推)。在MBR硬盤中,分區號1-4是主分區(或者擴展分區),邏輯分區號只能從5開始
如圖,磁盤1中F、G、H盤是主分區,I+K+J是擴展分區,I、K、J 是邏輯分區 。
在windows中,默認只有你建立了3個主分區后,才會建立擴展分區。如果我們想直接建立擴展分區的話,可以使用命令
掛接卷
在windows中,雖然GPT分區可以建立高達128個主分區,但是驅動器號只有26個(A-Z)。如果驅動器號滿了該怎么辦?我們可以使用掛接卷,將新的分區掛載在現有的文件夾下,通過訪問該文件夾即可訪問新分區。這和Linux中的掛載類似。掛接卷只需要在分區初始化的時候選擇即可。
Legacy、UEFI引導和GRUB引導
Legacy 和 UEFI 均是windows的引導方式。Legacy是老式的Legacy BIOS引導,引導文件為 winload.exe,通常是和MBR分區形式結合使用。也就是 MBR分區形式+Legacy引導。
而UEFI是windows新式的引導方式,引導文件為 winload.efi,通常是和GPT分區形式結合使用,也就是 GPT分區形式+UEFI引導。
由此可見,UEFI在開機方面相比BIOS少了自檢這一步,它把硬件信息存在了硬盤里,直接讀取,因此它的啟動速度更快;UEFI是BIOS的一種升級替代方案,UEFI之所以比Legacy BIOS強大,是因為UEFI本身已經相當於一個微型操作系統,其帶來的便利之處在於:UEFI已具備文件系統的支持,它能夠直接讀取FAT分區中的文件;
如果電腦是在UEFI模式下安裝的系統只能選擇UEFI模式引導,要是在Legacy模式下安裝的系統就要在Legacy模式下進系統。
GRUB(GRand Unified Bootloader)是一個來自GNU項目的多操作系統啟動程序。GRUB是多啟動規范的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啟動參數。Linux、BSD或其他的類unix基本都是用GRUB引導系統。目前,GRUB分為GRUB Legacy和GRUB 2。
文件系統(FAT16、32、NTFS和EXT2、3、4、Xfs、Tmpfs)
文件系統是操作系統用於明確磁盤或分區上的文件的方法和數據結構;即在磁盤上組織文件的方法。一塊分區必須要有文件系統才可以使用。
舉個通俗的比喻,一塊硬盤就像一個塊空地,文件就像不同的材料,我們首先得在空地上建起倉庫(分區),並且指定好(格式化)倉庫對材料的管理規范(文件系統),這樣才能將材料運進倉庫保管。
文件系統是對應硬盤的分區的,而不是整個硬盤,不管是硬盤只有一個分區,還是幾個分區,不同的分區可以有着不同的文件系統!
Windows中的文件系統
在windows下,主要有FAT16 、FAT32 、NTFS文件系統。
各個文件系統的區別如下:
NTFS文件格式 | FAT32文件格式 | FAT16文件格式 |
---|---|---|
支持單個分區最大2TB | 支持單個分區最大128GB | 支持單個分區最大2GB |
支持單個文件最大2TB | 支持單個最大文件4GB | 支持單個最大文件2GB |
支持磁盤配額 | 不支持磁盤配額 | 不支持磁盤配額 |
支持文件壓縮(系統 ) | 不支持文件壓縮(系統) | 不支持文件壓縮(系統 ) |
支持EFS文件加密系統 | 不支持EFS | 不支持EFS |
產生的磁盤碎片較少 | 產生的磁盤碎片適中 | 產生的磁盤碎片較多 |
適合於大磁盤分區 | 適合於中小磁盤分區 | 適合於小與2G的磁盤分區 |
支持WindowsNT | 支持9x,不支持NT4.0 | 不支持Win2000,支持NT,9x |
NTFS相比FAT32與FAT16優點:
- 最大優點在於文件加密;
- 另外一個優點就是能夠很好的支持大硬盤,且硬盤分配單元非常小,從而減少了磁盤碎片的產生。NTFS更適合現今硬件配置(大硬盤)和操作系統(windows10)
- NTFS文件系統相比FAT32具有更好的安全性,表現在對不同用戶對不同文件/文件夾設置的訪問權限上
- 而且CIH病毒在NTFS文件系統下是沒有辦法傳播的!
FAT32文件系統轉換為NTFS文件系統
如果轉化的分區是系統分區或虛擬內存使用的磁盤分區,需要重啟才能轉化。
轉換命令:convert e:/fs:ntfs 按回車鍵,會叫你輸入當前的卷標,也就是盤符的名字,我的E盤卷標是: 新加卷 。回車,完成轉換。 這種方法轉換 FAT32 分區上的數據不丟失,該命令不能從 NTFS 轉化為 FAT32,除非把數據拷貝到其他分區,重新格式化該分區為 FAT32。
比如我現在的E盤是FAT32的文件系統,我現在需要把它轉換為 NTFS的文件系統,我的E盤上還有數據,轉換后E盤上的數據依舊還在
Linux中的文件系統
在Linux下,主要有EXT2、3、4和swap、Tmpfs文件系統,稱為擴展文件系統。
Linux ext2/ext3文件系統使用索引節點來記錄文件信息,作用像windows的文件分配表。索引節點是一個結構,它包含了一個文件的長度、創建及修改時間、權限、所屬關系、磁盤中的位置等信息。一個文件系統維護了一個索引節點的數組,每個文件或目錄都與索引節點數組中的唯一一個元素對應。系統給每個索引節點分配了一個號碼,也就是該節點在數組中的索引號,稱為索引節點號。 linux文件系統將文件索引節點號和文件名同時保存在目錄中。所以,目錄只是將文件的名稱和它的索引節點號結合在一起的一張表,目錄中每一對文件名稱和索引節點號稱為一個連接。 對於一個文件來說有唯一的索引節點號與之對應,對於一個索引節點號,卻可以有多個文件名與之對應。因此,在磁盤上的同一個文件可以通過不同的路徑去訪問它。Linux之前缺省情況下使用的文件系統為Ext2,ext2文件系統的確高效穩定。但是,隨着Linux系統在關鍵業務中的應用,Linux文件系統的弱點也漸漸顯露出來了:其中系統缺省使用的ext2文件系統是非日志文件系統。這在關鍵行業的應用是一個致命的弱點。
於是EXT3文件系統應運而生,Ext3文件系統是直接從Ext2文件系統發展而來,目前ext3文件系統已經非常穩定可靠。它完全兼容ext2文件系統。用戶可以平滑地過渡到一個日志功能健全的文件系統中來。這實際上了也是ext3日志文件系統初始設計的初衷。
Ext3日志文件系統的特點 1、高可用性 系統使用了ext3文件系統后,即使在非正常關機后,系統也不需要檢查文件系統。宕機發生后,恢復ext3文件系統的時間只要數十秒鍾。 2、數據的完整性: ext3文件系統能夠極大地提高文件系統的完整性,避免了意外宕機對文件系統的破壞。在保證數據完整性方面,ext3文件系統有2種模式可供選擇。其中之一就是“同時保持文件系統及數據的一致性”模式。采用這種方式,你永遠不再會看到由於非正常關機而存儲在磁盤上的垃圾文件。 3、文件系統的速度: 盡管使用ext3文件系統時,有時在存儲數據時可能要多次寫數據,但是,從總體上看來,ext3比ext2的性能還要好一些。這是因為ext3的日志功能對磁盤的驅動器讀寫頭進行了優化。所以,文件系統的讀寫性能較之Ext2文件系統並來說,性能並沒有降低。 4、數據轉換 由ext2文件系統轉換成ext3文件系統非常容易,只要簡單地鍵入兩條命令即可完成整個轉換過程,用戶不用花時間備份、恢復、格式化分區等。用一個ext3文件系統提供的小工具tune2fs,它可以將ext2文件系統輕松轉換為ext3日志文件系統。另外,ext3文件系統可以不經任何更改,而直接加載成為ext2文件系統。 5、多種日志模式 Ext3有多種日志模式,一種工作模式是對所有的文件數據及metadata(定義文件系統中數據的數據,即數據的數據)進行日志記錄(data=journal模式);另一種工作模式則是只對metadata記錄日志,而不對數據進行日志記錄,也即所謂data=ordered或者data=writeback模式。系統管理人員可以根據系統的實際工作要求,在系統的工作速度與文件數據的一致性之間作出選擇。
EXT4文件系統:Linux kernel 自 2.6.28 開始正式支持新的文件系統 Ext4。 Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的數據結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日志功能而已。Ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能:
1. 與 Ext3 兼容。 執行若干條命令,就能從 Ext3 在線遷移到 Ext4,而無須重新格式化磁盤或重新安裝系統。原有 Ext3 數據結構照樣保留,Ext4 作用於新數據,當然,整個文件系統因此也就獲得了 Ext4 所支持的更大容量。 2. 更大的文件系統和更大的文件。 較之 Ext3 目前所支持的最大 16TB 文件系統和最大 2TB 文件,Ext4 分別支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系統,以及 16TB 的文件。 3. 無限數量的子目錄。 Ext3 目前只支持 32,000 個子目錄,而 Ext4 支持無限數量的子目錄。 4. Extents。 Ext3 采用間接塊映射,當操作大文件時,效率極其低下。比如一個 100MB 大小的文件,在 Ext3 中要建立 25,600 個數據塊(每個數據塊大小為 4KB)的映射表。而 Ext4 引入了現代文件系統中流行的 extents 概念,每個 extent 為一組連續的數據塊,上述文件則表示為“該文件數據保存在接下來的 25,600 個數據塊中”,提高了不少效率。 5. 多塊分配。 當寫入數據到 Ext3 文件系統中時,Ext3 的數據塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 文件就要調用 25,600 次數據塊分配器,而 Ext4 的多塊分配器“multiblock allocator”(mballoc) 支持一次調用分配多個數據塊。 6. 延遲分配。 Ext3 的數據塊分配策略是盡快分配,而 Ext4 和其它現代文件操作系統的策略是盡可能地延遲分配,直到文件在 cache 中寫完才開始分配數據塊並寫入磁盤,這樣就能優化整個文件的數據塊分配,與前兩種特性搭配起來可以顯著提升性能。 7. 快速 fsck。 以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 Ext4 給每個組的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系統就可以跳過它們而只去檢查那些在用的 inode 了。 8. 日志校驗。 日志是最常用的部分,也極易導致磁盤硬件故障,而從損壞的日志中恢復數據會導致更多的數據損壞。Ext4 的日志校驗功能可以很方便地判斷日志數據是否損壞,而且它將 Ext3 的兩階段日志機制合並成一個階段,在增加安全性的同時提高了性能。 9. “無日志”(No Journaling)模式。 日志總歸有一些開銷,Ext4 允許關閉日志,以便某些有特殊需求的用戶可以借此提升性能。 10. 在線碎片整理。 盡管延遲分配、多塊分配和 extents 能有效減少文件系統碎片,但碎片還是不可避免會產生。Ext4 支持在線碎片整理,並將提供 e4defrag 工具進行個別文件或整個文件系統的碎片整理。 11. inode 相關特性。 Ext4 支持更大的 inode,較之 Ext3 默認的 inode 大小 128 字節,Ext4 為了在 inode 中容納更多的擴展屬性(如納秒時間戳或 inode 版本),默認 inode 大小為 256 字節。Ext4 還支持快速擴展屬性(fast extended attributes)和 inode 保留(inodes reservation)。 12. 持久預分配(Persistent preallocation)。 P2P 軟件為了保證下載文件有足夠的空間存放,常常會預先創建一個與所下載文件大小相同的空文件,以免未來的數小時或數天之內磁盤空間不足導致下載失敗。 Ext4 在文件系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟件自己實現更有效率。 13. 默認啟用 barrier。 磁盤上配有內部緩存,以便重新調整批量數據的寫操作順序,優化寫入性能,因此文件系統必須在日志數據寫入磁盤之后才能寫 commit 記錄,若 commit 記錄寫入在先,而日志有可能損壞,那么就會影響數據完整性。Ext4 默認啟用 barrier,只有當 barrier 之前的數據全部寫入磁盤,才能寫 barrier 之后的數據。(可通過 "mount -o barrier=0" 命令禁用該特性。)
xfs文件系統是擴展文件系統的一個擴展,它是SGI公司設計的。xfs被稱為業界最先進的、最具可升級性的文件系統技術。Xfs就是用為大容量大空間而設計的,在數據量特別大的情況下,建議用Xfs文件系統。但是,在文件比較多,目錄比較多的環境下,其實Xfs的性能還不如ext4文件系統。 xfs是一個64位文件系統,最大支持8EB減1字節的單個文件系統,實際部署時取決於宿主操作系統的最大塊限制。對於一個32位Linux系統,文件和文件系統的大小會被限制在16TB。
swap分區:Linux內核為了提高讀寫效率與速度,會將文件在內存中進行緩存,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束后,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程序頻繁讀寫文件后,你會發現可用物理內存變少。當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap分區空間中,等到那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。
tmpfs文件系統是Linux/Unix系統上的一種基於內存的虛擬文件系統。tmpfs可以使用您的內存或swap分區來存儲文件(即它的存儲空間在virtual memory 中, VM由real memory和swap組成),所以 tmpfs的大小等於real memory+swap的大小。由此可見,tmpfs主要存儲暫存的文件。它有如下2個優勢 : 1. 動態文件系統的大小。2. tmpfs 使用VM建的文件系統,速度當然快。3.重啟后數據丟失。
當刪除tmpfs中的文件時,tmpfs會動態減少文件系統並釋放VM資源,LINUX中可以把一些程序的臨時文件放置在tmpfs中,利用tmpfs比硬盤速度快的特點提升系統性能。實際應用中,為應用的特定需求設定此文件系統,可以提升應用讀寫性能,如將squid 緩存目錄放在/tmp, php session 文件放在/tmp, socket文件放在/tmp, 或者使用/tmp作為其它應用的緩存設備。
devtmpfs文件系統 的作用是在 Linux 核心啟動早期建立一個初步的 /dev,令一般啟動程序不用等待 udev,縮短 GNU/Linux 的開機時間。
inode block superblock
操作系統的文件數據除了文件實際內容外,還有非常多的屬性,如文件權限(rwx)與文件屬性(所有者、群組、時間參數等)。 文件系統通常將這兩部分數據存放在不同的塊。權限屬性放到 inode 中,實際數據放到 data block 中。還有一個超級塊(super block)會記錄文件系統的整體信息,包括 inode 與block 的數量、使用量等。 inode:記錄文件屬性,一個文件占用一個inode,同時記錄此文件的數據所在的block號碼,硬鏈接的inode相等,軟鏈接的不相等; block:實際記錄文件的內容,若文件太大時會占用多個 block ; super block:記錄文件系統的整體信息,包括inode/block 的總量、使用量、剩余量,以及文件系統的格式與相關信息等。 每個inode與block都有編號,而每個文件系統都會占用一個inode,inode中有文件數據放置的block號碼。我們可以找到文件的inode,然后找出文件所放置數據的block號碼,之后讀出數據。這種數據訪問方式成為索引式文件系統。這種文件系統一般不太需要經常進行磁盤碎片整理。 而 U 盤等為FAT文件格式,每個block號碼都記錄在前一個block號碼中,因此數據的讀取性能較差,用久了得進行碎片整理。
linux的Ext2文件系統一開始就將 inode 與block規划好了,除非重新格式化(或者利用resize2fs等命令更改文件系統大小),否則 inode 與block 固定后就不再變動。 如果文件系統太大,將所有的inode 與 block 放在一起很難管理,因此Ext2文件系統在格式化的時候基本上是區分為多個塊組(block group),每個塊組都有獨立的inode/block/super block系統。 data block (數據塊) Ext2 文件系統支持的block 有 1K,2K,4K三種。在格式化時 block已經固定,且每個block都有編號。但要注意,由於block大小不同,會導致該文件系統能夠支持的最大磁盤容量與最大單一文件容量並不相同。使用的block太小,則一個文件要用多兩個block,inode 記錄也會增加,降低讀寫性能。 若block太大,文件小的時候則會使剩余空間不能用了,會浪費資源。
Superblock (超級塊) 這里面記錄文件系統的整體情況。比如文件系統的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤(fsck)的時間等。還有一個validbit數值,若此文件系統已經被掛載,validbit的值為 0 ,若未被掛載,則validbit值為 1 。