linux學習篇5--- 文件系統 實體連接與符號鏈接 磁盤 分割掛載 格式化 swap


linux學習篇5---- 《鳥哥的Linux私房菜基礎學習篇(第三版)》讀書筆記


1.文件系統特性

Linux 操作系統的檔案權限(rwx)與文件屬性(擁有者、羣組、時間參數等)。 文件系統通常會將這兩部分的數據分別存放在不同癿區塊,權限與屬性放置到inode,至於實際數據則放置到 datablock區塊中。 另外,還有一個超級區塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 不 block 的總量、使用量、剩餘量等。


superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩餘量, 以及文件系統的格式與相關信息等;
 inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的數據所在的每個 block 號碼
block:實際記錄檔案的內容,若檔案太大時,會佔用多個 block 。



inode/block 資料存取示意圖




如圖 第一個爲索引式文件系統(linux) 第二個爲Fat  沒有inode   無法一次讀出所有的block號     所以一個文件的block分散太厲害的話  容易出現磁盤碎片


ps.  df指令查看掛載情況



2.與目錄樹的關係

當我們在 Linux 下的 ext 文件系統建立一個目錄時, ext會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關權限與屬性,並可記錄分配到的那塊block 號碼; 而block則是記錄在這個目錄下的文件名與該文件名佔用的 inode 號碼數據


3.EXT3/EXT4 檔案的存取

新增一個檔案,此時文件系統的行爲是:
1. 先確定用戶對於欲新增檔案的目彔是否具有 w 與 x 的權限,若有的話才能新增;
2. 根據 inode bitmap 找到沒有使用的 inode 號碼,並將新檔案的權限/屬性寫入;
3. 根據 block bitmap 找到沒有使用中的 block 號碼,並將實際的數據寫入 block 中,且更新 inode 的 block 指向數據;
4. 將剛剛寫入的 inode 與 block 數據同步更新 inode bitmap 與 block bitmap,並更新 superblock 的內容。



4.日誌式文件系統 (Journaling filesystem)

爲了避免意外中斷導致inode block中數據未同步到中介數據中去(上邊的第四步)我們的前輩們想到一個方式, 如果在我們的 filesystem 當中規劃出一個區塊,該區塊專門在記錄寫入或修訂檔案時的步驟, 那不就可以簡化一致性檢查的步驟了?也就是說:
1. 預備:當系統要寫入一個檔案時,會先在日誌記錄區塊中記錄某個檔案准備要寫入的信息;
2. 實際寫入:開始寫入檔案的權限與數據;開始更新 metadata 的數據;
3. 結束:完成數據與 metadata 的更新後,在日誌記錄區塊當中完成該檔案的記錄。


在這樣的程序當中,萬一數據的記錄過程當中發生了問題,那麼我們的系統只要去檢查日誌記錄區塊, 就可以知道那個檔案發生了問題,針對該問題來做一致性的檢查即可,而不必針對整塊 filesystem 去檢查, 這樣就可以達到快速修復 filesystem 的能力了!這就是日誌式檔案最基礎的功能。


5.Linux 文件系統的運作:

異步處理:

當系統加載一個檔案到內存後,如果該檔案沒有被更改過,則在內存區段的檔案數據會被設定爲乾淨
(clean)的。 但如果內存中的檔案數據被更改過了(例如你用 vi 去編輯過這個檔案),此時該內存中的
數據會被設定爲髒的 (Dirty)。此時所有的動作都還在內存中執行,並沒有寫入到磁盤中! 系統會不定
時的將內存中設定爲『Dirty』的數據寫回磁盤,以保持磁盤與內存數據的一致性。 你也可以利用 sync 指令來強迫寫入磁盤。


Linux 文件系統與內存的關係:
系統會將常用的檔案數據放置到主存儲器的緩衝區,以加速文件系統的讀/寫;
承上,因此 Linux 的物理內存最後都會被用!加速系統效能;
你可以手動使用 sync 來強迫內存中設定爲 Dirty 的檔案回寫到磁盤中;
若正常關機時,關機指令會主動呼叫 sync 來將內存的數據回寫入磁盤內;
但若不正常關機(如跳電、當機或其他不明原因),由於數據尚未回寫到磁盤內, 因此重新啓動後
可能會花很多時間在進行磁盤檢驗,甚至可能尋致文件系統的損毀(非磁盤損毀)。


ps。 .df:列出文件系統的整體磁盤使用量;

 du:評估文件系統的磁盤使用量(常用在評估目錄所佔容量)



