Linux 磁碟與檔案系統

2022-08-30 15:33:14 字數 4311 閱讀 5687

1.硬碟的基礎知識

1.1 分割槽的概念:

分割槽從實質上說就是對硬碟的一種格式化。當我們建立分割槽時,就已經設定好了硬碟的各項物理引數,指定了硬碟主引導記錄(即 masterbootrecord,一般簡稱為 mbr)和引導記錄備份的存放位置。而對於檔案系統以及其他作業系統管理硬碟所需要的資訊則是通過以後的高階格式化,即 format 命令來實現。面、磁軌和扇區硬碟分割槽後,將會被劃分為面(side)、磁軌(track)和扇區(sector)。需要注意的是,這些只是個虛擬的概念,並不是真正在硬碟上劃軌道。 

1.2 mbr簡介:

mbr(main boot record 主引記錄)位於整個硬碟的 0 磁軌 0 柱面 1 扇區。不過,在總共 512 位元組的主引導扇區中, mbr 只占用了其中的 446 個位元組,另外的 64 個位元組交給了dpt(disk partition table 硬碟分割槽表),最後兩個位元組「55, aa」是分割槽的結束標誌。這個整體構成了硬碟的主引導扇區。

1.3 分割槽的原理:

主引導記錄由三部分組成:一部分是 446byte 的作業系統引導**(mbr),還有一部分是 64byte 的主分割槽表(dpt)。主分割槽表最多記錄四個主分割槽的分割槽資訊.每個分割槽占用 16byte。分割槽就是修改分割槽表,它不影響硬碟上的儲存的資料。最後的 2 位元組是結束標誌。

擴充套件技術:需要將一塊硬碟分成更多的分割槽,超過 5 個以上的分割槽,可以將最多四個主分割槽中的乙個分割槽型別改為擴充套件分割槽,然後在擴充套件分割槽中再建邏輯分割槽。邏輯分割槽的分割槽資訊儲存在擴充套件分割槽之中,叫做擴充套件分割槽表。理論上邏輯分割槽沒有個數的限制。擴充套件分割槽不能被直接使用,必須將其劃分為若干個邏輯分割槽。邏輯分割槽的起始位置的資訊都寫在擴充套件分割槽表裡面。邏輯分割槽的分割槽編號從 5 開始,如: /dev/hda5 是第一塊硬碟的第乙個邏輯分割槽。

1.4 格式化原理:

分好區的硬碟分割槽上面什麼資料也沒有,作業系統也不能讀寫,為了讓作業系統能夠識別必須向分割槽中預寫入一定格式的資料。這個過程就稱之為格式化。在 linux 中稱為建立檔案系統。沒有分割槽的硬碟是不能格式化的,沒有格式化的分割槽是不能直接被使用的。所以分割槽和格式化往往都是同時進行的。

inode:記錄檔案的屬性,乙個檔案占用乙個 inode,同時記錄此檔案的資料所在的 block 號碼。

block:實際記錄檔案的內容,若檔案太大時,會占用多個 block。

注意:

1.inode 與 block 都有編號,而每個檔案都會占用乙個 inode ,inode 內則有檔案資料放置的block 號碼,如果能找到檔案的inode 就可以找到檔案。

2.在inode記錄乙個檔案需要128位元組大小的記憶體。

2.linux的ext2檔案系統(inode)

為什麼需要使用ext2檔案系統?

如果我的檔案系統高達數百 gb 時, 那麼將所有的 inode 與 block 通通放置在一起將是不理智的決定,因為 inode 與 block 的數量太龐大,不容易管理。因此 ext2 檔案系統在格式化的時候基本上是區分為多個區塊群組 (block group) 的,每個區塊群組都有獨立的 inode/block/superblock 系統。

在整體的划划當中,檔案系統前面有乙個啟動扇區(boot sector),這個啟動扇區可以安裝開機管理程式, 這是個非常重要的設計,因為如此一來我們就能夠將不同的開機管理程式安裝到個別的檔案系統最前端,而不用覆蓋整塊硬碟唯一的mbr, 這樣也能夠製作出多重引導的環境。至於每乙個區塊群組(block group)的六個主要內容說明如下:

data block:用來放置檔案內容資料地方,在 ext2 檔案系統中所支援的 block 大小有 1k, 2k 及 4k三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode的記錄。

inode table:主要記錄檔案的屬性以及該檔案實際資料放置的block號。

filesystem description (檔案系統描述說明)

block bitmap (區塊對照表):

inode bitmap (inode 對照表):

3.與目錄樹的關係

每乙個檔案(不管是一般檔案還是目錄檔案)都會占用乙個inode,目錄的內容記錄檔名,一般檔案記錄實際資料內容。目錄與檔案在檔案系統中如何記錄資料呢?

使用 ls -li 命令檢視檔案的inode 號碼

