鳥哥的linux私房菜讀書筆記8

第八章:linux磁盤與文件系統管理

磁盤的物理組成:圓形的盤片,主要記錄數據的部分;機械手臂與機械手臂上面的磁頭,可讀寫盤片上的數據;主軸馬達,可以轉動盤片,讓機械手臂的磁頭在盤片上面讀寫數據;扇區爲最小的物理存儲單位,每個扇區爲512字節;將扇區組成一個圓,那就是柱面,柱面是分區的最小單位;第一扇區非常重要,裏面有硬盤主引導記錄及分區表,其中主引導記錄MBR佔有446字節,分區表佔有64字節;/dev/sd[a-p][1-25]爲SCSI,SATA,USB,Flash等接口的磁盤文件名;/dev/hd[a-d][1-63]爲IDE接口的磁盤文件名;

磁盤分區就是指定分區的起始與結束柱面就可以。分區表裏僅有64字節,最多隻能記錄四條分區的紀錄,這四條記錄我們稱爲主分區或擴展分區,其中擴展分區還可以再分出邏輯分區,而能被格式化的僅有主要分區與邏輯分區;

分區的定義:主分區與擴展分區最多可以有四個(硬盤的限制);擴展分區最多只能有一個,操作系統的限制;邏輯分區是由擴展分區持續分出來的分區;能夠被格式化後作爲數據訪問的分區爲主要分區與邏輯分區,擴展分區無法格式化;邏輯分區的數量依操作系統而不同,在linux系統中,IDE硬盤最多有59個邏輯分區,SATA硬盤則有11個邏輯分區;

文件系統是操作系統用於明確存儲設備或分區上的文件的方法和數據結構,即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件機構稱爲文件管理系統,簡稱文件系統。

磁盤分區完畢後還需要進行格式化,之後操作系統才能使用這個分區,因爲每種操作系統所設置的文件屬性/權限並不相同,爲了存放這些文件所需的數據,因此就需要將分區進行格式化,已成爲操作系統能夠利用的文件系統格式;每種操作系統能使用的文件系統並不相同。linux默認的文件系統是Ext2,windows的文件系統爲早期的FAT和之後的NTFS文件系統。默認情況下windows是不會認識Ext2的;以前一個分區就只能是一種文件系統,但是現在可以將多個分區合成一個文件系統,通常我們稱呼一個可被掛載的數據爲一個文件系統而不是一個分區。文件數據除了文件實際內容外,還含有其他屬性,例如linux中的文件權限與文件屬性。文件系統通常會將這兩部分的數據分別存放在不同的塊中。權限與屬性放置在inode中,至於實際數據則放置在data block塊中。另外還有一個超級塊superblock會記錄整個文件系統的整體信息,包含inode與block的總量、使用量、剩餘量等;這三個數據的意義簡潔說明如下:

superblock:記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩餘量,以及文件系統的格式與相關信息等;

inode:記錄文件的屬性,一個文件佔用一個inode,同時記錄此文件的數據所在的block號碼;

block:實際記錄文件的內容,若文件太大時,會佔用多個block。

每個inode和block都有編號,通過inode去讀取文件的數據。這種數據訪問方法稱爲索引式文件系統。FAT是通過鏈表的形式去存儲數據,會產生大量碎片,是的文件讀取性能變差;Ext2是索引式文件系統,不太需要進行碎片整理,但是時間長了也有可能產生文件數據過於離散的問題;

ext2文件系統在格式化時基本上是區分爲多個塊組的,每個塊組都有獨立的inode/block/superblock系統。在整體規劃中,文件系統最前面還有一個啓動扇區,這個啓動扇區可以安裝引導裝載程序,這樣就可以將不同的引導裝載程序安裝到個別的文件系統最前端而不用覆蓋整塊硬盤的唯一的MBR,也能製作出多重引導的環境。

ext2系統的block的限制:文件系統所支持的block大小有1kb、2kb、4kb三種而已;某些應用程序採用舊的限制,不支持2GB以上的文件;原則上,block的大小與數量在格式化完就不能再改變了,除非重新格式化;每個block內最多隻能夠放置一個文件的數據;呈上,如果文件大於block的大小,則一個文件會佔用多個block數量;承上,若文件小於block,則該block的剩餘空間就不能夠再被使用了,如果文件都比較小會產生大量空間浪費;如果文件都比較大,block設的比較小,inode就會記錄更多的block號碼,會導致文件系統不良的讀寫性能;所以在格式化之前,要預先想好預計使用的情況,再進行格式化;

inodetable記錄的文件數據至少有:文件的訪問模式;文件的所有者和組;文件的大小;文件創建或狀態改變的時間;最近一次的讀取時間;最近修改的時間;定義文件特性的標誌;該文件真正內容的指向;

除此之外,inode還有以下特點:每個inode大小均固定在128字節;每個文件都會僅佔用一個inode而已;承上,因此文件系統能夠創建的文件數量與ionde的數量有關;系統讀取文件時需要先找到inode,並分析inode所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取block的內容;

inode記錄block的區域定義爲12個直接、一個間接、一個雙間接、一個三間接記錄區;所以一個block的大小爲1k的話,最大可以支持16GB的單一文件;

