磁盘与文件系统管理--鸟哥私房菜读书笔记
1. 磁盤的基礎知識
磁盤盤上的物理組成
? 扇區(Sector)為最小的物理儲存單位,每個扇區為 512 bytes;
? 將扇區組成一個圓,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小單位;
? 第一個扇區最重要,里面有:(1)主要開機區(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 則占有 64 bytes。
各種接口的磁盤在Linux中的文件名分別為:
? /dev/sd[a-p][1-15]:為SCSI, SATA, USB, Flash隨身碟等接口的磁盤文件名;
? /dev/hd[a-d][1-63]:為 IDE 接口的磁盤文件名;
2. 文件系統基礎知識
傳統的磁盤與文件系統的應用中,一個分割槽就是只能夠被格式化成為一個文件系統,所以我們可以說一個 filesystem 就是一個 partition。有些新技術可以將一個分割槽格式化為多個文件系統(例如LVM),也能夠將多個分割槽合成一個文件系統(LVM, RAID)! 所以說,目前我們在格式化時已經不再說成針對 partition 來格式化了, 通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分割槽。
檔案數據除了檔案實際內容外, 通常還有非常多的屬性,文件系統通常會將這兩部份的數據分別存放在不同的區塊,權限與屬性放置到 inode 中,至于實際數據則放置到 data block 區塊中。 另外,還有一個超級區塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 不 block 的總量、使用量、剩余量等。
ext2文件系統示意圖
在整體的規劃當中,文件系統最前面有一個啟動扇區(boot sector),這個啟動扇區可以安裝開機管理程序, 這是個非常重要的設計,因為如此一來我們就能夠將不同的開機管理程序安裝到個別的文件系統最前端,而不用覆蓋整顆硬盤唯一的 MBR, 這樣也才能夠制作出多重引尋的環境。
inode 結構示意圖
每個區段與 superblock 的信息都可以使用 dumpe2fs 這個指令來查詢:
dumpe2fs [-bh] 裝置文件名
-b :列出保留為壞軌的部分(一般用不到)
-h :僅列出 superblock 的數據,不會列出其他的區段內容
3. 目錄樹
Linux 下的 ext2 文件系統建立一個目錄時, ext2 會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關權限與屬性,并可記錄分配到的那塊 block 號碼; 而 block 則是記錄在這個目錄下的文件名與該文件名占用的 inode 號碼數據。ls -i可以看到目錄中文件的inode號碼。
在 Linux 下的 ext2 建立一個一般檔案時, ext2 會分配一個 inode 與相對于該檔案大小的 block 數量給該檔案。inode 本身并不記彔文件名,文件名的記錄是在目錄的 block 當中。因此當我們要讀取某個檔案時,就務必會經過目錄的 inode 與 block ,然后才能夠找到那個待讀取檔案的 inode 號碼, 最終才會讀到正確的檔案的 block 內的數據。
目錄樹是由根目錄開始讀起,因此系統透過掛載的信息可以找到掛載點的 inode 號碼(通常一個 filesystem 的最頂層 inode 號碼會由 2 號開始),此時就能夠得到根目錄的 inode 內容,并依據該 inode 讀取根目錄的 block 內的文件名數據,再一層一層的往下讀到正確的檔名。
ext3日志式文件系統 (Journaling filesystem):為了避免文件系統不一致的情況發生
1. 預備:當系統要寫入一個檔案時,會先在日志記錄區塊中記錄某個檔案準備要寫入的信息;
2. 實際寫入:開始寫入檔案的權限與數據;開始更新 metadata 的數據;
3. 結束:完成數據與 metadata的更新后,在日志記錄區塊當中完成該檔案的記錄。
4.?掛載點
每個 filesystem 都有獨立的 inode / block / superblock 等信息,這個文件系統要能夠鏈接到目錄樹才能被我們使用。 將文件系統與目錄樹結合的動作我們稱為『掛載』。重點是:掛載點一定是目錄,該目錄為進入該文件系統的入口。 因此并不是你有任何文件系統都能使用,必項要『掛載』到目錄樹的某個目錄后,才能夠使用該文件系統。
VFS 文件系統的示意圖
5.?磁盤與目錄的容量
df:列出文件系統的整體磁盤使用量
df [-ahikHTm] [目錄或文件名]
-a :列出所有的文件系統,包括系統特有的 /proc 等文件系統;
-k :以 KBytes 的容量顯示各文件系統;
-m :以 MBytes 的容量顯示各文件系統;
-h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
-H :以 M=1000K 取代 M=1024K 的進位方式;
-T :連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
-i :不用硬盤容量,而以 inode 的數量來顯示
du [-ahskm] 檔案或目錄名稱
-a :列出所有的檔案與目錄容量,因為默認僅統計目錄底下的檔案量而已。
-h :以人們較易讀的容量格式 (G/M) 顯示;
-s :列出總量而已,而不列出每個各別的目錄占用容量;
-S :不包括子目錄下的總計,與 -s 有點差別。
-k :以 KBytes 列出容量顯示;
-m :以 MBytes 列出容量顯示;
6.?實體鏈接與符號鏈接
hard link 只是在某個目錄下新增一筆檔名鏈接到某 inode 號碼的關連記錄,兩個檔名對應同一個inode號碼,如果你將任何一個『檔名』刪除,其實 inode 不 block 都還是存在的! 此時你可以透過另一個『檔名』來讀取到正確的檔案數據。使用 hard link 設定鏈接文件時,磁盤的空間與 inode 的數目都不會改變。hard link不能跨文件系統,不能連接目錄。
Symbolic Link就是在建立一個獨立的檔案,而這個檔案會讓數據的讀取指向他 link 的那個檔案的檔名!由于只是利用檔案來做為指向的動作, 所以,當來源檔被刪除之后,symbolic link 檔案會打不開。由 Symbolic link 所建立的檔案為一個獨立的新檔案,所以會占用掉 inode 與 block。
ln [-sf] 來源文件 目標文件
-s :如果不加任何參數就進行連結,那就是hard link,至于 -s 就是symbolic link
-f :如果 目標文件 存在時,就主動的將目標文件直接移除后再建立
7.?磁盤的分割、格式化、檢驗與掛載
a.?磁盤分區: fdisk
fdisk [-l] 裝置名稱
-l :輸出后面接的裝置所有的 partition 內容。若僅有 fdisk -l 時, 則系統將會把整個系統內能夠搜尋到的裝置的 partition 均列出來。
在實作過程中請特別注意,因為 SATA 硬盤最多能夠支持到 15 號的分割槽, IDE 則可以支持到 63 號。
b.?磁盤格式化:make filesystem, mkfs
mkfs [-t 文件系統格式] 裝置文件名
-t :可以接文件系統格式,例如 ext3, ext2, vfat 等(系統有支持才會生效)
mke2fs [-b block大小] [-i block大小] [-L 標頭] [-cj] 裝置
-b :可以設定每個 block 的大小,目前支持 1024, 2048, 4096 bytes 三種;
-i :多少容量給予一個 inode 呢
-c :檢查磁盤錯誤,僅下達一次 -c 時,會進行快速讀取測試; 如果下達兩次 -c -c 的話,會測試讀寫(read-write),會很慢
-L :后面可以接標頭名稱 (Label),這個 label 是有用的
-j :本來 mke2fs 是 EXT2 ,加上 -j 后,會主動加入 journal 而成為 EXT3。
c.?磁盤檢驗: fsck, badblocks
fsck [-t 文件系統] [-ACay] 裝置名稱
-t :指定文件系統, 不過由于現今的 Linux 會自動的透過 superblock 去分辨文件系統, 因此通常可以不需要這個選頃
-A :依據 /etc/fstab 的內容,將需要的裝置掃描一次。
-a :自動修復檢查到的有問題的扇區,所以你不用一直按 y
-y :與 -a 類似,但是某些 filesystem 僅支持 -y 這個參數!
-C :可以在檢驗的過程當中,使用一個直方圖來顯示目前的進度
badblocks -[svw] 裝置名稱
-s :在屏幕上列出進度
-v :可以在屏幕上看到進度
-w :使用寫入的方式來測試,建議不要使用此參數,尤其是待檢查的裝置已有檔案時
d.?磁盤掛載與卸除
mount -a :依照配置文件 /etc/fstab 的數據將所有未掛載的磁盤都掛載上來
mount [-l]?:單純的輸入 mount 會顯示目前掛載的信息。加上 -l 可增列 Label 名稱
mount [-t 文件系統] [-L Label名] [-o 額外選項] [-n] 裝置文件名 掛載點
-t :與mkfs 的選項非常類似的,可以加上文件系統種類來指定欲掛載的類型。
-n :在默認的情況下,系統會將實際掛載的情況實時寫入 /etc/mtab 中,以利其他程序的運作。但在某些情況下(例如單人維護模式)為了避免問題,會刻意不寫入
-L :系統除了利用裝置文件名 (例如 /dev/hdc6)之外,還可以利用文件系統的標頭名稱 (Label)來進行掛載。
-o :后面可以接一些掛載時額外加上的參數!
ro, rw: 掛載文件系統成為只讀(ro) 或可擦寫(rw)
async, sync: 此文件系統是否使用同步寫入 (sync) 或異步 (async) 的 內存機制。
auto, noauto: 允許此 partition 被以 mount -a 自勱掛載(auto)
dev, nodev: 是否允許此 partition 上,可建立裝置檔案?
suid, nosuid: 是否允許此 partition 含有 suid/sgid 的文件格式?
exec, noexec: 是否允許此 partition 上擁有可執行 binary 檔案?
user, nouser: 是否允許此 partition 讓任何使用者執行 mount ?一般來說, mount 僅有 root 可以進行,但下達 user 參數,則可讓 一般 user 也能夠對此 partition 進行 mount 。
defaults: 默認值為:rw, suid, dev, exec, auto, nouser, and async
remount: 重新掛載,這在系統出錯,或重新更新參數時,很有用!
umount [-fn] 裝置文件名或掛載點
-f :強制卸除!可用在類似網絡文件系統 (NFS) 無法讀取到的情況下;
-n :不更新 /etc/mtab 情況下卸除。
e. 磁盤參數修訂
修改label
e2label 裝置名稱 新的Label名稱
工具
tune2fs [-jlL] 裝置代號
-l :將 superblock 內的數據讀出來
-j :將 ext2 的 filesystem 轉換為 ext3 的文件系統;
-L :類似 e2label 的功能,可以修改 filesystem 的 Label?
f.?設定開機掛載
直接到 /etc/fstab 里面去修修就行啰
? 根目錄 / 是必項掛載的﹐而且一定要先于其它 mount point 被掛載進來。
? 其它 mount point 必項為已建立的目錄﹐可任意指定﹐但一定要遵守必須的系統目錄架構原則
? 所有 mount point 在同一時間內﹐只能掛載一次。
? 所有 partition 在同一時間內﹐只能掛載一次。
? 如若進行卸除﹐您必項先將工作目錄移到 mount point(及其子目彔) 之外。
g.?特殊裝置 loop 掛載 (映象檔不刻錄就掛載使用)
mount -o loop 映像文件名
h.?內存置換空間(swap)之建置
1. 分割:先使用 fdisk 在你的磁盤中分割中一個分割槽給系統作為 swap 。由于 Linux 的 fdisk 預設會將分割槽的 ID 設定為 Linux 的文件系統,所以你可能還得要設定一下 system ID 就是了。
2. 格式化:利用建立 swap 格式的『mkswap 裝置文件名』就能夠格式化該分割槽成為 swap 格式啰
3. 使用:最后將該 swap 裝置啟動,方法為:『swapon 裝置文件名』。
4. 觀察:最終透過 free 這個指令來觀察一下內存的用量吧!
總結
以上是生活随笔為你收集整理的磁盘与文件系统管理--鸟哥私房菜读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旺旺打标工具,淘宝搜索打标软件(含旺旺打
- 下一篇: java SE 7规范(又名JDK 7)