6.實體鏈接不符號鏈接: ln

Hard Link (實體鏈接, 硬式連結或實際連結)

每個檔案都會佔用一個 inode ,檔案內容由 inode 的記錄指向
想要
讀取該檔案,必須要經過目錄記錄的文件名來指向正確 inode 號碼才能讀取




如圖。 目標1 和目標2的block都記錄了 同一個inode 這個inode指向一個檔案數據內容

好處:

在於如果你將任何一個『檔名』刪除,其實 inode 與 block 都還是存在的! 此時你可以透過另一個『檔名』來讀取到正確的檔案數據!此外,不管你使用哪個『檔名』來編輯, 最終的結果都會寫入到相同癿 inode 與 block 中,因此均能進行據的修改! 

一般來說,使用 hard link 指定鏈接文件時,磁盤的空間與 inode 的數目都不會改發! 我們還是由圖來看,由圖中可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會增加 inode 也不會耗用 block 數量!(就像是指針一樣)

侷限

不能跨 Filesystem;

不能 link 目錄。



Symbolic Link (符號鏈接,亦即是快捷方式)

Symbolic link 就是在建立一個獨立的檔案,而這個檔案會讓數據的讀取指向他 link 的那個檔案的檔名!由亍只是利用檔案來做爲指向的動作, 所以,當來源檔被刪除後,symbolic link 癿檔案會無法打開



如圖。   目標1指向的是目標2的inode  如果目標2被刪除   這目標1也無法找到數據

這個 Symbolic Link 與 Windows 的快捷方式可以給他劃上等號,由 Symbolic link 所建立的檔案爲一個獨立的新檔案,所以會佔用掉 inode 與 block

修改連接檔的數據  源檔案也會改變   



ln [-sf] 來源文件 目標文件

-s :如果不加任何參數就進行連結,那就是hard link,至於 -s 就是symbolic link

 -f :如果 目標文件 存在時,就主動的將目標文件直接移除後再建立!


ps.

新建目錄的連接檔數目爲2    分別爲當前目錄以及上一級目錄   新建後上一級目錄的連接檔數目會加1



7.磁盤的分割、格式化、檢驗與掛載:

磁盤分區: fdisk

fdisk [-l] 裝置名稱

-l :輸出後面接裝置所有partition 內容。若僅有 fdisk -l 時, 則系統將會把整個系統內能夠搜索裝置 partition 均列出來。

分區後:

partprobe 這個指令。這個指令的執行很簡單, 他僅是告知核心必須要讀取新的分割表而已,因此並不會在屏幕上出現任何信息!


磁盤格式化:mkfs

mkfs [-t 文件系統格式] 裝置文件名


磁盤檢驗: fsck, badblocks

fsck [-t 文件系統] [-ACay] 裝置名稱

通常使用這個指令的場合都是在系統出現極大問題,導致你在 Linux 開機時候得進入單人單機模式下進入維護行爲時,必項使用此指令

執行 fsck 時, 被檢查癿 partition 務必可掛載到系統上!亦即是需要在卸除的狀態

磁盤掛載卸除: mount umount

mount 文件系統 目錄

umount 目錄或者文件系統


8. 開機掛載:/etc/fstab 及 /etc/mtab

p286


9.特殊裝置 loop 掛載 (映象檔不刻錄就掛載使用)

mount -o loop /root/centos5.2_x86_64.iso


10.建立大檔案以製作 loop 裝置檔案

假設我要建立一個空檔案在 /home/loopdev ,那可以這樣做: [root@www ~]# dd if=/dev/zero of=/home/loopdev bs=1M count=512

格式化  mkfs -t ext3 /home/loopdev

掛載  mount -o loop /home/loopdev /media/cdrom/


11.內存置換空間(swap)的建置

使用實體分割槽建置swap

建立 swap 分割槽方式也是非常的簡單!透過底下幾個步驟:
1. 分割:先使用 fdisk 在你
磁盤中分割中一個分割槽給系統作爲 swap 。由亍 Linux 癿 fdiskyu預設會將分割槽 ID設定爲 Linux 文件系統,所以你可能還得要設定一下 sy stem ID 就是了。
2. 格式化:利用建立 swap 格式
mkswap裝置文件名』就能夠格式化該分割槽成爲 swap 格式囉
3. 使用:最後將該 swap 裝置
啓動,方法爲:『swapon裝置文件名』。
4. 觀察:最終透過 free 這個
指令來觀察一下內存用量吧!


ps.fdisk無法支持2T以上的分割槽  這個時候就需要用到parted



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