1. 程式人生 > >LINUX學習—磁碟及檔案系統管理

LINUX學習—磁碟及檔案系統管理

IO裝置,外部裝置,並不是計算機核心裝置
機械式硬碟:
U盤,光碟,軟盤,硬碟,磁帶機
如果不劃分分割槽,說明一個磁碟只能儲存一個檔案系統,劃分後,一個分割槽就是一個檔案系統,即邏輯邊界;
固態硬碟

磁頭懸浮在盤面上方,所以硬碟振盪很容易弄壞硬碟,

磁頭(head)數:每個碟片一般有上下兩面,分別對應1個磁頭,共2個磁頭,實現資料的儲存;
磁軌(track):當磁碟旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁碟表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁軌。從外邊緣的0開始編號,根據磁化方向來儲存資料0和1;
柱面(cylinder):不同碟片的相同編號的磁軌構成的圓柱面就被稱之為柱面,磁碟的柱面數與一個盤面上的磁軌數是相等的;
扇區(sector): 每個磁軌都分別切分成很多扇形區域,每個磁軌的扇區數量相同,每個扇區大小偉512位元組(扇區用於儲存扇區號、磁頭號、碟片號以及磁軌號,所以扇區不是所有都用來儲存資料,還有一部分位元組用來儲存其他描述形資料)
平均尋道時間(可以理解為轉速):它是瞭解硬碟效能至關重要的引數之一。它是指硬碟在接收到系統指令後,磁頭從移動到資料所在的磁軌所花費時間的平均值,它在一定程度上體現了硬碟讀取資料的能力,是影響硬碟內部資料傳輸率的重要引數,單位為毫秒(ms).外面柱面速度比內部的快(角速度一樣,在同樣時間劃過的距離更長,讀寫速率高),所以一般將一些頻繁訪問的內容放在靠近外部的柱面,如C盤;
硬碟的容量=柱面數x磁頭數x扇形區域x512(位元組數)
為什麼計算機要劃分分割槽:因為如果計算機不劃分分割槽,那整個磁碟只能儲存一個檔案系統,分割槽即是每個磁碟的邏輯邊界;

低階格式化:對磁碟進行劃分磁軌、扇區

硬碟邏輯機構及相關概念:
分割槽partition:建立獨立的檔案系統
MBR
Master Boot Record主引導記錄(512byte):位於磁碟最前邊的一段引導程式碼,它負責磁碟作業系統(DOS)對磁碟進行讀寫時分割槽合法性的判別、分割槽引導資訊的定位,它由磁碟作業系統(DOS)在對硬碟進行初始化時產生的。
由三個部分組成(共佔用512個位元組):
446bytes:BootLoader,載入程式(一段程式碼)
64bytes:
每16位元組標識一個分割槽,所以最多隻有四個主分割槽,為了使用更多分割槽,可以將一個分割槽設定為擴充套件分割槽,相當於一個指標,指向硬碟上更大的空間,以存放額外的分割槽資訊。(主+擴充套件<=4,擴充套件分割槽在一個系統上只能有一個)磁碟分割槽是按照柱面進行的。
2bytes:Magic number,標記MBR是否有效
硬碟邏輯結構及相關概念

作業系統的啟動:BIOS (Basic input output system,基本輸入輸出作業系統)自檢完成後,根據BIOS中設定的啟動次序,依次啟動裝置中的MBR,如果沒有,則查詢下一個,直到找到並啟動,如果有但已經損壞便不能查詢下一個,直接啟動失敗;MBR正常啟動後,先將BootLoader載入到記憶體中,此時BIOS退出,BootLoader程式首先讀取分割槽表,根據配置,載入對應分割槽上作業系統的核心。如果BootLoader和分割槽表但凡一個有問題,都無法正常啟動系統;BootLoader將核心讀進記憶體,記憶體讀入並解壓縮後Bootloader將控制權交給核心,核心開始啟動自身,根據檔案配置找到檔案系統在什麼地方,找到所需要執行的程式的位置,最終完成啟動作業系統。