superblock是記錄整個文件系統相關信息的地方,沒有superblock就沒有整個文件系統,它記錄的信息主要有:block與inode的總量;未使用與已使用的inode/block數量;block與inode的大小(block爲1K,2K,3K,inode爲128個字節);文件系統的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤的時間等系統的相關信息;一個validbit的數值,若此文件系統已被掛載,則validbit爲0,若未被掛載爲1;

在linux系統中,每個文件(不管是一般的文件還是目錄文件)都會有一個inode,且可依據文件的內容大小來分配多個block來給文件使用;

目錄:在ext2中,新建一個目錄,ext2會分配一個inode與至少一個block給該目錄。其中,inode記錄該目錄的相關權限與屬性,並可記錄分配到的那塊block號碼;而block記錄在這個目錄下的文件名與該文件名佔用的inode號碼數據。

查看root目錄內的文件所佔用的inode號碼可以用ls –i來處理;

文件:在ext2中,新建一個文件,ext2會分配一個inode與相對於該文件大小的block數量給該文件;

目錄樹的讀取:inode本身並不記錄文件名,文件名的紀錄是在目錄的block當中。因爲文件名是記錄在目錄的block中,所以讀取該文件時,必經過目錄的inode與block,然後才能找到那個待讀取文件的inode,最終纔會讀到正確的文件的block內的數據;

目錄樹是從根目錄開始讀起,因此係統通過掛載的信息可以找到掛載點的inode號碼,此時就能夠得到根目錄的inode內容,並依據該inode讀取根目錄的block內的文件名數據,在一層一層往下讀正確的文件名;

新建一個文件或目錄時,就需要blockbitmap與inodebitmap,此時文件系統的行爲是:先確定用戶對該與添加文件的目錄是否有w和x的權限,若有的話才能添加;根據inodebitmap找到沒有使用的inode號碼,並將新文件的權限/屬性寫入;根據blockbitmap找到沒有使用的block號碼,並將實際的數據寫入block中,且更新inode的block指向數據;將剛纔寫入的inode與block數據同步更新inodebitmap與blockbitmap,並更新superblock的內容;

日誌文件系統:預備,當系統寫入一個文件時,會先在日誌記錄塊中記錄某個文件準備要寫入的信息;實際寫入,開始寫入文件的權限與數據,開始更新metadata的數據;結束,完成數據與metadata的更新後,在日誌記錄塊當中完成該文件的紀錄;

在內存中編輯一個比較大的文件,需要頻繁的寫入磁盤,降低效率;linux通過異步處理來解決:當內存中加載一個文件時,如果該文件沒有改動,則在內存段的文件數據會被設置爲clean。但如果內存中文件數據被更改過,此時該內存中的數據會被設置爲dirty。此時的所有操作都在內存中,並沒有寫入磁盤,系統會不定期將內存中設置爲dirty的數據寫回到磁盤,以保持磁盤與內存數據的一致性;

系統會將常用的文件數據放置在主存儲器的緩衝區,以加速文件系統的讀寫;承上,新詞linux的物理內存最後都會被用光,這是正常的情況,可加速系統性能;可以手動使用sync來強迫內存中設置爲dirty的文件回寫到磁盤中;若正常關機,系統會自動調用sync來將內存的數據回寫入磁盤內;但若不正常關機,由於數據尚未回寫到磁盤內,因此重新啓動後可能會花很多時間再進行磁盤檢驗,甚至可能導致文件系統的損壞;

掛載點一定是目錄,該目錄爲進入該文件系統的入口;

除了ext2和加入日止功能的ext3,linux支持其他一些文件系統,linux系統通過一個虛擬文件系統VFS的內核功能去讀取文件系統。

磁盤與目錄的容量命令:

df列出文件系統的整體磁盤使用量;-a列出所有的文件系統,包括系統特有的/proc等文件系統;-k以kb的容量顯示各文件系統;-m以mb的容量顯示各文件系統;-h以人們較易閱讀的GB、MB、KB等格式自行顯示;-H以M=1000K替代M=1024的進位方式;-T連同該分區的文件系統名稱列出;-i不用硬盤容量,而以inode的數量來顯示;

du評估文件系統的磁盤使用量,常用於評估目錄所佔容量;-a列出所有的文件與目錄容量,因爲默認僅統計目錄下面的文件量而已;-h以人們較易讀的容量格式顯示;-s列出總量而已,而不列出每個個別的目錄佔用容量;-S不包括子目錄下的總計,與-s有點區別;-k以KB列出容量顯示;-m以MB列出容量顯示;

連接文件ln分兩種,一種是類似windows的快捷方式功能的文件,可以讓你快速連接到目標文件或目錄;另一種則是通過文件系統的inode連接來產生新文件名,而不是產生新文件,這種稱爲硬鏈接;