讀取 /etc/passed 檔案的流程: 

/ 的 inode 號碼:通過掛載點資訊找到根目錄 inode號碼(64),且 inode 具有的許可權讓我們可以讀取該block的內容(r與x);

/ 的 block 號碼:經過上述步驟取得 block 號碼,並找到該內容中 etc/ 目錄的 inode 號碼(6777281);

etc/ 的 inode 號碼:讀取 6777281 號 inode 得知具有 r 與 x 的許可權,因此可以讀取 etc/ 的 block 內容;

etc/ 的 block 號碼:經過上個步驟取得 block 號碼,並找到該內容有 passwd 檔案的 inode 號碼(7931015);

passwd 的 inode 號碼:讀取 7931015 號 inode 得知具有 r 的許可權,因此可以讀取 passed 的block 內容;

passwd 的 block 號碼: 最後將該 block 內容的資料讀出來。

4. ext2/ext3/ext4 檔案的訪問與日誌式檔案系統的功能

新建乙個檔案時,檔案系統的行為是:

inode table 與 data block 稱為資料存放區域,superblock、 block bitmap 與 inode bitmap 等區段就被稱為 metadata (中間資料) ,因為 superblock, inode bitmap 及 block bitmap 的資料是經常變動的,每次新增、移除、編輯時都可能會影響到這三個部分的資料,因此才被稱為中間資料。

資料的不一致 (inconsistent) 狀態

檔案在寫入檔案系統時,因為不知名原因導致系統中斷(例如突然的停電、 系統核心發生錯誤發生時),所以寫入的資料僅有 inode table 及 data block,最後乙個同步更新中間資料的步驟並沒有做完,此時就會發生 metadata 的內容與實際資料存放區產生不一致 (inconsistent) 的情況。 

在早期的 ext2 檔案系統中,如果發生這個問題, 那麼系統在重新啟動的時候,就會由 superblock 當中記錄的 valid bit (是否有掛載) 與 filesystem state (clean 與否) 等狀態來判斷是否強制進行資料一致性的檢查,檢查整個磁碟,耗時長,於是出現了日誌式檔案系統。

日誌式檔案系統 (journaling filesystem)

在filesystem 當中規劃出乙個區塊,該區塊專門在記錄寫入或修訂檔案時的步驟:

5. linux 檔案系統的運作

由於磁碟寫入的速度要比記憶體慢很多,在編輯儲存檔案時效率較低,為了解決這個問題linux使用非同步處理 (asynchronously) :當系統載入乙個檔案到記憶體後,如果該檔案沒有被動過,則在記憶體區段的檔案資料會被設定為乾淨 (clean)的。 但如果記憶體中的檔案資料被更改過了(例如你用 nano 去編輯過這個檔案),此時該記憶體中 的資料會被設定為臟的 (dirty)此時所有的動作都還在記憶體中執行,並沒有寫入到磁碟中! 系統會不定時的將記憶體中設定為『dirty』的資料寫回磁碟,以保持磁碟與記憶體資料的一致性。 也可以使用sync 指令來動寫入磁碟。

6. 掛載點的意義 (mount point)

每個 filesystem 都有獨立的 inode / block / superblock 等資訊,這個檔案系統要能夠鏈結到目錄樹才能被我們使用。 將檔案系統與目錄樹結合的動作我們稱為掛載。掛載點一定是目錄,該目錄為進入該檔案系統的入口。

Linux 磁碟與檔案系統

一 硬碟物理組成 整個磁碟是由許多的硬碟片堆疊組成,而整個磁碟包括柱面 cylinder 磁軌 track 以及最小的單位扇區 sector 通常,乙個扇區的大小約為512位元組。而硬碟的讀取則是依賴於固定在機械手臂上磁頭 head 來實現。可以通過以下這個公式來計算整個磁碟的儲存容量 cylind...

Linux磁碟檔案系統與維護

linux 磁碟檔案系統與維護 掛載硬碟步驟 分割槽 格式化 掛載分割槽 讀寫掛載點 解除安裝掛載點 掛載u盤 u盤是usb裝置,內建usb scsi轉換介面,所以被認為是scsi硬碟,預設都劃分乙個分割槽。掛載需要核心支援scsi和usb介面,需要事先驅動 modprobe usb storge ...

Linux 磁碟管理與檔案系統

1.資料結構 扇區 盤面被分成多個扇形區域,每個扇區存放512個位元組的資料 磁軌 同一碟片不同半徑的同心圓 柱面 不同碟片相同半徑構成的圓柱面 2.物理結構 碟片 硬碟有多個碟片,每個碟片2面 磁頭 每面乙個磁頭 3.儲存容量 硬碟儲存容量 磁頭數 x 磁軌 柱面 數 x 每道扇區數 x 每扇區位...