檔案系統:其實是個軟體,儲存於磁碟上某個位置,並不在該分割槽上,但檔案系統中資料是在分割槽上,可將一個分割槽整體儲存空間劃分為兩部分,一部分為元資料儲存區,另外的資料儲存區(儲存單元)
磁碟塊:
目錄檔案:1.檔名和檔案型別都是在目錄中存放,而檔案的其他元資料資訊則是在Inode中存放;
2.檔案系統各分割槽之間物理視角上是並行的,邏輯視角上必須得有上下級關係,所有的檔案都必須直接或間接從根開始;
SWAP分割槽:
Swap分割槽在系統的實體記憶體不夠用的時候,把實體記憶體中的一部分空間釋放出來,以供當前執行的程式使用。那些被釋放的空間可能來自一些很長時間沒有操作的程式,這些被釋放的空間被臨時儲存到Swap分割槽中,等到那些程式要執行時,再從Swap分割槽中恢復儲存的資料到記憶體中。

頁框(PAGE FRAME):
記憶體管理的概念,CPU中添加了自動把虛擬記憶體(即邏輯地址)地址轉化為實體記憶體地址的電路,為了簡化這種電路,就把RAM劃分為長度為4KB或8KB的塊,這種塊就叫頁框。

超級塊(SUPER BLOCK)
描述整個分割槽的系統資訊,例如塊大小、檔案系統版本號,上次mount(掛載)的時間等等,超級塊在每個塊組的開頭都有一份拷貝。

塊組描述符表(GDT,GROUP DESCRIPTION TABLE)
由很多塊組描述符組成,整個分割槽分成多少個塊組就對應多少個塊組描述符;每個塊組描述符(Group Descriptor)儲存一個塊組的描述資訊,例如在這個塊組中從哪裡開始是INODE表,從哪裡開始是資料塊,空閒的INODE和資料塊還有多少個等等;和超級塊類似,塊組描述符表在每個塊組的開頭也都有一份拷貝,這些資訊是非常重要的,一旦超級塊意外損失會丟失整個分割槽的資料,一旦塊組描述符意外損壞就會丟失整個塊組的資料,因此它們都有多份拷貝。

塊點陣圖 (BLOCKBITMAP)
塊點陣圖就是用來描述整個塊組中哪些塊已用哪些空閒的,它本身佔一個塊,其中的每個bit代表塊組中的一個塊,這個bit為1表示該塊已用,這個bit為0表示該塊空閒可用;與此相聯絡的另一個問題是:在格式化一個分割槽時究竟劃出多少個塊組呢?主要的限制在於塊點陣圖本身必須只佔一個塊。

INODE點陣圖(INODEBITMAP)
和塊點陣圖類似,本身佔一個塊,其中每個bit表示一個inode是否空閒可用。

INODE表(INODETABLE)
一個檔案除了資料需要儲存之外,一些描述資訊也需要儲存,例如檔案型別(常規、目錄、符號連結等),許可權,檔案大小,建立/修改/訪問時間等,也就是ls -l命令看到的那些資訊,這些資訊存在inode中而不是資料塊中每個檔案都有一個inode,一個塊組中的所有inode組成了inode表;inode表佔多少塊在格式化時就要決定並寫入塊組描述符中;mke2fs格式化工具的預設策略是一個塊組有多少個8KB就分配多少個inode.

資料塊(DATABLOCK)
1.對於常規檔案,檔案的資料儲存在資料塊中
2.對於目錄,該目錄下的所有檔名和目錄名儲存在資料塊中,檔名儲存在她所在目錄的資料塊中
除檔名之外,ls -l命令看到的其它資訊都儲存在該檔案的inode中
目錄也是一種檔案,是一種特殊型別的檔案

對於符號連結,如果目標路徑名較短則直接儲存在inode中以便更快地查詢,如果目標路徑名較長則分配一個數據塊來儲存
裝置檔案、FIFO和socket等特殊檔案沒有資料塊,裝置檔案的主裝置號和次裝置號儲存在inode中