hardlink硬連接:每個文件都會有一個inode,文件內容由inode的記錄來指向;想要讀取該文件,必須經過目錄記錄的文件名來指向正確的inode號碼才能讀取;文件名只與目錄有關,但文件內容則與inode有關。當多個文件名指向同一個inode號碼時,就是硬連接;硬連接只是在某個目錄下新建了一個文件名連接到某個inode號碼的關聯記錄而已;如果將任何一個文件名刪除,其實inode與block都還是存在的。此時可以通過另一個文件名來讀取到正確的文件數據;使用硬連接設置連接文件時,磁盤空間與inode的數目都不會改變,只是在某個目錄下的block多寫入一個關聯數據而已;硬連接有限制:不能跨文件系統;不能連接到目錄;

symbolic link符號連接,也就是快捷方式:就是創建一個獨立的文件,而這個文件會讓數據的讀取指向它連接的那個文件的文件名;兩個文件會指向兩個不同的inode號碼,當然就是兩個獨立的文件;鏈接文件的重要內容就是它會寫上目標文件的文件名;

看起來似乎硬連接比較可靠,但是硬連接沒法連接目錄,所以在用途上比較受限;軟連接如果目標文件刪除就無法讀取;

ln [-sf] 源文件 目標文件;參數:如果不加任何參數就進行連接,那就是硬連接,加上s就是軟連接;-f如果目標文件存在時,就主動將目標文件直接刪除後在創建。

新增一塊硬盤時需要做的是:對硬盤進行分區,以新建可用的分區;對該分區進行格式化,以創建系統可用的文件系統;若想要仔細一點,則可對剛纔新建好的系統進行檢驗;在linux系統上,需要創建掛載點(也即是目錄),並將它掛載上來;

磁盤分區命令fdisk;只有root才能執行;退出時不按w就不會保存,按q退出;

1-4號尚有剩餘,且系統未有擴展分區;此時會出現讓你挑選primary/extended的選項,讓你指定1~4的號碼;

1-4尚有剩餘,且系統有擴展分區;此時會出現讓你挑選primary/logical的選項,若懸p還需制定1~4的號碼;若選l則不需設置號碼,系統自動設定;

1-4沒有剩餘,且系統有擴展分區;不會選分區類型,直接進入logical的分區形式;

fdisk無法處理大於2TB的磁盤分區;

掛載的意義是掛載點是目錄,而這個目錄是進入磁盤分區的入口就是了;掛載前需要明確:單一文件系統不應該被重複掛載在不同的掛載點;單一目錄不應該重複掛載多個文件系統;作爲掛載點的目錄理論上應該都是空目錄纔是。

如果你要用來掛載的目錄裏面並不是空的,那麼掛載了文件系統之後,原目錄下的東西就會暫時消失;等到新分區被卸載之後,原來的文件都會顯示出來;

系統掛載的一些限制:根目錄是必須掛載的,而且一定要先於其他mount point被掛載進來;其他掛載點必須爲以新建的目錄,可任意指定,但一定要遵守必須的系統目錄架構原則;所有掛載點在同一時間內,只能掛載一次;所有分區在同一時間之內,只能掛載一次;如若進行卸載,你必須先將工作目錄一到掛載點之外;

安裝時一定需要的兩個分區:一個是根目錄;另外一個就是swap(內存交換空間);swap的功能就是在應付物理內存不足的情況下所造成的內存擴展記錄的功能;

swap在被構建時是有限制的:在內核2.4.10版本以後,單一swap已經沒有2GB的限制了;但是,最多還是僅能創建32個swap;而且,由於目前x86-64最大內存尋址64GB,因此,swap總量最大也是僅能達到64GB就是了;

重點回顧:

基本上linux最重要的文件系統爲ext2,該文件系統內的信息主要有:superblock,記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩餘量,以及文件系統的格式與相關信息;inode,記錄文件的屬性,一個文件佔用一個inode,同時記錄此文件的數據所在的block號碼;block,世紀記錄文件的內容,若文件太大時,會佔用多個block;

ext2文件系統的數據訪問爲索引式文件系統;

需要碎片整理的原因是文件寫入block太過於鬆散,此時文件讀取的性能將會變得很差所致。這個時候可以通過碎片整理將同一個文件所屬的block彙集在一起;

ext2文件系統主要有bootsector,superblock,inodebitmap,blockbitmap,inodetable,datablock等六大部分;

datablock是用來放置文件內容數據的地方,在ext2文件系統中所支持的block大小有1KB,2KB,4KB三種而已;

inode記錄文件的屬性/權限等數據,每個inode大小均固定爲128字節;每個文件都會僅佔用一個inode而已;因此文件系統能夠新建的文件數量與inode的數量有關;

文件的block記錄文件的實際數據,目錄的block則記錄該目錄下面文件名與inode號碼的對照表;

日誌文件系統會多出一塊記錄區,隨時記載文件系統的主要活動,可加快系統恢復時間;

linux文件系統爲了增加性能,會讓主存儲器作爲大量的磁盤高速緩存。

實際連接只是多一個文件名對該inode號碼的連接而已;

符號鏈接就類似於windows的快捷方式功能;

磁盤的使用必須經過分區、格式化與掛載,分別慣用的命令fdisk、mkfs和mount;

開機自動掛載可參考/etc/fstab的設置,設置完畢後務必使用mount–a測試語法正確;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章