* 讀取、建立、刪除、複製、剪下過程*

讀取檔案
首先根是自引用的,也就是根的inode號是已知的,再根據INODE table 可以知道根的inode號對應的block號,然後通過block號找到對應的block,block中有個目錄項即Dentry,每個目錄項紀錄了根呷所有直接子目錄的inode與檔名的對應關係(也包括檔案型別等),例如var對應的inode號為2883585,etc對應的inode號為1507329等等,此時找到etc下對應的inode號,再通過查詢inode table 可以得知etc檔案對應的block,再通過block裡面的dentry可以得知http對應的inode,再查詢inode table可以查詢到http對應的block,再在block下查詢目錄項可以得知httpd.conf檔案對應的Inode號,再次查詢Inode Table可以找到對應的Block,於是資料就可以讀取了。

建立檔案
想要建立一個檔案,首先得先給這個檔案分配Inode和Block。首先掃描Inode Bitmap查詢空閒Inode,再去Inode Table中寫入想要建立檔案的元資料,例如許可權、屬主屬組、大小、時間戳、以及這個Inode對應所佔據的Block。然後再找到根的Inode,找到根對應的Block,裡面Dentry記錄了etc及其對應的Inode,再通過Inode Table找到etc檔案對應的Block,於是在Dentry裡面新增一條記錄,testfile.txt與其對應的Inode號,檔案型別等資訊。到此一個檔案便建立了。

刪除檔案
刪除檔案直接上級目錄(etc)裡面的那條Dentry記錄,Inode Bitmap裡面把檔案(fstab)原先對應的Inode號標記為未使用,Block Bitmap中把檔案(fstab)原先對應的Block標記為未使用。刪除檔案本身並沒有刪除檔案所對應的Block和Inode,也就是說Block上的資料並沒有被抹除,除非後面向其Block中覆蓋資料。

複製檔案
複製檔案本質就是新建一個檔案,並填充原始檔資料的過程,詳細可參考上面的建立和讀取檔案過程。

剪下檔案
在同一個分割槽下,剪下速度非常快,這是因為其本質也只是將Dentry記錄換一個目錄而已,所以根本就不涉及什麼耗時的操作。而跨分割槽剪下檔案的過程其實就是在另外一個分割槽上建立一個新檔案,並複製,複製完成之後再刪除原先分割槽上資料的一個過程

硬連結,符號連結(軟連線)
硬連結:
兩個路徑指向同一個inode, 這兩個路徑彼此間被稱為硬連結;硬連結檔案只有次數小於1時才會被刪除,否則只是刪除了連結中的一個路徑,而檔案並沒有刪除;
只能對檔案建立,不能應用與目錄;
不能跨檔案系統;
建立硬連結會增加檔案被硬連結的次數

軟連結:
一個路徑指向的inode,儲存的是另一個路徑(檔案大小是字元個數);
可應用與目錄;
可跨檔案系統;
不會增加被連結檔案的連結次數;

ln [-s -v] SRC DEST
-s或–symbolic:對原始檔建立符號連結,而非硬連結;
-v或–verbose:顯示指令執行過程;
不帶任何選項表示建立的為硬連結;

du:顯示目錄下每個檔案佔用磁碟的大小
-s:顯示目錄佔用磁碟大小
-h以人類可讀性單位顯示

df:顯示整個磁碟分割槽使用情況
-i或–inodes:顯示inode的資訊
-P或–portability:使用POSIX的輸出格式,即一行的內容放在同一行顯示,不換行;
-h或–human-readable以K,M,G為單位,提高資訊的可讀性。

mknod:建立塊或字元裝置

dd命令:用於複製檔案並對原檔案的內容進行轉換和格式化處理。
if=代表輸入檔案。如果不指定if,預設就會從stdin中讀取輸入。
of=代表輸出檔案。如果不指定of,預設就會將stdout作為預設輸出。
bs=1代表位元組為單位的塊大小
count=2代表被複制的塊數
備份MBR檔案 /dev/sda
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
恢復
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1