久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

鸟哥的Linux私房菜(基础篇)- 第八章、Linux 磁盘与文件系统管理

發布時間:2025/3/21 linux 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鸟哥的Linux私房菜(基础篇)- 第八章、Linux 磁盘与文件系统管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第八章、Linux磁盤與文件系統管理
最近升級日期:2009/08/30
系統管理員很重要的任務之一就是管理好自己的磁盤文件系統,每個分割槽不可太大也不能太小,太大會造成磁盤容量的浪費,太小則會產生文件無法儲存的困擾。此外,我們在前面幾章談到的文件權限與屬性中,這些權限與屬性分別記錄在文件系統的哪個區塊內?這就得要談到 filesystem 中的 inode 與 block 了。在本章我們的重點在于如何制作文件系統,包括分割、格式化與掛載等,是很重要的一個章節喔!

1. 認識 EXT2 文件系統
  1.1 硬盤組成與分割的復習
  1.2 文件系統特性: 索引式文件系統
  1.3 Linux 的 EXT2 文件系統(inode): data block, inode table, superblock,dumpe2fs
  1.4 與目錄樹的關系
  1.5 EXT2/EXT3 文件的存取與日志式文件系統的功能
  1.6 Linux 文件系統的運行
  1.7 掛載點的意義 (mount point)
  1.8 其他 Linux 支持的文件系統與 VFS
2. 文件系統的簡單操作
  2.1 磁盤與目錄的容量: df, du
  2.2 實體鏈接與符號鏈接: ln
3. 磁盤的分割、格式化、檢驗與掛載
  3.1 磁盤分區: fdisk, partprobe
  3.2 磁盤格式化: mkfs, mke2fs
  3.3 磁盤檢驗: fsck, badblocks
  3.4 磁盤掛載與卸除: mount, umount
  3.5 磁盤參數修訂: mknod, e2label, tune2fs, hdparm
4. 配置啟動掛載:
  4.1 啟動掛載 /etc/fstab 及 /etc/mtab
  4.2 特殊裝置 loop 掛載(映象檔不刻錄就掛載使用)
5. 內存置換空間(swap)之建置:
  5.1 使用實體分割槽建置swap
  5.2 使用文件建置swap
  5.3 swap使用上的限制
6. 文件系統的特殊觀察與操作
  6.1 boot sector 與 superblock 的關系
  6.2 磁盤空間之浪費問題
  6.3 利用 GNU 的 parted 進行分割行為
7. 重點回顧
8. 本章習題
9. 參考數據與延伸閱讀
10. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23881

認識 EXT2 文件系統

Linux最傳統的磁盤文件系統(filesystem)使用的是EXT2這個啦!所以要了解文件系統就得要由認識EXT2開始!而文件系統是創建在硬盤上面的,因此我們得了解硬盤的物理組成才行。磁盤物理組成的部分我們在第零章談過了,至于磁盤分區則在第三章談過了,所以底下只會很快的復習這兩部份。重點在于inode, block還有superblock等文件系統的基本部分喔!


硬盤組成與分割的復習

由于各項磁盤的物理組成我們在第零章里面就介紹過,同時第三章也談過分割的概念了,所以這個小節我們就拿之前的重點出來介紹就好了!詳細的信息請您回去那兩章自行復習喔!^_^。好了,首先說明一下磁盤的物理組成,整顆磁盤的組成主要有:

  • 圓形的磁盤盤(主要記錄數據的部分);
  • 機械手臂,與在機械手臂上的磁盤讀取頭(可擦寫磁盤盤上的數據);
  • 主軸馬達,可以轉動磁盤盤,讓機械手臂的讀取頭在磁盤盤上讀寫數據。

從上面我們知道數據儲存與讀取的重點在于磁盤盤,而磁盤盤上的物理組成則為(假設此磁盤為單盤片,磁盤盤圖標請參考第三章圖2.2.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, U盤, Flash閃盤等接口的磁盤文件名;
  • /dev/hd[a-d][1-63]:為 IDE 接口的磁盤文件名;

復習完物理組成后,來復習一下磁盤分區吧!所謂的磁盤分區指的是告訴操作系統『我這顆磁盤在此分割槽可以存取的區域是由 A 磁柱到 B 磁柱之間的區塊』,如此一來操作系統就能夠知道他可以在所指定的區塊內進行文件數據的讀/寫/搜尋等動作了。也就是說,磁盤分區意即指定分割槽的啟始與結束磁柱就是了。

那么指定分割槽的磁柱范圍是記錄在哪里?就是第一個扇區的分割表中啦!但是因為分割表僅有64bytes而已,因此最多只能記錄四筆分割槽的記錄,這四筆記錄我們稱為主要 (primary) 或延伸 (extended) 分割槽,其中擴展分配槽還可以再分割出邏輯分割槽 (logical) ,而能被格式化的則僅有主要分割與邏輯分割而已。

最后,我們再將第三章關于分割的定義拿出來說明一下啰:

  • 主要分割與擴展分配最多可以有四筆(硬盤的限制)
  • 擴展分配最多只能有一個(操作系統的限制)
  • 邏輯分割是由擴展分配持續切割出來的分割槽;
  • 能夠被格式化后,作為數據存取的分割槽為主要分割與邏輯分割。擴展分配無法格式化;
  • 邏輯分割的數量依操作系統而不同,在Linux系統中,IDE硬盤最多有59個邏輯分割(5號到63號),SATA硬盤則有11個邏輯分割(5號到15號)。

文件系統特性

我們都知道磁盤分區完畢后還需要進行格式化(format),之后操作系統才能夠使用這個分割槽。為什么需要進行『格式化』呢?這是因為每種操作系統所配置的文件屬性/權限并不相同,為了存放這些文件所需的數據,因此就需要將分割槽進行格式化,以成為操作系統能夠利用的『文件系統格式(filesystem)』。

由此我們也能夠知道,每種操作系統能夠使用的文件系統并不相同。舉例來說,windows 98 以前的微軟操作系統主要利用的文件系統是 FAT (或 FAT16),windows 2000 以后的版本有所謂的 NTFS文件系統,至于Linux 的正統文件系統則為 Ext2 (Linux second extended file system, ext2fs)這一個。此外,在默認的情況下,windows 操作系統是不會認識 Linux 的 Ext2 的。

傳統的磁盤與文件系統之應用中,一個分割槽就是只能夠被格式化成為一個文件系統,所以我們可以說一個 filesystem就是一個 partition。但是由于新技術的利用,例如我們常聽到的LVM與軟件磁盤陣列(software raid),這些技術可以將一個分割槽格式化為多個文件系統(例如LVM),也能夠將多個分割槽合成一個文件系統(LVM, RAID)!所以說,目前我們在格式化時已經不再說成針對 partition 來格式化了,通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分割槽喔!

那么文件系統是如何運行的呢?這與操作系統的文件數據有關。較新的操作系統的文件數據除了文件實際內容外,通常含有非常多的屬性,例如 Linux 操作系統的文件權限(rwx)與文件屬性(擁有者、群組、時間參數等)。文件系統通常會將這兩部份的數據分別存放在不同的區塊,權限與屬性放置到 inode 中,至于實際數據則放置到 data block 區塊中。另外,還有一個超級區塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。

每個 inode 與 block 都有編號,至于這三個數據的意義可以簡略說明如下:

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

由于每個 inode 與 block 都有編號,而每個文件都會占用一個 inode ,inode 內則有文件數據放置的 block 號碼。因此,我們可以知道的是,如果能夠找到文件的 inode 的話,那么自然就會知道這個文件所放置數據的 block 號碼,當然也就能夠讀出該文件的實際數據了。這是個比較有效率的作法,因為如此一來我們的磁盤就能夠在短時間內讀取出全部的數據,讀寫的效能比較好啰。

我們將 inode 與 block 區塊用圖解來說明一下,如下圖所示,文件系統先格式化出 inode 與 block 的區塊,假設某一個文件的屬性與權限數據是放置到 inode 4 號(下圖較小方格內),而這個 inode 記錄了文件數據的實際放置點為2, 7, 13, 15 這四個 block 號碼,此時我們的操作系統就能夠據此來排列磁盤的閱讀順序,可以一口氣將四個 block 內容讀出來!那么數據的讀取就如同下圖中的箭頭所指定的模樣了。


圖1.2.1、inode/block 數據存取示意圖

這種數據存取的方法我們稱為索引式文件系統(indexed allocation)。那有沒有其他的慣用文件系統可以比較一下啊?有的,那就是我們慣用的閃盤(閃存),閃盤使用的文件系統一般為 FAT 格式。FAT 這種格式的文件系統并沒有 inode存在,所以 FAT 沒有辦法將這個文件的所有 block 在一開始就讀取出來。每個 block 號碼都記錄在前一個 block 當中,他的讀取方式有點像底下這樣:


圖1.2.2、FAT文件系統數據存取示意圖

上圖中我們假設文件的數據依序寫入1->7->4->15號這四個 block 號碼中,但這個文件系統沒有辦法一口氣就知道四個 block 的號碼,他得要一個一個的將 block 讀出后,才會知道下一個 block 在何處。如果同一個文件數據寫入的 block 分散的太過厲害時,則我們的磁盤讀取頭將無法在磁盤轉一圈就讀到所有的數據,因此磁盤就會多轉好幾圈才能完整的讀取到這個文件的內容!

常常會聽到所謂的『碎片整理』吧?需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時文件讀取的效能將會變的很差所致。這個時候可以透過碎片整理將同一個文件所屬的 blocks 匯整在一起,這樣數據的讀取會比較容易啊!想當然爾,FAT 的文件系統需要經常的碎片整理一下,那么 Ext2 是否需要磁盤重整呢?

由于 Ext2 是索引式文件系統,基本上不太需要常常進行碎片整理的。但是如果文件系統使用太久,常常刪除/編輯/新增文件時,那么還是可能會造成文件數據太過于離散的問題,此時或許會需要進行重整一下的。不過,老實說,鳥哥倒是沒有在 Linux 操作系統上面進行過 Ext2/Ext3 文件系統的碎片整理說!似乎不太需要啦!^_^


Linux 的 EXT2 文件系統(inode):

在第六章當中我們介紹過 Linux 的文件除了原有的數據內容外,還含有非常多的權限與屬性,這些權限與屬性是為了保護每個用戶所擁有數據的隱密性。而前一小節我們知道 filesystem 里面可能含有的 inode/block/superblock等。為什么要談這個呢?因為標準的 Linux 文件系統 Ext2 就是使用這種 inode 為基礎的文件系統啦!

而如同前一小節所說的,inode 的內容在記錄文件的權限與相關屬性,至于 block 區塊則是在記錄文件的實際內容。而且文件系統一開始就將 inode 與 block 規劃好了,除非重新格式化(或者利用 resize2fs 等命令變更文件系統大小),否則 inode 與 block 固定后就不再變動。但是如果仔細考慮一下,如果我的文件系統高達數百GB時,那么將所有的 inode 與 block 通通放置在一起將是很不智的決定,因為 inode 與 block 的數量太龐大,不容易管理。

為此之故,因此 Ext2 文件系統在格式化的時候基本上是區分為多個區塊群組 (block group) 的,每個區塊群組都有獨立的 inode/block/superblock 系統。感覺上就好像我們在當兵時,一個營里面有分成數個連,每個連有自己的聯絡系統,但最終都向營部回報連上最正確的信息一般!這樣分成一群群的比較好管理啦!整個來說,Ext2 格式化后有點像底下這樣:


圖1.3.1、ext2文件系統示意圖(注1)

在整體的規劃當中,文件系統最前面有一個啟動扇區(boot sector),這個啟動扇區可以安裝啟動管理程序,這是個非常重要的設計,因為如此一來我們就能夠將不同的啟動管理程序安裝到個別的文件系統最前端,而不用覆蓋整顆硬盤唯一的 MBR,這樣也才能夠制作出多重引導的環境啊!至于每一個區塊群組(block group)的六個主要內容說明如后:


  • data block (數據區塊)

data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有1K, 2K 及 4K 三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄啦。不過要注意的是,由于 block 大小的差異,會導致該文件系統能夠支持的最大磁盤容量與最大單一文件容量并不相同。因為 block 大小而產生的 Ext2 文件系統限制如下:(注2)

Block 大小1KB2KB4KB
最大單一文件限制16GB256GB2TB
最大文件系統總容量2TB8TB16TB

你需要注意的是,雖然 Ext2 已經能夠支持大于 2GB 以上的單一文件容量,不過某些應用程序依然使用舊的限制,也就是說,某些程序只能夠捉到小于 2GB 以下的文件而已,這就跟文件系統無關了!舉例來說,鳥哥在環工方面的應用中有一套秀圖軟件稱為PAVE(注3),這套軟件就無法捉到鳥哥在數值模式仿真后產生的大于 2GB 以上的文件!害的鳥哥常常還要重跑數值模式...

除此之外 Ext2 文件系統的 block 還有什么限制呢?有的!基本限制如下:

  • 原則上,block 的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
  • 每個 block 內最多只能夠放置一個文件的數據;
  • 承上,如果文件大于 block 的大小,則一個文件會占用多個 block 數量;
  • 承上,若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費)。

如上第四點所說,由于每個 block 僅能容納一個文件的數據而已,因此如果你的文件都非常小,但是你的 block 在格式化時卻選用最大的 4K 時,可能會產生一些容量的浪費喔!我們以底下的一個簡單例題來算一下空間的浪費吧!

例題: 假設你的Ext2文件系統使用 4K block ,而該文件系統中有 10000 個小文件,每個文件大小均為 50bytes,請問此時你的磁盤浪費多少容量? 答: 由于 Ext2 文件系統中一個 block 僅能容納一個文件,因此每個 block 會浪費『 4096 - 50 = 4046 (byte)』,系統中總共有一萬個小文件,所有文件容量為:50 (bytes) x 10000 = 488.3Kbytes,但此時浪費的容量為:『 4046 (bytes) x 10000 = 38.6MBytes 』。想一想,不到 1MB 的總文件容量卻浪費將近 40MB 的容量,且文件越多將造成越多的磁盤容量浪費。

什么情況會產生上述的狀況呢?例如 BBS 網站的數據啦!如果 BBS 上面的數據使用的是純文本文件來記載每篇留言,而留言內容如果都寫上『如題』時,想一想,是否就會產生很多小文件了呢?

好,既然大的 block 可能會產生較嚴重的磁盤容量浪費,那么我們是否就將 block 大小訂為 1K 即可?這也不妥,因為如果 block 較小的話,那么大型文件將會占用數量更多的 block ,而 inode 也要記錄更多的 block 號碼,此時將可能導致文件系統不良的讀寫效能。

所以我們可以說,在您進行文件系統的格式化之前,請先想好該文件系統預計使用的情況。以鳥哥來說,我的數值模式仿真平臺隨便一個文件都好幾百 MB,那么 block 容量當然選擇較大的!至少文件系統就不必記錄太多的 block 號碼,讀寫起來也比較方便啊!


  • inode table (inode 表格)

再來討論一下 inode 這個玩意兒吧!如前所述 inode 的內容在記錄文件的屬性以及該文件實際數據是放置在哪幾號 block 內!基本上,inode 記錄的文件數據至少有底下這些:(注4)

  • 該文件的存取模式(read/write/excute);
  • 該文件的擁有者與群組(owner/group);
  • 該文件的容量;
  • 該文件創建或狀態改變的時間(ctime);
  • 最近一次的讀取時間(atime);
  • 最近修改的時間(mtime);
  • 定義文件特性的旗標(flag),如 SetUID...;
  • 該文件真正內容的指向 (pointer);

inode 的數量與大小也是在格式化時就已經固定了,除此之外 inode 還有些什么特色呢?

  • 每個 inode 大小均固定為 128 bytes;
  • 每個文件都僅會占用一個 inode 而已;
  • 承上,因此文件系統能夠創建的文件數量與 inode 的數量有關;
  • 系統讀取文件時需要先找到 inode,并分析 inode 所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取 block 的內容。

我們約略來分析一下 inode / block 與文件大小的關系好了。inode 要記錄的數據非常多,但偏偏又只有 128bytes 而已,而 inode 記錄一個 block 號碼要花掉 4byte ,假設我一個文件有 400MB 且每個 block 為 4K 時,那么至少也要十萬筆 block 號碼的記錄呢!inode 哪有這么多可記錄的信息?為此我們的系統很聰明的將 inode 記錄 block 號碼的區域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區。這是啥?我們將 inode 的結構畫一下好了。


圖1.3.2、inode 結構示意圖(注5)

上圖最左邊為 inode 本身 (128 bytes),里面有 12 個直接指向 block 號碼的對照,這 12 筆記錄就能夠直接取得 block 號碼啦!至于所謂的間接就是再拿一個 block 來當作記錄 block 號碼的記錄區,如果文件太大時,就會使用間接的 block 來記錄編號。如上圖 1.3.2 當中間接只是拿一個 block 來記錄額外的號碼而已。同理,如果文件持續長大,那么就會利用所謂的雙間接,第一個 block 僅再指出下一個記錄編號的 block 在哪里,實際記錄的在第二個 block 當中。依此類推,三間接就是利用第三層 block 來記錄編號啦!

這樣子 inode 能夠指定多少個 block 呢?我們以較小的 1K block 來說明好了,可以指定的情況如下:

  • 12 個直接指向: 12*1K=12K
    由于是直接指向,所以總共可記錄 12 筆記錄,因此總額大小為如上所示;

  • 間接: 256*1K=256K
    每筆 block 號碼的記錄會花去 4bytes,因此 1K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的文件大小如上;

  • 雙間接: 256*256*1K=2562K
    第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上;

  • 三間接: 256*256*256*1K=2563K
    第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上;

  • 總額:將直接、間接、雙間接、三間接加總,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB

此時我們知道當文件系統將 block 格式化為 1K 大小時,能夠容納的最大文件為 16GB,比較一下文件系統限制表的結果可發現是一致的!但這個方法不能用在 2K 及 4K block 大小的計算中,因為大于 2K 的 block 將會受到 Ext2 文件系統本身的限制,所以計算的結果會不太符合之故。


  • Superblock (超級區塊)

Superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock ,就沒有這個 filesystem 了。他記錄的信息主要有:

  • block 與 inode 的總量;
  • 未使用與已使用的 inode / block 數量;
  • block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes);
  • filesystem 的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息;
  • 一個 valid bit 數值,若此文件系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。

Superblock 是非常重要的,因為我們這個文件系統的基本信息都寫在這里,因此,如果 superblock 死掉了,你的文件系統可能就需要花費很多時間去挽救啦!一般來說, superblock 的大小為 1024bytes。相關的 superblock 信息我們等一下會以dumpe2fs 命令來呼叫出來觀察喔!

此外,每個 block group 都可能含有 superblock 喔!但是我們也說一個文件系統應該僅有一個 superblock 而已,那是怎么回事啊?事實上除了第一個 block group 內會含有 superblock 之外,后續的 block group 不一定含有 superblock ,而若含有 superblock 則該 superblock 主要是做為第一個 block group 內 superblock 的備份咯,這樣可以進行 superblock的救援呢!


  • Filesystem Description (文件系統描述說明)

這個區段可以描述每個 block group 的開始與結束的 block 號碼,以及說明每個區段 (superblock, bitmap, inodemap,data block) 分別介于哪一個 block 號碼之間。這部份也能夠用dumpe2fs 來觀察的。


  • block bitmap (區塊對照表)

如果你想要新增文件時總會用到 block 吧!那你要使用哪個 block 來記錄呢?當然是選擇『空的 block 』來記錄新文件的數據啰。那你怎么知道哪個 block 是空的?這就得要透過 block bitmap 的輔助了。從 block bitmap 當中可以知道哪些 block是空的,因此我們的系統就能夠很快速的找到可使用的空間來處置文件啰。

同樣的,如果你刪除某些文件時,那么那些文件原本占用的 block 號碼就得要釋放出來,此時在 block bitmap 當中相對應到該 block 號碼的標志就得要修改成為『未使用中』啰!這就是 bitmap 的功能。


  • inode bitmap (inode 對照表)

這個其實與 block bitmap 是類似的功能,只是 block bitmap 記錄的是使用與未使用的 block 號碼,至于 inode bitmap 則是記錄使用與未使用的 inode 號碼啰!


了解了文件系統的概念之后,再來當然是觀察這個文件系統啰!剛剛談到的各部分數據都與 block 號碼有關!每個區段與 superblock 的信息都可以使用 dumpe2fs 這個命令來查詢的!查詢的方法與實際的觀察如下:

[root@www ~]# dumpe2fs [-bh] 裝置文件名 選項與參數: -b :列出保留為壞軌的部分(一般用不到吧!?) -h :僅列出 superblock 的數據,不會列出其他的區段內容!范例:找出我的根目錄磁盤文件名,并觀察文件系統的相關信息 [root@www ~]# df <==這個命令可以叫出目前掛載的裝置 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3822848 5585708 41% / <==就是這個光! /dev/hdc3 4956316 141376 4559108 4% /home /dev/hdc1 101086 11126 84741 12% /boot tmpfs 371332 0 371332 0% /dev/shm[root@www ~]# dumpe2fs /dev/hdc2 dumpe2fs 1.39 (29-May-2006) Filesystem volume name: /1 <==這個是文件系統的名稱(Label) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file Default mount options: user_xattr acl <==默認掛載的參數 Filesystem state: clean <==這個文件系統是沒問題的(clean) Errors behavior: Continue Filesystem OS type: Linux Inode count: 2560864 <==inode的總數 Block count: 2560359 <==block的總數 Free blocks: 1524760 <==還有多少個 block 可用 Free inodes: 2411225 <==還有多少個 inode 可用 First block: 0 Block size: 4096 <==每個 block 的大小啦! Filesystem created: Fri Sep 5 01:49:20 2008 Last mount time: Mon Sep 22 12:09:30 2008 Last write time: Mon Sep 22 12:09:30 2008 Last checked: Fri Sep 5 01:49:20 2008 First inode: 11 Inode size: 128 <==每個 inode 的大小 Journal inode: 8 <==底下這三個與下一小節有關 Journal backup: inode blocks Journal size: 128MGroup 0: (Blocks 0-32767) <==第一個 data group 內容, 包含 block 的啟始/結束號碼Primary superblock at 0, Group descriptors at 1-1 <==超級區塊在 0 號 blockReserved GDT blocks at 2-626Block bitmap at 627 (+627), Inode bitmap at 628 (+628)Inode table at 629-1641 (+629) <==inode table 所在的 block0 free blocks, 32405 free inodes, 2 directories <==所有 block 都用完了!Free blocks:Free inodes: 12-32416 <==剩余未使用的 inode 號碼 Group 1: (Blocks 32768-65535) ....(底下省略).... # 由于數據量非常的龐大,因此鳥哥將一些信息省略輸出了!上表與你的屏幕會有點差異。 # 前半部在秀出 supberblock 的內容,包括標頭名稱(Label)以及inode/block的相關信息 # 后面則是每個 block group 的個別信息了!您可以看到各區段數據所在的號碼! # 也就是說,基本上所有的數據還是與 block 的號碼有關就是了!很重要!

如上所示,利用 dumpe2fs 可以查詢到非常多的信息,不過依內容主要可以區分為上半部是 superblock 內容,下半部則是每個 block group 的信息了。從上面的表格中我們可以觀察到這個 /dev/hdc2 規劃的 block 為 4K,第一個 block 號碼為 0 號,且 block group 內的所有信息都以 block 的號碼來表示的。然后在 superblock 中還有談到目前這個文件系統的可用 block 與 inode 數量喔!

至于 block group 的內容我們單純看 Group0 信息好了。從上表中我們可以發現:

  • Group0 所占用的 block 號碼由 0 到 32767 號,superblock 則在第 0 號的 block 區塊內!
  • 文件系統描述說明在第 1 號 block 中;
  • block bitmap 與 inode bitmap 則在 627 及 628 的 block 號碼上。
  • 至于 inode table 分布于 629-1641 的 block 號碼中!
  • 由于 (1)一個 inode 占用 128 bytes ,(2)總共有 1641 - 629 + 1(629本身) = 1013 個 block 花在 inode table 上,(3)每個 block 的大小為 4096 bytes(4K)。由這些數據可以算出 inode 的數量共有 1013 * 4096 / 128 = 32416 個 inode 啦!
  • 這個 Group0 目前沒有可用的 block 了,但是有剩余 32405 個 inode 未被使用;
  • 剩余的 inode 號碼為 12 號到 32416 號。

如果你對文件系統的詳細信息還有更多想要了解的話,那么請參考本章最后一小節的介紹喔!否則文件系統看到這里對于基礎認知您應該是已經相當足夠啦!底下則是要探討一下,那么這個文件系統概念與實際的目錄樹應用有啥關連啊?


與目錄樹的關系

由前一小節的介紹我們知道在 Linux 系統下,每個文件(不管是一般文件還是目錄文件)都會占用一個 inode ,且可依據文件內容的大小來分配多個 block 給該文件使用。而由第六章的權限說明中我們知道目錄的內容在記錄文件名,一般文件才是實際記錄數據內容的地方。那么目錄與文件在 Ext2 文件系統當中是如何記錄數據的呢?基本上可以這樣說:


  • 目錄

當我們在 Linux 下的 ext2 文件系統創建一個目錄時, ext2 會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關權限與屬性,并可記錄分配到的那塊 block 號碼;而 block 則是記錄在這個目錄下的文件名與該文件名占用的 inode 號碼數據。也就是說目錄所占用的 block 內容在記錄如下的信息:


圖1.4.1、目錄占用的 block 記錄的數據示意圖

如果想要實際觀察 root 家目錄內的文件所占用的 inode 號碼時,可以使用 ls -i 這個選項來處理:

[root@www ~]# ls -li total 92 654683 -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg 648322 -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log 648323 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog

由于每個人所使用的計算機并不相同,系統安裝時選擇的項目與 partition 都不一樣,因此你的環境不可能與我的 inode 號碼一模一樣!上表的左邊所列出的 inode 僅是鳥哥的系統所顯示的結果而已!而由這個目錄的 block 結果我們現在就能夠知道,當你使用『 ll / 』時,出現的目錄幾乎都是 1024 的倍數,為什么呢?因為每個 block 的數量都是 1K, 2K, 4K 嘛!看一下鳥哥的環境:

[root@www ~]# ll -d / /bin /boot /proc /lost+found /sbin drwxr-xr-x 23 root root 4096 Sep 22 12:09 / <==一個 4K block drwxr-xr-x 2 root root 4096 Sep 24 00:07 /bin <==一個 4K block drwxr-xr-x 4 root root 1024 Sep 4 18:06 /boot <==一個 1K block drwx------ 2 root root 16384 Sep 5 01:49 /lost+found <==四個 4K block dr-xr-xr-x 96 root root 0 Sep 22 20:07 /proc <==此目錄不占硬盤空間 drwxr-xr-x 2 root root 12288 Sep 5 12:33 /sbin <==三個 4K block

由于鳥哥的根目錄 /dev/hdc2 使用的 block 大小為 4K ,因此每個目錄幾乎都是 4K 的倍數。其中由于 /sbin 的內容比較復雜因此占用了 3 個 block ,此外,鳥哥的系統中 /boot 為獨立的 partition ,該 partition 的 block 為 1K 而已,因此該目錄就僅占用 1024 bytes 的大小啰!至于奇怪的 /proc我們在第六章就講過該目錄不占硬盤容量,所以當然耗用的 block 就是 0 啰!

Tips:
由上面的結果我們知道目錄并不只會占用一個 block 而已,也就是說:在目錄底下的文件數如果太多而導致一個 block 無法容納的下所有的檔名與 inode 對照表時,Linux 會給予該目錄多一個 block 來繼續記錄相關的數據;

  • 文件:

當我們在 Linux 下的 ext2 創建一個一般文件時, ext2 會分配一個 inode 與相對于該文件大小的 block 數量給該文件。例如:假設我的一個 block 為 4 Kbytes ,而我要創建一個 100 KBytes 的文件,那么 linux 將分配一個 inode 與 25 個 block 來儲存該文件!但同時請注意,由于 inode 僅有 12 個直接指向,因此還要多一個 block 來作為區塊號碼的記錄喔!


  • 目錄樹讀取:

好了,經過上面的說明你也應該要很清楚的知道 inode 本身并不記錄文件名,文件名的記錄是在目錄的 block 當中。因此在第六章文件與目錄的權限說明中,我們才會提到『新增/刪除/更名文件名與目錄的 w 權限有關』的特色!那么因為文件名是記錄在目錄的 block 當中,因此當我們要讀取某個文件時,就務必會經過目錄的 inode 與 block ,然后才能夠找到那個待讀取文件的 inode 號碼,最終才會讀到正確的文件的 block 內的數據。

由于目錄樹是由根目錄開始讀起,因此系統透過掛載的信息可以找到掛載點的 inode 號碼(通常一個 filesystem 的最頂層 inode號碼會由 2 號開始喔!),此時就能夠得到根目錄的 inode 內容,并依據該 inode 讀取根目錄的 block 內的文件名數據,再一層一層的往下讀到正確的檔名。

舉例來說,如果我想要讀取 /etc/passwd 這個文件時,系統是如何讀取的呢?

[root@www ~]# ll -di / /etc /etc/passwd 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 1912545 drwxr-xr-x 105 root root 12288 Oct 14 04:02 /etc 1914888 -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd

在鳥哥的系統上面與 /etc/passwd 有關的目錄與文件數據如上表所示,該文件的讀取流程為(假設讀取者身份為 vbird 這個一般身份使用者):

  • / 的 inode:
    透過掛載點的信息找到 /dev/hdc2 的 inode 號碼為 2 的根目錄 inode,且 inode 規范的權限讓我們可以讀取該 block 的內容(有 r 與 x) ;

  • / 的 block:
    經過上個步驟取得 block 的號碼,并找到該內容有 etc/ 目錄的 inode 號碼 (1912545);

  • etc/ 的 inode:
    讀取 1912545 號 inode 得知 vbird 具有 r 與 x 的權限,因此可以讀取 etc/ 的 block 內容;

  • etc/ 的 block:
    經過上個步驟取得 block 號碼,并找到該內容有 passwd 文件的 inode 號碼 (1914888);

  • passwd 的 inode:
    讀取 1914888 號 inode 得知 vbird 具有 r 的權限,因此可以讀取 passwd 的 block 內容;

  • passwd 的 block:
    最后將該 block 內容的數據讀出來。


    • filesystem 大小與磁盤讀取效能:

    另外,關于文件系統的使用效率上,當你的一個文件系統規劃的很大時,例如 100GB 這么大時,由于硬盤上面的數據總是來來去去的,所以,整個文件系統上面的文件通常無法連續寫在一起(block 號碼不會連續的意思),而是填入式的將數據填入沒有被使用的 block 當中。如果文件寫入的 block 真的分的很散,此時就會有所謂的文件數據離散的問題發生了。

    如前所述,雖然我們的 ext2 在 inode 處已經將該文件所記錄的 block 號碼都記上了,所以數據可以一次性讀取,但是如果文件真的太過離散,確實還是會發生讀取效率低落的問題。因為磁盤讀取頭還是得要在整個文件系統中來來去去的頻繁讀取!果真如此,那么可以將整個 filesystme 內的數據全部復制出來,將該 filesystem 重新格式化,再將數據給他復制回去即可解決這個問題。

    此外,如果 filesystem 真的太大了,那么當一個文件分別記錄在這個文件系統的最前面與最后面的 block 號碼中,此時會造成硬盤的機械手臂移動幅度過大,也會造成數據讀取效能的低落。而且讀取頭在搜尋整個 filesystem 時,也會花費比較多的時間去搜尋!因此, partition 的規劃并不是越大越好,而是真的要針對您的主機用途來進行規劃才行!^_^


    EXT2/EXT3 文件的存取與日志式文件系統的功能

    上一小節談到的僅是讀取而已,那么如果是新建一個文件或目錄時,我們的 Ext2 是如何處理的呢?這個時候就得要 block bitmap 及 inode bitmap 的幫忙了!假設我們想要新增一個文件,此時文件系統的行為是:

  • 先確定用戶對于欲新增文件的目錄是否具有 w 與 x 的權限,若有的話才能新增;
  • 根據 inode bitmap 找到沒有使用的 inode 號碼,并將新文件的權限/屬性寫入;
  • 根據 block bitmap 找到沒有使用中的 block 號碼,并將實際的數據寫入 block 中,且升級 inode 的 block 指向數據;
  • 將剛剛寫入的 inode 與 block 數據同步升級 inode bitmap 與 block bitmap,并升級 superblock 的內容。
  • 一般來說,我們將 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 與否) 等狀態來判斷是否強制進行數據一致性的檢查!若有需要檢查時則以e2fsck 這支程序來進行的。

    不過,這樣的檢查真的是很費時~因為要針對 metadata 區域與實際數據存放區來進行比對,呵呵~得要搜尋整個 filesystem 呢~如果你的文件系統有 100GB 以上,而且里面的文件數量又多時,哇!系統真忙碌~而且在對 Internet 提供服務的服務器主機上面,這樣的檢查真的會造成主機復原時間的拉長~真是麻煩~這也就造成后來所謂日志式文件系統的興起了。


    • 日志式文件系統 (Journaling filesystem)

    為了避免上述提到的文件系統不一致的情況發生,因此我們的前輩們想到一個方式,如果在我們的 filesystem 當中規劃出一個區塊,該區塊專門在記錄寫入或修訂文件時的步驟,那不就可以簡化一致性檢查的步驟了?也就是說:

  • 預備:當系統要寫入一個文件時,會先在日志記錄區塊中紀錄某個文件準備要寫入的信息;
  • 實際寫入:開始寫入文件的權限與數據;開始升級 metadata 的數據;
  • 結束:完成數據與 metadata 的升級后,在日志記錄區塊當中完成該文件的紀錄。
  • 在這樣的程序當中,萬一數據的紀錄過程當中發生了問題,那么我們的系統只要去檢查日志記錄區塊,就可以知道哪個文件發生了問題,針對該問題來做一致性的檢查即可,而不必針對整塊 filesystem 去檢查,這樣就可以達到快速修復 filesystem 的能力了!這就是日志式文件最基礎的功能啰~

    那么我們的 ext2 可達到這樣的功能嗎?當然可以啊!就透過 ext3 即可! ext3 是 ext2 的升級版本,并且可向下兼容 ext2 版本呢!所以啰,目前我們才建議大家,可以直接使用 ext3 這個 filesystem 啊!如果你還記得dumpe2fs 輸出的信息,可以發現 superblock 里面含有底下這樣的信息:

    Journal inode: 8 Journal backup: inode blocks Journal size: 128M

    看到了吧!透過 inode 8 號記錄 journal 區塊的 block 指向,而且具有 128MB 的容量在處理日志呢!這樣對于所謂的日志式文件系統有沒有比較有概念一點呢?^_^。如果想要知道為什么 Ext3 文件系統會更適用于目前的 Linux 系統,我們可以參考 Red Hat 公司中,首席核心開發者 Michael K. Johnson 的話:(注6)

    『為什么你想要從ext2轉換到ext3呢?有四個主要的理由:可利用性、數據完整性、速度及易于轉換』『可利用性』,他指出,這意味著從系統中止到快速重新復原而不是持續的讓e2fsck運行長時間的修復。ext3的日志式條件可以避免數據毀損的可能。他也指出:『除了寫入若干數據超過一次時,ext3往往會較快于ext2,因為ext3的日志使硬盤讀取頭的移動能更有效的進行』然而或許決定的因素還是在Johnson先生的第四個理由中。

    『它是可以輕易的從ext2變更到ext3來獲得一個強而有力的日志式文件系統而不需要重新做格式化』。『那是正確的,為了體驗一下ext3 的好處是不需要去做一種長時間的,冗長乏味的且易于產生錯誤的備份工作及重新格式化的動作』。

    Linux 文件系統的運行:

    我們現在知道了目錄樹與文件系統的關系了,但是由第零章的內容我們也知道,所有的數據都得要加載到內存后 CPU 才能夠對該數據進行處理。想一想,如果你常常編輯一個好大的文件,在編輯的過程中又頻繁的要系統來寫入到磁盤中,由于磁盤寫入的速度要比內存慢很多,因此你會常常耗在等待硬盤的寫入/讀取上。真沒效率!

    為了解決這個效率的問題,因此我們的 Linux 使用的方式是透過一個稱為異步處理 (asynchronously) 的方式。所謂的異步處理是這樣的:

    當系統加載一個文件到內存后,如果該文件沒有被更動過,則在內存區段的文件數據會被配置為干凈(clean)的。但如果內存中的文件數據被更改過了(例如你用 nano 去編輯過這個文件),此時該內存中的數據會被配置為臟的(Dirty)。此時所有的動作都還在內存中運行,并沒有寫入到磁盤中!系統會不定時的將內存中配置為『Dirty』的數據寫回磁盤,以保持磁盤與內存數據的一致性。你也可以利用第五章談到的 sync命令來手動強迫寫入磁盤。

    我們知道內存的速度要比硬盤快的多,因此如果能夠將常用的文件放置到內存當中,這不就會添加系統性能嗎?沒錯!是有這樣的想法!因此我們 Linux 系統上面文件系統與內存有非常大的關系喔:

    • 系統會將常用的文件數據放置到主存儲器的緩沖區,以加速文件系統的讀/寫;
    • 承上,因此 Linux 的物理內存最后都會被用光!這是正常的情況!可加速系統效能;
    • 你可以手動使用 sync 來強迫內存中配置為 Dirty 的文件回寫到磁盤中;
    • 若正常關機時,關機命令會主動呼叫 sync 來將內存的數據回寫入磁盤內;
    • 但若不正常關機(如跳電、死機或其他不明原因),由于數據尚未回寫到磁盤內,因此重新啟動后可能會花很多時間在進行磁盤檢驗,甚至可能導致文件系統的損毀(非磁盤損毀)。

    掛載點的意義 (mount point):

    每個 filesystem 都有獨立的 inode / block / superblock 等信息,這個文件系統要能夠鏈接到目錄樹才能被我們使用。將文件系統與目錄樹結合的動作我們稱為『掛載』。關于掛載的一些特性我們在第三章稍微提過,重點是:掛載點一定是目錄,該目錄為進入該文件系統的入口。因此并不是你有任何文件系統都能使用,必須要『掛載』到目錄樹的某個目錄后,才能夠使用該文件系統的。

    舉例來說,如果你是依據鳥哥的方法安裝你的 CentOS 5.x 的話,那么應該會有三個掛載點才是,分別是 /, /boot, /home 三個 (鳥哥的系統上對應的裝置文件名為 /dev/hdc2, /dev/hdc1, /dev/hdc3)。那如果觀察這三個目錄的 inode 號碼時,我們可以發現如下的情況:

    [root@www ~]# ls -lid / /boot /home 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 2 drwxr-xr-x 4 root root 1024 Sep 4 18:06 /boot 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home

    看到了吧!由于 filesystem 最頂層的目錄之 inode 一般為 2 號,因此可以發現 /, /boot, /home 為三個不同的 filesystem 啰!(因為每一行的文件屬性并不相同,且三個目錄的掛載點也均不相同之故。)我們在第七章一開始的路徑中曾經提到根目錄下的 . 與 .. 是相同的東西,因為權限是一模一樣嘛!如果使用文件系統的觀點來看,同一個 filesystem 的某個 inode 只會對應到一個文件內容而已(因為一個文件占用一個 inode 之故),因此我們可以透過判斷 inode 號碼來確認不同文件名是否為相同的文件喔!所以可以這樣看:

    [root@www ~]# ls -ild / /. /.. 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /. 2 drwxr-xr-x 23 root root 4096 Sep 22 12:09 /..

    上面的信息中由于掛載點均為 / ,因此三個文件 (/, /., /..) 均在同一個 filesystem 內,而這三個文件的inode 號碼均為 2 號,因此這三個檔名都指向同一個 inode 號碼,當然這三個文件的內容也就完全一模一樣了!也就是說,根目錄的上一級 (/..) 就是他自己!這么說,看的懂了嗎? ^_^


    其他 Linux 支持的文件系統與 VFS

    雖然 Linux 的標準文件系統是 ext2 ,且還有添加了日志功能的 ext3 ,事實上,Linux 還有支持很多文件系統格式的,尤其是最近這幾年推出了好幾種速度很快的日志式文件系統,包括 SGI 的 XFS 文件系統,可以適用更小型文件的 Reiserfs 文件系統,以及 Windows 的 FAT 文件系統等等,都能夠被 Linux 所支持喔!常見的支持文件系統有:

    • 傳統文件系統:ext2 / minix / MS-DOS / FAT (用 vfat 模塊) / iso9660 (光盤)等等;
    • 日志式文件系統: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
    • 網絡文件系統: NFS / SMBFS

    想要知道你的 Linux 支持的文件系統有哪些,可以察看底下這個目錄:

    [root@www ~]# ls -l /lib/modules/$(uname -r)/kernel/fs

    系統目前已加載到內存中支持的文件系統則有:

    [root@www ~]# cat /proc/filesystems
    • Linux VFS (Virtual Filesystem Switch)

    了解了我們使用的文件系統之后,再來則是要提到,那么 Linux 的核心又是如何管理這些認識的文件系統呢?其實,整個 Linux 的系統都是透過一個名為 Virtual Filesystem Switch 的核心功能去讀取 filesystem 的。 也就是說,整個 Linux 認識的 filesystem 其實都是 VFS 在進行管理,我們使用者并不需要知道每個 partition 上頭的 filesystem 是什么~ VFS 會主動的幫我們做好讀取的動作呢~

    假設你的 / 使用的是 /dev/hda1 ,用 ext3 ,而 /home 使用 /dev/hda2 ,用 reiserfs ,那么你取用 /home/dmtsai/.bashrc 時,有特別指定要用的什么文件系統的模塊來讀取嗎?應該是沒有吧!這個就是 VFS 的功能啦!透過這個 VFS 的功能來管理所有的 filesystem,省去我們需要自行配置讀取文件系統的定義啊~方便很多!整個 VFS 可以約略用下圖來說明:


    圖 1.8.1、VFS 文件系統的示意圖

    老實說,文件系統真的不好懂!如果你想要對文件系統有更深入的了解,文末的相關連結(注7)務必要參考參考才好喔!鳥哥有找了一些數據放置于這里:

    • Ext2/Ext3 文件系統:http://vbird.dic.ksu.edu.tw/linux_basic/1010appendix_B.php

    有興趣的朋友務必要前往參考參考才好!


    文件系統的簡單操作

    稍微了解了文件系統后,再來我們得要知道如何查詢整體文件系統的總容量與每個目錄所占用的容量啰!此外,前兩章談到的文件類型中尚未講的很清楚的連結檔 (Link file) 也會在這一小節當中介紹的。


    磁盤與目錄的容量:

    現在我們知道磁盤的整體數據是在 superblock 區塊中,但是每個各別文件的容量則在 inode 當中記載的。那在文字接口底下該如何叫出這幾個數據呢?底下就讓我們來談一談這兩個命令:

    • df:列出文件系統的整體磁盤使用量;
    • du:評估文件系統的磁盤使用量(常用在推估目錄所占容量)


    • df
    [root@www ~]# df [-ahikHTm] [目錄或文件名] 選項與參數: -a :列出所有的文件系統,包括系統特有的 /proc 等文件系統; -k :以 KBytes 的容量顯示各文件系統; -m :以 MBytes 的容量顯示各文件系統; -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示; -H :以 M=1000K 取代 M=1024K 的進位方式; -T :連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出; -i :不用硬盤容量,而以 inode 的數量來顯示范例一:將系統內所有的 filesystem 列出來! [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3823112 5585444 41% / /dev/hdc3 4956316 141376 4559108 4% /home /dev/hdc1 101086 11126 84741 12% /boot tmpfs 371332 0 371332 0% /dev/shm # 在 Linux 底下如果 df 沒有加任何選項,那么默認會將系統內所有的 # (不含特殊內存內的文件系統與 swap) 都以 1 Kbytes 的容量來列出來! # 至于那個 /dev/shm 是與內存有關的掛載,先不要理他!范例二:將容量結果以易讀的容量格式顯示出來 [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% / /dev/hdc3 4.8G 139M 4.4G 4% /home /dev/hdc1 99M 11M 83M 12% /boot tmpfs 363M 0 363M 0% /dev/shm # 不同于范例一,這里會以 G/M 等容量格式顯示出來,比較容易看啦!范例三:將系統內的所有特殊文件格式及名稱都列出來 [root@www ~]# df -aT Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/hdc2 ext3 9920624 3823112 5585444 41% / proc proc 0 0 0 - /proc sysfs sysfs 0 0 0 - /sys devpts devpts 0 0 0 - /dev/pts /dev/hdc3 ext3 4956316 141376 4559108 4% /home /dev/hdc1 ext3 101086 11126 84741 12% /boot tmpfs tmpfs 371332 0 371332 0% /dev/shm none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs # 系統里面其實還有很多特殊的文件系統存在的。那些比較特殊的文件系統幾乎 # 都是在內存當中,例如 /proc 這個掛載點。因此,這些特殊的文件系統 # 都不會占據硬盤空間喔! ^_^范例四:將 /etc 底下的可用的磁盤容量以易讀的容量格式顯示 [root@www ~]# df -h /etc Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.4G 41% / # 這個范例比較有趣一點啦,在 df 后面加上目錄或者是文件時, df # 會自動的分析該目錄或文件所在的 partition ,并將該 partition 的容量顯示出來, # 所以,您就可以知道某個目錄底下還有多少容量可以使用了! ^_^范例五:將目前各個 partition 當中可用的 inode 數量列出 [root@www ~]# df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2.5M 147K 2.3M 6% / /dev/hdc3 1.3M 46 1.3M 1% /home /dev/hdc1 26K 34 26K 1% /boot tmpfs 91K 1 91K 1% /dev/shm # 這個范例則主要列出可用的 inode 剩余量與總容量。分析一下與范例一的關系, # 你可以清楚的發現到,通常 inode 的數量剩余都比 block 還要多呢

    先來說明一下范例一所輸出的結果信息為:

    • Filesystem:代表該文件系統是在哪個 partition ,所以列出裝置名稱;
    • 1k-blocks:說明底下的數字單位是 1KB 呦!可利用 -h 或 -m 來改變容量;
    • Used:顧名思義,就是使用掉的硬盤空間啦!
    • Available:也就是剩下的磁盤空間大小;
    • Use%:就是磁盤的使用率啦!如果使用率高達 90% 以上時,最好需要注意一下了,免得容量不足造成系統問題喔!(例如最容易被灌爆的 /var/spool/mail 這個放置郵件的磁盤)
    • Mounted on:就是磁盤掛載的目錄所在啦!(掛載點啦!)

    由于 df 主要讀取的數據幾乎都是針對一整個文件系統,因此讀取的范圍主要是在 Superblock 內的信息,所以這個命令顯示結果的速度非常的快速!在顯示的結果中你需要特別留意的是那個根目錄的剩余容量!因為我們所有的數據都是由根目錄衍生出來的,因此當根目錄的剩余容量剩下 0 時,那你的 Linux 可能就問題很大了。

    Tips:
    說個陳年老笑話!鳥哥還在念書時,別的研究室有個管理 Sun 工作站的研究生發現,他的硬盤明明還有好幾 GB ,但是就是沒有辦法將光盤內幾 MB 的數據 copy 進去,他就去跟老板講說機器壞了!嘿!明明才來維護過幾天而已為何會壞了!結果他老板就將維護商叫來罵了 2 小時左右吧!

    后來,維護商發現原來硬盤的『總空間』還有很多,只是某個分割槽填滿了,偏偏該研究生就是要將數據 copy 去那個分割槽!呵呵!后來那個研究生就被命令『再也不許碰 Sun 主機』了~~

    另外需要注意的是,如果使用 -a 這個參數時,系統會出現 /proc 這個掛載點,但是里面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統所需要加載的系統數據,而且是掛載在『內存當中』的,所以當然沒有占任何的硬盤空間啰!

    至于那個 /dev/shm/ 目錄,其實是利用內存虛擬出來的磁盤空間!由于是透過內存仿真出來的磁盤,因此你在這個目錄底下創建任何數據文件時,訪問速度是非常快速的!(在內存內工作)不過,也由于他是內存仿真出來的,因此這個文件系統的大小在每部主機上都不一樣,而且創建的東西在下次啟動時就消失了!因為是在內存中嘛!


    • du
    [root@www ~]# du [-ahskm] 文件或目錄名稱 選項與參數: -a :列出所有的文件與目錄容量,因為默認僅統計目錄底下的文件量而已。 -h :以人們較易讀的容量格式 (G/M) 顯示; -s :列出總量而已,而不列出每個各別的目錄占用容量; -S :不包括子目錄下的總計,與 -s 有點差別。 -k :以 KBytes 列出容量顯示; -m :以 MBytes 列出容量顯示;范例一:列出目前目錄下的所有文件容量 [root@www ~]# du 8 ./test4 <==每個目錄都會列出來 8 ./test2 ....中間省略.... 12 ./.gconfd <==包括隱藏文件的目錄 220 . <==這個目錄(.)所占用的總量 # 直接輸入 du 沒有加任何選項時,則 du 會分析『目前所在目錄』 # 的文件與目錄所占用的硬盤空間。但是,實際顯示時,僅會顯示目錄容量(不含文件), # 因此 . 目錄有很多文件沒有被列出來,所以全部的目錄相加不會等于 . 的容量喔! # 此外,輸出的數值數據為 1K 大小的容量單位。范例二:同范例一,但是將文件的容量也列出來 [root@www ~]# du -a 12 ./install.log.syslog <==有文件的列表了 8 ./.bash_logout 8 ./test4 8 ./test2 ....中間省略.... 12 ./.gconfd 220 .范例三:檢查根目錄底下每個目錄所占用的容量 [root@www ~]# du -sm /* 7 /bin 6 /boot .....中間省略.... 0 /proc .....中間省略.... 1 /tmp 3859 /usr <==系統初期最大就是他了啦! 77 /var # 這是個很常被使用的功能~利用通配符 * 來代表每個目錄, # 如果想要檢查某個目錄下,哪個次目錄占用最大的容量,可以用這個方法找出來 # 值得注意的是,如果剛剛安裝好 Linux 時,那么整個系統容量最大的應該是 /usr # 而 /proc 雖然有列出容量,但是那個容量是在內存中,不占硬盤空間。

    與 df 不一樣的是,du 這個命令其實會直接到文件系統內去搜尋所有的文件數據,所以上述第三個范例命令的運行會運行一小段時間!此外,在默認的情況下,容量的輸出是以 KB 來設計的,如果你想要知道目錄占了多少 MB ,那么就使用 -m 這個參數即可啰!而,如果你只想要知道該目錄占了多少容量的話,使用 -s 就可以啦!

    至于 -S 這個選項部分,由于 du 默認會將所有文件的大小均列出,因此假設你在 /etc 底下使用 du 時,所有的文件大小,包括 /etc 底下的次目錄容量也會被計算一次。然后最終的容量 (/etc) 也會加總一次,因此很多朋友都會誤會 du 分析的結果不太對勁。所以啰,如果想要列出某目錄下的全部數據,或許也可以加上 -S 的選項,減少次目錄的加總喔!


    實體鏈接與符號鏈接: ln

    關于鏈接(link)數據我們第六章的Linux文件屬性及Linux文件種類與擴展名當中提過一些信息,不過當時由于尚未講到文件系統,因此無法較完整的介紹連結檔啦。不過在上一小節談完了文件系統后,我們可以來了解一下連結檔這玩意兒了。

    在 Linux 底下的連結檔有兩種,一種是類似 Windows 的快捷方式功能的文件,可以讓你快速的鏈接到目標文件(或目錄);另一種則是透過文件系統的 inode 連結來產生新檔名,而不是產生新文件!這種稱為實體鏈接 (hard link)。這兩種玩意兒是完全不一樣的東西呢!現在就分別來談談。


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

    在前一小節當中,我們知道幾件重要的信息,包括:

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

    也就是說,其實文件名只與目錄有關,但是文件內容則與 inode 有關。那么想一想,有沒有可能有多個檔名對應到同一個 inode 號碼呢?有的!那就是 hard link 的由來。所以簡單的說:hard link 只是在某個目錄下新增一筆檔名鏈接到某 inode 號碼的關連記錄而已。

    舉個例子來說,假設我系統有個 /root/crontab 他是 /etc/crontab 的實體鏈接,也就是說這兩個檔名連結到同一個 inode ,自然這兩個文件名的所有相關信息都會一模一樣(除了文件名之外)。實際的情況可以如下所示:

    [root@www ~]# ln /etc/crontab . <==創建實體鏈接的命令 [root@www ~]# ll -i /etc/crontab /root/crontab 1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab 1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /root/crontab

    你可以發現兩個檔名都連結到 1912701 這個 inode 號碼,所以您瞧瞧,是否文件的權限/屬性完全一樣呢?因為這兩個『檔名』其實是一模一樣的『文件』啦!而且你也會發現第二個字段由原本的 1 變成 2 了!那個字段稱為『連結』,這個字段的意義為:『有多少個檔名鏈接到這個 inode 號碼』的意思。如果將讀取到正確數據的方式畫成示意圖,就類似如下畫面:


    圖 2.2.1、實體鏈接的文件讀取示意圖

    上圖的意思是,你可以透過 1 或 2 的目錄之 inode 指定的 block 找到兩個不同的檔名,而不管使用哪個檔名均可以指到 real 那個 inode去讀取到最終數據!那這樣有什么好處呢?最大的好處就是『安全』!如同上圖中,如果你將任何一個『檔名』刪除,其實 inode 與 block 都還是存在的!此時你可以透過另一個『檔名』來讀取到正確的文件數據喔!此外,不論你使用哪個『檔名』來編輯,最終的結果都會寫入到相同的 inode 與 block 中,因此均能進行數據的修改哩!

    一般來說,使用 hard link 配置鏈接文件時,磁盤的空間與 inode 的數目都不會改變!我們還是由圖 2.2.1 來看,由圖中可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連數據而已,既不會添加 inode 也不會耗用 block 數量哩!

    Tips:
    hard link 的制作中,其實還是可能會改變系統的 block 的,那就是當你新增這筆數據卻剛好將目錄的 block 填滿時,就可能會新加一個 block 來記錄文件名關連性,而導致磁盤空間的變化!不過,一般 hard link 所用掉的關連數據量很小,所以通常不會改變 inode 與磁盤空間的大小喔!

    由圖 2.2.1 其實我們也能夠知道,事實上 hard link 應該僅能在單一文件系統中進行的,應該是不能夠跨文件系統才對!因為圖 2.2.1 就是在同一個 filesystem 上嘛!所以 hard link 是有限制的:

    • 不能跨 Filesystem;
    • 不能 link 目錄。

    不能跨 Filesystem 還好理解,那不能 hard link 到目錄又是怎么回事呢?這是因為如果使用 hard link 鏈接到目錄時,鏈接的數據需要連同被鏈接目錄底下的所有數據都創建鏈接,舉例來說,如果你要將 /etc使用實體鏈接創建一個 /etc_hd 的目錄時,那么在 /etc_hd 底下的所有檔名同時都與 /etc底下的檔名要創建 hard link 的,而不是僅連結到 /etc_hd 與 /etc 而已。并且,未來如果需要在 /etc_hd 底下創建新文件時,連帶的, /etc 底下的數據又得要創建一次 hard link ,因此造成環境相當大的復雜度。所以啰,目前 hard link 對于目錄暫時還是不支持的啊!


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

    相對于 hard link , Symbolic link 可就好理解多了,基本上,Symbolic link 就是在創建一個獨立的文件,而這個文件會讓數據的讀取指向他 link 的那個文件的檔名!由于只是利用文件來做為指向的動作,所以,當來源檔被刪除之后,symbolic link 的文件會『開不了』,會一直說『無法開啟某文件!』。實際上就是找不到原始『檔名』而已啦!

    舉例來說,我們先創建一個符號鏈接文件鏈接到 /etc/crontab 去看看:

    [root@www ~]# ln -s /etc/crontab crontab2 [root@www ~]# ll -i /etc/crontab /root/crontab2 1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab 654687 lrwxrwxrwx 1 root root 12 Oct 22 13:58 /root/crontab2 -> /etc/crontab

    由上表的結果我們可以知道兩個文件指向不同的 inode 號碼,當然就是兩個獨立的文件存在!而且連結檔的重要內容就是他會寫上目標文件的『文件名』,你可以發現為什么上表中連結檔的大小為 12 bytes 呢?因為箭頭(-->)右邊的檔名『/etc/crontab』總共有 12 個英文,每個英文占用 1 個 byes ,所以文件大小就是 12bytes了!

    關于上述的說明,我們以如下圖示來解釋:


    圖 2.2.2、符號鏈接的文件讀取示意圖

    由 1 號 inode 讀取到連結檔的內容僅有檔名,根據檔名鏈接到正確的目錄去取得目標文件的 inode ,最終就能夠讀取到正確的數據了。你可以發現的是,如果目標文件(/etc/crontab)被刪除了,那么整個環節就會無法繼續進行下去,所以就會發生無法透過連結檔讀取的問題了!

    這里還是得特別留意,這個 Symbolic Link 與 Windows 的快捷方式可以給他劃上等號,由 Symbolic link 所創建的文件為一個獨立的新的文件,所以會占用掉 inode 與 block喔!


    由上面的說明來看,似乎 hard link 比較安全,因為即使某一個目錄下的關連數據被殺掉了,也沒有關系,只要有任何一個目錄下存在著關連數據,那么該文件就不會不見!舉上面的例子來說,我的/etc/crontab 與 /root/crontab 指向同一個文件,如果我刪除了 /etc/crontab這個文件,該刪除的動作其實只是將 /etc 目錄下關于 crontab 的關連數據拿掉而已,crontab 所在的 inode 與 block 其實都沒有被變動喔!

    不過由于 Hard Link 的限制太多了,包括無法做『目錄』的 link ,所以在用途上面是比較受限的!反而是 Symbolic Link 的使用方面較廣喔!好了,說的天花亂墜,看你也差不多快要昏倒了!沒關系,實作一下就知道怎么回事了!要制作連結檔就必須要使用ln 這個命令呢!

    [root@www ~]# ln [-sf] 來源文件 目標文件 選項與參數: -s :如果不加任何參數就進行連結,那就是hard link,至于 -s 就是symbolic link -f :如果 目標文件 存在時,就主動的將目標文件直接移除后再創建!范例一:將 /etc/passwd 復制到 /tmp 底下,并且觀察 inode 與 block [root@www ~]# cd /tmp [root@www tmp]# cp -a /etc/passwd . [root@www tmp]# du -sb ; df -i . 18340 . <==先注意一下這里的容量是多少! Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149738 2411126 6% / # 利用 du 與 df 來檢查一下目前的參數~那個 du -sb # 是計算整個 /tmp 底下有多少 bytes 的容量啦!范例二:將 /tmp/passwd 制作 hard link 成為 passwd-hd 文件,并觀察文件與容量 [root@www tmp]# ln passwd passwd-hd [root@www tmp]# du -sb ; df -i . 18340 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149738 2411126 6% / # 仔細看,即使多了一個文件在 /tmp 底下,整個 inode 與 block 的容量并沒有改變![root@www tmp]# ls -il passwd* 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd # 原來是指向同一個 inode 啊!這是個重點啊!另外,那個第二欄的連結數也會添加!范例三:將 /tmp/passwd 創建一個符號鏈接 [root@www tmp]# ln -s passwd passwd-so [root@www tmp]# ls -li passwd* 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd 586401 lrwxrwxrwx 1 root root 6 Oct 22 14:18 passwd-so -> passwd # passwd-so 指向的 inode number 不同了!這是一個新的文件~這個文件的內容是指向 # passwd 的。passwd-so 的大小是 6bytes ,因為 passwd 共有六個字符之故[root@www tmp]# du -sb ; df -i . 18346 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149739 2411125 6% / # 呼呼!整個容量與 inode 使用數都改變啰~確實如此啊!范例四:刪除源文件 passwd ,其他兩個文件是否能夠開啟? [root@www tmp]# rm passwd [root@www tmp]# cat passwd-hd ......正常顯示完畢! [root@www tmp]# cat passwd-so cat: passwd-so: No such file or directory [root@www tmp]# ll passwd* -rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd-hd lrwxrwxrwx 1 root root 6 Oct 22 14:18 passwd-so -> passwd # 怕了吧!符號鏈接果然無法開啟!另外,如果符號鏈接的目標文件不存在, # 其實檔名的部分就會有特殊的顏色顯示喔!
    Tips:
    還記得第六章當中,我們提到的 /tmp 這個目錄是干嘛用的嗎?是給大家作為緩存盤用的啊!所以,您會發現,過去我們在進行測試時,都會將數據移動到 /tmp 底下去練習~嘿嘿!因此,有事沒事,記得將 /tmp 底下的一些怪異的數據清一清先!

    要注意啰!使用 ln 如果不加任何參數的話,那么就是 Hard Link啰!如同范例二的情況,添加了 hard link 之后,可以發現使用 ls -l 時,顯示的 link 那一欄屬性添加了!而如果這個時候砍掉 passwd 會發生什么事情呢?passwd-hd 的內容還是會跟原來 passwd 相同,但是 passwd-so 就會找不到該文件啦!

    而如果 ln 使用 -s 的參數時,就做成差不多是 Windows 底下的『快捷方式』的意思。當你修改 Linux 下的 symbolic link 文件時,則更動的其實是『原始檔』,所以不論你的這個原始檔被連結到哪里去,只要你修改了連結檔,原始檔就跟著變啰!以上面為例,由于你使用 -s 的參數創建一個名為 passwd-so 的文件,則你修改 passwd-so 時,其內容與 passwd 完全相同,并且,當你按下儲存之后,被改變的將是 passwd 這個文件!

    此外,如果你做了底下這樣的連結:

    ln -s /bin /root/bin

    那么如果你進入 /root/bin 這個目錄下,『請注意呦!該目錄其實是 /bin 這個目錄,因為你做了連結檔了!』所以,如果你進入 /root/bin 這個剛剛創建的鏈接目錄,并且將其中的數據殺掉時,嗯! /bin 里面的數據就通通不見了!這點請千萬注意!所以趕緊利用『rm /root/bin 』將這個連結檔刪除吧!

    基本上, Symbolic link 的用途比較廣,所以您要特別留意 symbolic link的用法呢!未來一定還會常常用到的啦!


    • 關于目錄的 link 數量:

    或許您已經發現了,那就是,當我們以 hard link 進行『文件的連結』時,可以發現,在 ls -l 所顯示的第二字段會添加一才對,那么請教,如果創建目錄時,他默認的 link 數量會是多少?讓我們來想一想,一個『空目錄』里面至少會存在些什么?呵呵!就是存在 . 與 .. 這兩個目錄啊!那么,當我們創建一個新目錄名稱為 /tmp/testing 時,基本上會有三個東西,那就是:

    • /tmp/testing
    • /tmp/testing/.
    • /tmp/testing/..

    而其中 /tmp/testing 與 /tmp/testing/. 其實是一樣的!都代表該目錄啊~而 /tmp/testing/.. 則代表 /tmp 這個目錄,所以說,當我們創建一個新的目錄時,『新的目錄的 link 數為 2 ,而上一級目錄的 link 數則會添加 1』不信的話,我們來作個測試看看:

    [root@www ~]# ls -ld /tmp drwxrwxrwt 5 root root 4096 Oct 22 14:22 /tmp [root@www ~]# mkdir /tmp/testing1 [root@www ~]# ls -ld /tmp drwxrwxrwt 6 root root 4096 Oct 22 14:37 /tmp [root@www ~]# ls -ld /tmp/testing1 drwxr-xr-x 2 root root 4096 Oct 22 14:37 /tmp/testing1

    瞧!原本的所謂上一級目錄 /tmp 的 link 數量由 5 添加為 6 ,至于新目錄 /tmp/testing 則為 2 ,這樣可以理解目錄的 link 數量的意義了嗎? ^_^


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

    對于一個系統管理者( root )而言,磁盤的的管理是相當重要的一環,尤其近來硬盤已經漸漸的被當成是消耗品了..... 如果我們想要在系統里面新增一顆硬盤時,應該有哪些動作需要做的呢:

  • 對磁盤進行分割,以創建可用的 partition ;
  • 對該 partition 進行格式化( format ),以創建系統可用的 filesystem;
  • 若想要仔細一點,則可對剛剛創建好的 filesystem 進行檢驗;
  • 在 Linux 系統上,需要創建掛載點 ( 亦即是目錄 ),并將他掛載上來;
  • 當然啰,在上述的過程當中,還有很多需要考慮的,例如磁盤分區槽 (partition) 需要定多大?是否需要加入 journal 的功能?inode 與 block 的數量應該如何規劃等等的問題。但是這些問題的決定,都需要與你的主機用途來加以考慮的~所以,在這個小節里面,鳥哥僅會介紹幾個動作而已,更詳細的配置值,則需要以你未來的經驗來參考啰!


    磁盤分區: fdisk
    [root@www ~]# fdisk [-l] 裝置名稱 選項與參數: -l :輸出后面接的裝置所有的 partition 內容。若僅有 fdisk -l 時,則系統將會把整個系統內能夠搜尋到的裝置的 partition 均列出來。范例:找出你系統中的根目錄所在磁盤,并查閱該硬盤內的相關信息 [root@www ~]# df / <==注意:重點在找出磁盤文件名而已 Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc2 9920624 3823168 5585388 41% /[root@www ~]# fdisk /dev/hdc <==仔細看,不要加上數字喔! The number of cylinders for this disk is set to 5005. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)Command (m for help): <==等待你的輸入!

    由于每個人的環境都不一樣,因此每部主機的磁盤數量也不相同。所以你可以先使用 df 這個命令找出可用磁盤文件名,然后再用 fdisk 來查閱。在你進入 fdisk 這支程序的工作畫面后,如果您的硬盤太大的話(通常指磁柱數量多于 1024 以上),就會出現如上信息。這個信息僅是在告知你,因為某些舊版的軟件與操作系統并無法支持大于 1024 磁柱 (cylinter) 后的扇區使用,不過我們新版的 Linux 是沒問題啦!底下繼續來看看 fdisk 內如何操作相關動作吧!

    Command (m for help): m <== 輸入 m 后,就會看到底下這些命令介紹 Command actiona toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partition <==刪除一個partitionl list known partition typesm print this menun add a new partition <==新增一個partitiono create a new empty DOS partition tablep print the partition table <==在屏幕上顯示分割表q quit without saving changes <==不儲存離開fdisk程序s create a new empty Sun disklabelt change a partition's system idu change display/entry unitsv verify the partition tablew write table to disk and exit <==將剛剛的動作寫入分割表x extra functionality (experts only)

    老實說,使用 fdisk 這支程序是完全不需要背命令的!如同上面的表格中,你只要按下 m 就能夠看到所有的動作!比較重要的動作在上面已經用底線畫出來了,你可以參考看看。其中比較不一樣的是『q 與 w』這兩個玩意兒!不管你進行了什么動作,只要離開 fdisk 時按下『q』,那么所有的動作『都不會生效!』相反的,按下『w』就是動作生效的意思。所以,你可以隨便玩 fdisk ,只要離開時按下的是『q』即可。 ^_^!好了,先來看看分割表信息吧!

    Command (m for help): p <== 這里可以輸出目前磁盤的狀態Disk /dev/hdc: 41.1 GB, 41174138880 bytes <==這個磁盤的文件名與容量 255 heads, 63 sectors/track, 5005 cylinders <==磁頭、扇區與磁柱大小 Units = cylinders of 16065 * 512 = 8225280 bytes <==每個磁柱的大小Device Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux /dev/hdc3 1289 1925 5116702+ 83 Linux /dev/hdc4 1926 5005 24740100 5 Extended /dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris # 裝置文件名 啟動區否 開始磁柱 結束磁柱 1K大小容量 磁盤分區槽內的系統Command (m for help): q # 想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊!

    使用『 p 』可以列出目前這顆磁盤的分割表信息,這個信息的上半部在顯示整體磁盤的狀態。以鳥哥這顆磁盤為例,這個磁盤共有 41.1GB 左右的容量,共有 5005 個磁柱,每個磁柱透過 255 個磁頭在管理讀寫,每個磁頭管理 63 個扇區,而每個扇區的大小均為 512bytes ,因此每個磁柱為『 255*63*512 = 16065*512 = 8225280bytes 』。

    下半部的分割表信息主要在列出每個分割槽的個別信息項目。每個項目的意義為:

    • Device:裝置文件名,依據不同的磁盤接口/分割槽位置而變。
    • Boot:是否為啟動引導塊?通常 Windows 系統的 C 需要這塊!
    • Start, End:這個分割槽在哪個磁柱號碼之間,可以決定此分割槽的大小;
    • Blocks:就是以 1K 為單位的容量。如上所示,/dev/hdc1 大小為104391K = 102MB
    • ID, System:代表這個分割槽內的文件系統應該是啥!不過這個項目只是一個提示而已,不見得真的代表此分割槽內的文件系統喔!

    從上表我們可以發現幾件事情:

    • 整部磁盤還可以進行額外的分割,因為最大磁柱為 5005 ,但只使用到 2052 號而已;
    • /dev/hdc5 是由 /dev/hdc4 分割出來的,因為 /dev/hdc4 為 Extended,且 /dev/hdc5 磁柱號碼在 /dev/hdc4 之內;

    fdisk 還可以直接秀出系統內的所有 partition 喔!舉例來說,鳥哥剛剛插入一個 U盤 磁盤到這部 Linux 系統中,那該如何觀察 (1)這個磁盤的代號與 (2)這個磁盤的分割槽呢?

    范例:查閱目前系統內的所有 partition 有哪些? [root@www ~]# fdisk -l Disk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux /dev/hdc3 1289 1925 5116702+ 83 Linux /dev/hdc4 1926 5005 24740100 5 Extended /dev/hdc5 1926 2052 1020096 82 Linux swap / SolarisDisk /dev/sda: 8313 MB, 8313110528 bytes 59 heads, 58 sectors/track, 4744 cylinders Units = cylinders of 3422 * 512 = 1752064 bytesDevice Boot Start End Blocks Id System /dev/sda1 1 4745 8118260 b W95 FAT32

    由上表的信息我們可以看到我有兩顆磁盤,磁盤文件名為『/dev/hdc 與 /dev/sda』,/dev/hdc 已經在上面談過了,至于 /dev/sda 則有 8GB 左右的容量,且全部的磁柱都已經分割給 /dev/sda1 ,該文件系統應該為 Windows 的 FAT 文件系統。這樣很容易查閱到分割方面的信息吧!

    這個 fdisk 只有 root 才能運行,此外,請注意,使用的『裝置文件名』請不要加上數字,因為 partition 是針對『整個硬盤裝置』而不是某個 partition 呢!所以運行『 fdisk /dev/hdc1 』就會發生錯誤啦!要使用 fdisk /dev/hdc 才對!那么我們知道可以利用 fdisk 來查閱硬盤的 partition 信息外,底下再來說一說進入 fdisk 之后的幾個常做的工作!

    Tips:
    再次強調,你可以使用 fdisk 在您的硬盤上面胡搞瞎搞的進行實際操作,都不打緊,但是請『千萬記住,不要按下 w 即可!』離開的時候按下 q 就萬事無妨啰!

    • 刪除磁盤分區槽

    如果你是按照鳥哥建議的方式去安裝你的 CentOS ,那么你的磁盤應該會預留一塊容量來做練習的。實際練習新增硬盤之前,我們先來玩一玩恐怖的刪除好了~如果想要測試一下如何將你的 /dev/hdc 全部的分割槽刪除,應該怎么做?

  • fdisk /dev/hdc :先進入 fdisk 畫面;
  • p :先看一下分割槽的信息,假設要殺掉 /dev/hdc1;
  • d :這個時候會要你選擇一個 partition ,就選 1 啰!
  • w (or) q :按 w 可儲存到磁盤數據表中,并離開 fdisk ;當然啰,如果你反悔了,呵呵,直接按下 q 就可以取消剛剛的刪除動作了!
  • # 練習一: 先進入 fdisk 的畫面當中去! [root@www ~]# fdisk /dev/hdc# 練習二: 先看看整個分割表的情況是如何 Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux /dev/hdc3 1289 1925 5116702+ 83 Linux /dev/hdc4 1926 5005 24740100 5 Extended /dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris# 練習三: 按下 d 給他刪除吧! Command (m for help): d Partition number (1-5): 4Command (m for help): d Partition number (1-4): 3Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux # 因為 /dev/hdc5 是由 /dev/hdc4 所衍生出來的邏輯分割槽,因此 /dev/hdc4 被刪除, # /dev/hdc5 就自動不見了!最終就會剩下兩個分割槽而已喔!Command (m for help): q # 鳥哥這里僅是做一個練習而已,所以,按下 q 就能夠離開啰~


    • 練習新增磁盤分區槽

    新增磁盤分區槽有好多種情況,因為新增 Primary / Extended / Logical 的顯示結果都不太相同。底下我們先將 /dev/hdc 全部刪除成為干凈未分割的磁盤,然后依序新增給大家瞧瞧!

    # 練習一: 進入 fdisk 的分割軟件畫面中,并刪除所有分割槽: [root@www ~]# fdisk /dev/hdc Command (m for help): d Partition number (1-5): 4Command (m for help): d Partition number (1-4): 3Command (m for help): d Partition number (1-4): 2Command (m for help): d Selected partition 1 # 由于最后僅剩下一個 partition ,因此系統主動選取這個 partition 刪除去!# 練習二: 開始新增,我們先新增一個 Primary 的分割槽,且指定為 4 號看看! Command (m for help): n Command action <==因為是全新磁盤,因此只會問extended/primary而已e extendedp primary partition (1-4) p <==選擇 Primary 分割槽 Partition number (1-4): 4 <==配置為 4 號! First cylinder (1-5005, default 1): <==直接按下[enter]按鍵決定! Using default value 1 <==啟始磁柱就選用默認值! Last cylinder or +size or +sizeM or +sizeK (1-5005, default 5005): +512M # 這個地方有趣了!我們知道 partition 是由 n1 到 n2 的磁柱號碼 (cylinder), # 但磁柱的大小每顆磁盤都不相同,這個時候可以填入 +512M 來讓系統自動幫我們找出 # 『最接近 512M 的那個 cylinder 號碼』!因為不可能剛好等于 512MBytes 啦! # 如上所示:這個地方輸入的方式有兩種: # 1) 直接輸入磁柱的號碼,你得要自己計算磁柱/分割槽的大小才行; # 2) 用 +XXM 來輸入分割槽的大小,讓系統自己捉磁柱的號碼。 # +與M是必須要有的,XX為數字Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc4 1 63 506016 83 Linux # 注意!只有 4 號! 1 ~ 3 保留下來了!
    # 練習三: 繼續新增一個,這次我們新增 Extended 的分割槽好了! Command (m for help): n Command actione extendedp primary partition (1-4) e <==選擇的是 Extended 喔! Partition number (1-4): 1 First cylinder (64-5005, default 64): <=[enter] Using default value 64 Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): <=[enter] Using default value 5005 # 還記得我們在第三章的磁盤分區表曾經談到過的,擴展分配最好能夠包含所有 # 未分割的區間;所以在這個練習中,我們將所有未配置的磁柱都給了這個分割槽喔! # 所以在開始/結束磁柱的位置上,按下兩個[enter]用默認值即可!Command (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc1 64 5005 39696615 5 Extended /dev/hdc4 1 63 506016 83 Linux # 如上所示,所有的磁柱都在 /dev/hdc1 里面啰!
    # 練習四: 這次我們隨便新增一個 2GB 的分割槽看看! Command (m for help): n Command actionl logical (5 or over) <==因為已有 extended ,所以出現 logical 分割槽p primary partition (1-4) p <==偷偷玩一下,能否新增主要分割槽 Partition number (1-4): 2 No free sectors available <==肯定不行!因為沒有多余的磁柱可供配置Command (m for help): n Command actionl logical (5 or over)p primary partition (1-4) l <==乖乖使用邏輯分割槽吧! First cylinder (64-5005, default 64): <=[enter] Using default value 64 Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048MCommand (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc1 64 5005 39696615 5 Extended /dev/hdc4 1 63 506016 83 Linux /dev/hdc5 64 313 2008093+ 83 Linux # 這樣就新增了 2GB 的分割槽,且由于是 logical ,所以由 5 號開始! Command (m for help): q # 鳥哥這里僅是做一個練習而已,所以,按下 q 就能夠離開啰~

    上面的練習非常重要!您得要自行練習一下比較好!注意,不要按下 w 喔!會讓你的系統損毀的!由上面的一連串練習中,最重要的地方其實就在于創建分割槽的形式( primary/extended/logical)以及分割槽的大小了!一般來說創建分割槽的形式會有底下的數種狀況:

    • 1-4 號尚有剩余,且系統未有 extended:
      此時會出現讓你挑選 Primary / Extended 的項目,且你可以指定 1~4 號間的號碼;

    • 1-4 號尚有剩余,且系統有 extended:
      此時會出現讓你挑選 Primary / Logical 的項目;若選擇 p 則你還需要指定 1~4 號間的號碼;若選擇 l(L的小寫) 則不需要配置號碼,因為系統會自動指定邏輯分割槽的文件名號碼;

    • 1-4 沒有剩余,且系統有 extended:
      此時不會讓你挑選分割槽類型,直接會進入 logical 的分割槽形式。

    例題: 請依照你的系統情況,創建一個大約 1GB 左右的分割槽,并顯示該分割槽的相關信息: 答: 鳥哥的磁盤為 /dev/hdc ,尚有剩余磁柱號碼,因此可以這樣做:
    [root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2053-5005, default 2053): <==[enter] Using default value 2053 Last cylinder or +size or +sizeM or +sizeK (2053-5005, default 5005): +2048MCommand (m for help): pDisk /dev/hdc: 41.1 GB, 41174138880 bytes 255 heads, 63 sectors/track, 5005 cylinders Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux /dev/hdc2 14 1288 10241437+ 83 Linux /dev/hdc3 1289 1925 5116702+ 83 Linux /dev/hdc4 1926 5005 24740100 5 Extended /dev/hdc5 1926 2052 1020096 82 Linux swap / Solaris /dev/hdc6 2053 2302 2008093+ 83 LinuxCommand (m for help): w The partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. <==見鬼了!竟然需要 reboot 才能夠生效!我可不要重新啟動! [root@www ~]# partprobe <==強制讓核心重新捉一次 partition table
    在這個實作題中,請務必要按下『 w 』這個動作!因為我們實際上確實要創建這個分割槽嘛!但請仔細看一下最后的警告信息,因為我們的磁盤無法卸除(因為含有根目錄),所以核心無法重新取得分割表信息,因此此時系統會要求我們重新啟動(reboot)以升級核心的分割表信息才行

    如上的練習中,最終寫入分割表后竟然會讓核心無法捉到分割表信息!此時你可以直接使用 reboot 來處理,也可以使用 GNU 推出的工具程序來處置,那就是 partprobe 這個命令。這個命令的運行很簡單,他僅是告知核心必須要讀取新的分割表而已,因此并不會在屏幕上出現任何信息才是!這樣一來,我們就不需要 reboot 啰!


    • 操作環境的說明

    以 root 的身份進行硬盤的 partition 時,最好是在單人維護模式底下比較安全一些,此外,在進行 fdisk 的時候,如果該硬盤某個 partition 還在使用當中,那么很有可能系統核心會無法重載硬盤的 partition table ,解決的方法就是將該使用中的 partition 給他卸除,然后再重新進入 fdisk 一遍,重新寫入 partition table ,那么就可以成功啰!


    • 注意事項:

    另外在實作過程中請特別注意,因為 SATA 硬盤最多能夠支持到 15 號的分割槽, IDE 則可以支持到 63 號。但目前大家常見的系統都是 SATA 磁盤,因此在練習的時候千萬不要讓你的分割槽超過 15 號!否則即使你還有剩余的磁柱容量,但還是會無法繼續進行分割的喔!

    另外需要特別留意的是,fdisk 沒有辦法處理大于 2TB 以上的磁盤分區槽!這個問題比較嚴重!因為雖然 Ext3 文件系統已經支持達到 16TB 以上的磁盤,但是分割命令卻無法支持。時至今日(2009)所有的硬件價格大跌,硬盤也已經出到單顆 1TB 之譜,若加上磁盤陣列 (RAID) ,高于 2TB 的磁盤系統應該會很常見!此時你就得使用parted 這個命令了!我們會在本章最后談一談這個命令的用法。


    磁盤格式化

    分割完畢后自然就是要進行文件系統的格式化啰!格式化的命令非常的簡單,那就是『make filesystem, mkfs』這個命令啦!這個命令其實是個綜合的命令,他會去呼叫正確的文件系統格式化工具軟件!不啰唆,讓我們來瞧瞧吧!


    • mkfs
    [root@www ~]# mkfs [-t 文件系統格式] 裝置文件名 選項與參數: -t :可以接文件系統格式,例如 ext3, ext2, vfat 等(系統有支持才會生效)范例一:請將上個小節當中所制作出來的 /dev/hdc6 格式化為 ext3 文件系統 [root@www ~]# mkfs -t ext3 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label= <==這里指的是分割槽的名稱(label) OS type: Linux Block size=4096 (log=2) <==block 的大小配置為 4K Fragment size=4096 (log=2) 251392 inodes, 502023 blocks <==由此配置決定的inode/block數量 25101 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=515899392 16 block groups 32768 blocks per group, 32768 fragments per group 15712 inodes per group Superblock backups stored on blocks:32768, 98304, 163840, 229376, 294912Writing inode tables: done Creating journal (8192 blocks): done <==有日志記錄 Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 這樣就創建起來我們所需要的 Ext3 文件系統了!簡單明了![root@www ~]# mkfs[tab][tab] mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat # 按下兩個[tab],會發現 mkfs 支持的文件格式如上所示!可以格式化 vfat 喔!

    mkfs 其實是個綜合命令而已,事實上如同上表所示,當我們使用『 mkfs -t ext3 ...』時,系統會去呼叫 mkfs.ext3 這個命令來進行格式化的動作啦!若如同上表所展現的結果,那么鳥哥這個系統支持的文件系統格式化工具有『cramfs, ext2, ext3, msdoc, vfat』等,而最常用的應該是 ext3, vfat 兩種啦! vfat 可以用在 Windows/Linux 共享的 U盤 閃盤啰。

    例題: 將剛剛的 /dev/hdc6 格式化為 Windows 可讀的 vfat 格式吧! 答: mkfs -t vfat /dev/hdc6

    在格式化為 Ext3 的范例中,我們可以發現結果里面含有非常多的信息,由于我們沒有詳細指定文件系統的細部項目,因此系統會使用默認值來進行格式化。其中比較重要的部分為:文件系統的標頭(Label)、Block的大小以及 inode 的數量。如果你要指定這些東西,就得要了解一下 Ext2/Ext3 的公用程序,亦即 mke2fs 這個命令啰!


    • mke2fs
    [root@www ~]# mke2fs [-b block大小] [-i block大小] [-L 標頭] [-cj] 裝置 選項與參數: -b :可以配置每個 block 的大小,目前支持 1024, 2048, 4096 bytes 三種; -i :多少容量給予一個 inode 呢? -c :檢查磁盤錯誤,僅下達一次 -c 時,會進行快速讀取測試;如果下達兩次 -c -c 的話,會測試讀寫(read-write),會很慢~ -L :后面可以接標頭名稱 (Label),這個 label 是有用的喔!e2label命令介紹會談到~ -j :本來 mke2fs 是 EXT2 ,加上 -j 后,會主動加入 journal 而成為 EXT3。

    mke2fs 是一個很詳細但是很麻煩的命令!因為里面的細部配置太多了!現在我們進行如下的假設:

    • 這個文件系統的標頭配置為:vbird_logical
    • 我的 block 指定為 2048 大小;
    • 每 8192 bytes 分配一個 inode ;
    • 建置為 journal 的 Ext3 文件系統。

    開始格式化 /dev/hdc6 結果會變成如下所示:

    [root@www ~]# mke2fs -j -L "vbird_logical" -b 2048 -i 8192 /dev/hdc6 mke2fs 1.39 (29-May-2006) Filesystem label=vbird_logical OS type: Linux Block size=2048 (log=1) Fragment size=2048 (log=1) 251968 inodes, 1004046 blocks 50202 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=537919488 62 block groups 16384 blocks per group, 16384 fragments per group 4064 inodes per group Superblock backups stored on blocks:16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done # 比較看看,跟上面的范例用默認值的結果,有什么不一樣的啊?

    其實 mke2fs 所使用的各項選項/參數也可以用在『 mkfs -t ext3 ... 』后面,因為最終使用的公用程序是相同的啦!特別要注意的是 -b, -i 及 -j 這幾個選項,尤其是 -j 這個選項,當沒有指定 -j 的時候, mke2fs 使用 ext2 為格式化文件格式,若加入 -j 時,則格式化為 ext3 這個 Journaling 的 filesystem 呦!

    老實說,如果沒有特殊需求的話,使用『 mkfs -t ext3....』不但容易記憶,而且就非常好用啰!


    磁盤檢驗: fsck, badblocks

    由于系統在運行時誰也說不準啥時硬件或者是電源會有問題,所以『死機』可能是難免的情況(不管是硬件還是軟件)。現在我們知道文件系統運行時會有硬盤與內存數據異步的狀況發生,因此莫名其妙的死機非常可能導致文件系統的錯亂。問題來啦,如果文件系統真的發生錯亂的話,那該如何是好?就...挽救啊!此時那個好用的 filesystem check, fsck 就得拿來仔細瞧瞧啰。


    • fsck
    [root@www ~]# fsck [-t 文件系統] [-ACay] 裝置名稱 選項與參數: -t :如同 mkfs 一樣,fsck 也是個綜合軟件而已!因此我們同樣需要指定文件系統。不過由于現今的 Linux 太聰明了,他會自動的透過 superblock 去分辨文件系統,因此通常可以不需要這個選項的啰!請看后續的范例說明。 -A :依據 /etc/fstab 的內容,將需要的裝置掃瞄一次。/etc/fstab 于下一小節說明,通常啟動過程中就會運行此一命令了。 -a :自動修復檢查到的有問題的扇區,所以你不用一直按 y 啰! -y :與 -a 類似,但是某些 filesystem 僅支持 -y 這個參數! -C :可以在檢驗的過程當中,使用一個直方圖來顯示目前的進度!EXT2/EXT3 的額外選項功能:(e2fsck 這支命令所提供) -f :強制檢查!一般來說,如果 fsck 沒有發現任何 unclean 的旗標,不會主動進入細部檢查的,如果您想要強制 fsck 進入細部檢查,就得加上 -f 旗標啰! -D :針對文件系統下的目錄進行優化配置。范例一:強制的將前面我們創建的 /dev/hdc6 這個裝置給他檢驗一下! [root@www ~]# fsck -C -f -t ext3 /dev/hdc6 fsck 1.39 (29-May-2006) e2fsck 1.39 (29-May-2006) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks # 如果沒有加上 -f 的選項,則由于這個文件系統不曾出現問題, # 檢查的經過非常快速!若加上 -f 強制檢查,才會一項一項的顯示過程。范例二:系統有多少文件系統支持的 fsck 軟件? [root@www ~]# fsck[tab][tab] fsck fsck.cramfs fsck.ext2 fsck.ext3 fsck.msdos fsck.vfat

    這是用來檢查與修正文件系統錯誤的命令。注意:通常只有身為 root 且你的文件系統有問題的時候才使用這個命令,否則在正常狀況下使用此一命令,可能會造成對系統的危害!通常使用這個命令的場合都是在系統出現極大的問題,導致你在 Linux 啟動的時候得進入單人單機模式下進行維護的行為時,才必須使用此一命令!

    另外,如果你懷疑剛剛格式化成功的硬盤有問題的時后,也可以使用 fsck 來檢查一硬盤呦!其實就有點像是 Windows 的 scandisk 啦!此外,由于 fsck 在掃瞄硬盤的時候,可能會造成部分 filesystem 的損壞,所以『運行 fsck 時,被檢查的 partition 務必不可掛載到系統上!亦即是需要在卸除的狀態喔!

    不知道你還記不記得第六章的目錄配置中我們提過,ext2/ext3 文件系統的最頂層(就是掛載點那個目錄底下)會存在一個『lost+found』的目錄吧!該目錄就是在當你使用 fsck 檢查文件系統后,若出現問題時,有問題的數據會被放置到這個目錄中喔!所以理論上這個目錄不應該會有任何數據,若系統自動產生數據在里面,那...你就得特別注意你的文件系統啰!

    另外,我們的系統實際運行的 fsck 命令,其實是呼叫 e2fsck 這個軟件啦!可以 man e2fsck 找到更多的選項輔助喔!


    • badblocks
    [root@www ~]# badblocks -[svw] 裝置名稱 選項與參數: -s :在屏幕上列出進度 -v :可以在屏幕上看到進度 -w :使用寫入的方式來測試,建議不要使用此一參數,尤其是待檢查的裝置已有文件時![root@www ~]# badblocks -sv /dev/hdc6 Checking blocks 0 to 2008093 Checking for bad blocks (read-only test): done Pass completed, 0 bad blocks found.

    剛剛談到的 fsck 是用來檢驗文件系統是否出錯,至于 badblocks 則是用來檢查硬盤或軟盤扇區有沒有壞軌的命令!由于這個命令其實可以透過『 mke2fs -c 裝置文件名 』在進行格式化的時候處理磁盤表面的讀取測試,因此目前大多不使用這個命令啰!


    磁盤掛載與卸除

    我們在本章一開始時的掛載點的意義當中提過掛載點是目錄,而這個目錄是進入磁盤分區槽(其實是文件系統啦!)的入口就是了。不過要進行掛載前,你最好先確定幾件事:

    • 單一文件系統不應該被重復掛載在不同的掛載點(目錄)中;
    • 單一目錄不應該重復掛載多個文件系統;
    • 要作為掛載點的目錄,理論上應該都是空目錄才是。

    尤其是上述的后兩點!如果你要用來掛載的目錄里面并不是空的,那么掛載了文件系統之后,原目錄下的東西就會暫時的消失。舉個例子來說,假設你的 /home 原本與根目錄 (/) 在同一個文件系統中,底下原本就有 /home/test 與 /home/vbird 兩個目錄。然后你想要加入新的硬盤,并且直接掛載 /home 底下,那么當你掛載上新的分割槽時,則 /home 目錄顯示的是新分割槽內的數據,至于原先的 test 與 vbird 這兩個目錄就會暫時的被隱藏掉了!注意喔!并不是被覆蓋掉,而是暫時的隱藏了起來,等到新分割槽被卸除之后,則 /home 原本的內容就會再次的跑出來啦!

    而要將文件系統掛載到我們的 Linux 系統上,就要使用 mount 這個命令啦!不過,這個命令真的是博大精深~粉難啦!我們學簡單一點啊~ ^_^

    [root@www ~]# mount -a [root@www ~]# mount [-l] [root@www ~]# mount [-t 文件系統] [-L Label名] [-o 額外選項] \[-n] 裝置文件名 掛載點 選項與參數: -a :依照配置文件 /etc/fstab 的數據將所有未掛載的磁盤都掛載上來 -l :單純的輸入 mount 會顯示目前掛載的信息。加上 -l 可增列 Label 名稱! -t :與 mkfs 的選項非常類似的,可以加上文件系統種類來指定欲掛載的類型。常見的 Linux 支持類型有:ext2, ext3, vfat, reiserfs, iso9660(光盤格式),nfs, cifs, smbfs(此三種為網絡文件系統類型) -n :在默認的情況下,系統會將實際掛載的情況實時寫入 /etc/mtab 中,以利其他程序的運行。但在某些情況下(例如單人維護模式)為了避免問題,會刻意不寫入。此時就得要使用這個 -n 的選項了。 -L :系統除了利用裝置文件名 (例如 /dev/hdc6) 之外,還可以利用文件系統的標頭名稱(Label)來進行掛載。最好為你的文件系統取一個獨一無二的名稱吧! -o :后面可以接一些掛載時額外加上的參數!比方說賬號、密碼、讀寫權限等:ro, rw: 掛載文件系統成為只讀(ro) 或可擦寫(rw)async, sync: 此文件系統是否使用同步寫入 (sync) 或異步 (async) 的內存機制,請參考文件系統運行方式。默認為 async。auto, noauto: 允許此 partition 被以 mount -a 自動掛載(auto)dev, nodev: 是否允許此 partition 上,可創建裝置文件? dev 為可允許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 asyncremount: 重新掛載,這在系統出錯,或重新升級參數時,很有用!

    會不會覺得光是看這個命令的細部選項就快要昏倒了?如果有興趣的話看一下 man mount ,那才會真的昏倒的。事實上 mount 是個很萬用的命令,他可以掛載 ext3/vfat/nfs 等文件系統,由于每種文件系統的數據并不相同,想當然爾,詳細的參數與選項自然也就不相同啦!不過實際應用時卻簡單的會讓你想笑呢!看看底下的幾個簡單范例先!


    • 掛載Ext2/Ext3文件系統
    范例一:用默認的方式,將剛剛創建的 /dev/hdc6 掛載到 /mnt/hdc6 上面! [root@www ~]# mkdir /mnt/hdc6 [root@www ~]# mount /dev/hdc6 /mnt/hdc6 [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中間省略..... /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6 # 看起來,真的有掛載!且文件大小約為 2GB 左右啦!

    瞎密?竟然這么簡單!利用『mount 裝置文件名 掛載點』就能夠順利的掛載了!真是方便啊!為什么可以這么方便呢(甚至不需要使用 -t 這個選項)?由于文件系統幾乎都有 superblock ,我們的 Linux 可以透過分析 superblock 搭配 Linux 自己的驅動程序去測試掛載,如果成功的套和了,就立刻自動的使用該類型的文件系統掛載起來啊!那么系統有沒有指定哪些類型的 filesystem 才需要進行上述的掛載測試呢?主要是參考底下這兩個文件:

    • /etc/filesystems:系統指定的測試掛載文件系統類型;
    • /proc/filesystems:Linux系統已經加載的文件系統類型。

    那我怎么知道我的 Linux 有沒有相關文件系統類型的驅動程序呢?我們 Linux 支持的文件系統之驅動程序都寫在如下的目錄中:

    • /lib/modules/$(uname -r)/kernel/fs/

    例如 vfat 的驅動程序就寫在『/lib/modules/$(uname -r)/kernel/fs/vfat/』這個目錄下啦!簡單的測試掛載后,接下來讓我們檢查看看目前已掛載的文件系統狀況吧!

    范例二:觀察目前『已掛載』的文件系統,包含各文件系統的Label名稱 [root@www ~]# mount -l /dev/hdc2 on / type ext3 (rw) [/1] proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hdc3 on /home type ext3 (rw) [/home] /dev/hdc1 on /boot type ext3 (rw) [/boot] tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/hdc6 on /mnt/hdc6 type ext3 (rw) [vbird_logical] # 除了實際的文件系統外,很多特殊的文件系統(proc/sysfs...)也會被顯示出來! # 值得注意的是,加上 -l 選項可以列出如上特殊字體的標頭(label)喔

    這個命令輸出的結果可以讓我們看到非常多信息,以 /dev/hdc2 這個裝置來說好了(上面表格的第一行),他的意義是:『/dev/hdc2 是掛載到 / 目錄,文件系統類型為 ext3,且掛載為可擦寫 (rw) ,另外,這個 filesystem 有標頭,名字(label)為 /1 』這樣,你會解釋上述表格中的最后一行輸出結果了嗎?自己解釋一下先。^_^。接下來請拿出你的 CentOS DVD 放入光驅中,并拿 FAT 格式的 U盤 閃盤(不要用 NTFS 的)插入 U盤 插槽中,我們來測試掛載一下!


    • 掛載 CD 或 DVD 光盤
    范例三:將你用來安裝 Linux 的 CentOS 原版光盤拿出來掛載! [root@www ~]# mkdir /media/cdrom [root@www ~]# mount -t iso9660 /dev/cdrom /media/cdrom [root@www ~]# mount /dev/cdrom /media/cdrom # 你可以指定 -t iso9660 這個光盤片的格式來掛載,也可以讓系統自己去測試掛載! # 所以上述的命令只要做一個就夠了!但是目錄的創建初次掛載時必須要進行喔![root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中間省略..... /dev/hdd 4493152 4493152 0 100% /media/cdrom # 因為我的光驅使用的是 /dev/hdd 的 IDE 接口之故!

    光驅一掛載之后就無法退出光盤片了!除非你將他卸除才能夠退出!從上面的數據你也可以發現,因為是光盤嘛!所以磁盤使用率達到 100% ,因為你無法直接寫入任何數據到光盤當中ㄇㄟ!另外,其實 /dev/cdrom 是個鏈接文件,正確的磁盤文件名得要看你的光驅是什么連接接口的環境。以鳥哥為例,我的光驅接在 /dev/hdd,所以正確的掛載應該是『mount /dev/hdd /media/cdrom』比較正確喔!

    Tips:
    話說當時年紀小 (其實是剛接觸 Linux 的那一年),摸 Linux 到處碰壁!連將 CDROM 掛載后,光驅竟然都不讓我退片!那個時候難過的要死!解決的方法竟然是『重新啟動!』囧的可以啊!

    • 格式化與掛載軟盤

    軟盤的格式化可以直接使用 mkfs 即可。但是軟盤也是可以格式化成為 ext3 或 vfat 格式的。掛載的時候我們同樣的使用系統自動測試掛載即可!真是粉簡單!如果你有軟盤片的話(很少人有了吧?),請先放置到軟盤驅動器當中啰!底下來測試看看(軟盤片請勿放置任何數據,且將寫保護打開!)。

    范例四:格式化后掛載軟盤到 /media/floppy/ 目錄中。 [root@www ~]# mkfs -t vfat /dev/fd0 # 我們格式化軟盤成為 Windows/Linux 可共同使用的 FAT 格式吧! [root@www ~]# mkdir /media/floppy [root@www ~]# mount -t vfat /dev/fd0 /media/floppy [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中間省略..... /dev/fd0 1424 164 1260 12% /media/floppy

    與光驅不同的是,你掛載了軟盤后竟然還是可以退出軟盤喔!不過,如此一來你的文件系統將會有莫名奇妙的問題發生!整個 Linux 最重要的就是文件系統,而文件系統是直接掛載到目錄樹上頭,幾乎任何命令都會或多或少使用到目錄樹的數據,因此你當然不可以隨意的將光盤/軟盤拿出來!所以,軟盤也請卸除之后再退出!很重要的一點!


    • 掛載閃盤

    請拿出你的閃盤并插入 Linux 主機的 U盤 槽中!注意,你的這個閃盤不能夠是 NTFS 的文件系統喔!接下來讓我們測試測試吧!

    范例五:找出你的閃盤裝置文件名,并掛載到 /mnt/flash 目錄中 [root@www ~]# fdisk -l .....中間省略..... Disk /dev/sda: 8313 MB, 8313110528 bytes 59 heads, 58 sectors/track, 4744 cylinders Units = cylinders of 3422 * 512 = 1752064 bytesDevice Boot Start End Blocks Id System /dev/sda1 1 4745 8118260 b W95 FAT32 # 從上的特殊字體,可得知磁盤的大小以及裝置文件名,知道是 /dev/sda1 [root@www ~]# mkdir /mnt/flash [root@www ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on .....中間省略..... /dev/sda1 8102416 4986228 3116188 62% /mnt/flash

    如果帶有中文文件名的數據,那么可以在掛載時指定一下掛載文件系統所使用的語系數據。在 man mount 找到 vfat 文件格式當中可以使用 iocharset 來指定語系,而中文語系是 cp950 ,所以也就有了上述的掛載命令項目啰。

    萬一你使用的是隨身硬盤,也就是利用筆記型計算機所做出來的U盤磁盤時,通常這樣的硬盤都使用 NTFS 格式的~怎辦?沒關系,可以參考底下這個網站:(注8)

    • NTFS 文件系統官網:Linux-NTFS Project: http://www.linux-ntfs.org/
    • CentOS 5.x 版的相關驅動程序下載頁面:http://www.linux-ntfs.org/doku.php?id=redhat:rhel5

    將她們提供的驅動程序捉下來并且安裝之后,就能夠使用 NTFS 的文件系統了!只是由于文件系統與 Linux 核心有很大的關系,因此以后如果你的 Linux 系統有升級 (update) 時,你就得要重新下載一次相對應的驅動程序版本喔!


    • 重新掛載根目錄與掛載不特定目錄

    整個目錄樹最重要的地方就是根目錄了,所以根目錄根本就不能夠被卸除的!問題是,如果你的掛載參數要改變,或者是根目錄出現『只讀』狀態時,如何重新掛載呢?最可能的處理方式就是重新啟動 (reboot)!不過你也可以這樣做:

    范例六:將 / 重新掛載,并加入參數為 rw 與 auto [root@www ~]# mount -o remount,rw,auto /

    重點是那個『 -o remount,xx 』的選項與參數!請注意,要重新掛載 (remount) 時,這是個非常重要的機制!尤其是當你進入單人維護模式時,你的根目錄常會被系統掛載為只讀,這個時候這個命令就太重要了!

    另外,我們也可以利用 mount 來將某個目錄掛載到另外一個目錄去喔!這并不是掛載文件系統,而是額外掛載某個目錄的方法!雖然底下的方法也可以使用 symbolic link 來連結,不過在某些不支持符號鏈接的程序運行中,還是得要透過這樣的方法才行。

    范例七:將 /home 這個目錄暫時掛載到 /mnt/home 底下: [root@www ~]# mkdir /mnt/home [root@www ~]# mount --bind /home /mnt/home [root@www ~]# ls -lid /home/ /mnt/home 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/ 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home[root@www ~]# mount -l /home on /mnt/home type none (rw,bind)

    看起來,其實兩者連結到同一個 inode 嘛! ^_^ 沒錯啦!透過這個 mount --bind 的功能,您可以將某個目錄掛載到其他目錄去喔!而并不是整塊 filesystem 的啦!所以從此進入 /mnt/home 就是進入 /home 的意思喔!


    • umount (將裝置文件卸除)
    [root@www ~]# umount [-fn] 裝置文件名或掛載點 選項與參數: -f :強制卸除!可用在類似網絡文件系統 (NFS) 無法讀取到的情況下; -n :不升級 /etc/mtab 情況下卸除。

    就是直接將已掛載的文件系統給他卸除即是!卸除之后,可以使用 df 或 mount -l 看看是否還存在目錄樹中?卸除的方式,可以下達裝置文件名或掛載點,均可接受啦!底下的范例做看看吧!

    范例八:將本章之前自行掛載的文件系統全部卸除: [root@www ~]# mount .....前面省略..... /dev/hdc6 on /mnt/hdc6 type ext3 (rw) /dev/hdd on /media/cdrom type iso9660 (rw) /dev/sda1 on /mnt/flash type vfat (rw,iocharset=cp950) /home on /mnt/home type none (rw,bind) # 先找一下已經掛載的文件系統,如上所示,特殊字體即為剛剛掛載的裝置啰![root@www ~]# umount /dev/hdc6 <==用裝置文件名來卸除 [root@www ~]# umount /media/cdrom <==用掛載點來卸除 [root@www ~]# umount /mnt/flash <==因為掛載點比較好記憶! [root@www ~]# umount /dev/fd0 <==用裝置文件名較好記! [root@www ~]# umount /mnt/home <==一定要用掛載點!因為掛載的是目錄

    由于通通卸除了,此時你才可以退出光盤片、軟盤片、U盤閃盤等設備喔!如果你遇到這樣的情況:

    [root@www ~]# mount /dev/cdrom /media/cdrom [root@www ~]# cd /media/cdrom [root@www cdrom]# umount /media/cdrom umount: /media/cdrom: device is busy umount: /media/cdrom: device is busy

    由于你目前正在 /media/cdrom/ 的目錄內,也就是說其實『你正在使用該文件系統』的意思!所以自然無法卸除這個裝置!那該如何是好?就『離開該文件系統的掛載點』即可。以上述的案例來說,你可以使用『 cd / 』回到根目錄,就能夠卸除 /media/cdrom 啰!簡單吧!


    • 使用 Label name 進行掛載的方法

    除了磁盤的裝置文件名之外,其實我們可以使用文件系統的標頭(label)名稱來掛載喔!舉例來說,我們剛剛卸除的 /dev/hdc6 標頭名稱是『vbird_logical』,你也可以使用dumpe2fs這個命令來查詢一下啦!然后就這樣做即可:

    范例九:找出 /dev/hdc6 的 label name,并用 label 掛載到 /mnt/hdc6 [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical .....底下省略..... # 找到啦!標頭名稱為 vbird_logical 啰![root@www ~]# mount -L "vbird_logical" /mnt/hdc6

    這種掛載的方法有一個很大的好處:『系統不必知道該文件系統所在的接口與磁盤文件名!』更詳細的說明我們會在下一小節當中的e2label 介紹的!


    磁盤參數修訂

    某些時刻,你可能會希望修改一下目前文件系統的一些相關信息,舉例來說,你可能要修改 Label name ,或者是 journal 的參數,或者是其他硬盤運行時的相關參數 (例如 DMA 啟動與否~)。這個時候,就得需要底下這些相關的命令功能啰~


    • mknod

    還記得我們說過,在 Linux 底下所有的裝置都以文件來代表吧!但是那個文件如何代表該裝置呢?很簡單!就是透過文件的 major 與 minor 數值來替代的~所以,那個 major 與 minor 數值是有特殊意義的,不是隨意配置的喔!舉例來說,在鳥哥的這個測試機當中,那個用到的磁盤 /dev/hdc 的相關裝置代碼如下:

    [root@www ~]# ll /dev/hdc* brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1 brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2 brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3 brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4 brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5 brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6

    上表當中 22 為主要裝置代碼 (Major) 而 0~6 則為次要裝置代碼 (Minor)。我們的 Linux 核心認識的裝置數據就是透過這兩個數值來決定的!舉例來說,常見的硬盤文件名 /dev/hda 與 /dev/sda 裝置代碼如下所示:

    磁盤文件名MajorMinor
    /dev/hda30~63
    /dev/hdb364~127
    /dev/sda80-15
    /dev/sdb816-31

    如果你想要知道更多核心支持的硬件裝置代碼 (major, minor) 請參考官網的連結(注9):

    • http://www.kernel.org/pub/linux/docs/device-list/devices.txt

    基本上,Linux 核心 2.6 版以后,硬件文件名已經都可以被系統自動的實時產生了,我們根本不需要手動創建裝置文件。不過某些情況底下我們可能還是得要手動處理裝置文件的,例如在某些服務被關到特定目錄下時(chroot),就需要這樣做了。此時這個 mknod 就得要知道如何操作才行!

    [root@www ~]# mknod 裝置文件名 [bcp] [Major] [Minor] 選項與參數: 裝置種類:b :配置裝置名稱成為一個周邊儲存設備文件,例如硬盤等;c :配置裝置名稱成為一個周邊輸入設備文件,例如鼠標/鍵盤等;p :配置裝置名稱成為一個 FIFO 文件; Major :主要裝置代碼; Minor :次要裝置代碼;范例一:由上述的介紹我們知道 /dev/hdc10 裝置代碼 22, 10,請創建并查閱此裝置 [root@www ~]# mknod /dev/hdc10 b 22 10 [root@www ~]# ll /dev/hdc10 brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10 # 上面那個 22 與 10 是有意義的,不要隨意配置啊!范例二:創建一個 FIFO 文件,檔名為 /tmp/testpipe [root@www ~]# mknod /tmp/testpipe p [root@www ~]# ll /tmp/testpipe prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe # 注意啊!這個文件可不是一般文件,不可以隨便就放在這里! # 測試完畢之后請刪除這個文件吧!看一下這個文件的類型!是 p 喔!^_^


    • e2label

    我們在 mkfs 命令介紹時有談到配置文件系統標頭 (Label) 的方法。那如果格式化完畢后想要修改標頭呢?就用這個 e2label 來修改了。那什么是 Label 呢?我們拿你曾用過的 Windows 系統來說明。當你打開『文件總管』時,C/D等槽不是都會有個名稱嗎?那就是 label (如果沒有配置名稱,就會顯示『本機磁盤驅動器』的字樣)

    這個東西除了有趣且可以讓你知道磁盤的內容是啥玩意兒之外,也會被使用到一些配置文件案當中!舉例來說,剛剛我們聊到的磁盤的掛載時,不就有用到 Label name 來進行掛載嗎?目前 CentOS 的配置文件,也就是那個 /etc/fstab 文件的配置都默認使用 Label name 呢!那這樣做有什么好處與缺點呢?

    • 優點:不論磁盤文件名怎么變,不論你將硬盤插在哪個 IDE / SATA 接口,由于系統是透過 Label ,所以,磁盤插在哪個接口將不會有影響;

    • 缺點:如果插了兩顆硬盤,剛好兩顆硬盤的 Label 有重復的,那就慘了~因為系統可能會無法判斷哪個磁盤分區槽才是正確的!

    鳥哥一直是個比較『硬派』作風,所以我還是比較喜歡直接利用磁盤文件名來掛載啦!不過,如果沒有特殊需求的話,那么利用 Label 來掛載也成!但是你就不可以隨意修改 Label 的名稱了

    [root@www ~]# e2label 裝置名稱 新的Label名稱范例一:將 /dev/hdc6 的標頭改成 my_test 并觀察是否修改成功? [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical <==原本的標頭名稱 .....底下省略.....[root@www ~]# e2label /dev/hdc6 "my_test" [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: my_test <==改過來啦! .....底下省略.....


    • tune2fs
    [root@www ~]# tune2fs [-jlL] 裝置代號 選項與參數: -l :類似 dumpe2fs -h 的功能~將 superblock 內的數據讀出來~ -j :將 ext2 的 filesystem 轉換為 ext3 的文件系統; -L :類似 e2label 的功能,可以修改 filesystem 的 Label 喔!范例一:列出 /dev/hdc6 的 superblock 內容 [root@www ~]# tune2fs -l /dev/hdc6

    這個命令的功能其實很廣泛啦~上面鳥哥僅列出很簡單的一些參數而已,更多的用法請自行參考 man tune2fs 。比較有趣的是,如果你的某個 partition 原本是 ext2 的文件系統,如果想要將他升級成為 ext3 文件系統的話,利用 tune2fs 就可以很簡單的轉換過來啰~


    • hdparm

    如果你的硬盤是 IDE 接口的,那么這個命令可以幫助你配置一些進階參數!如果你是使用 SATA 接口的,那么這個命令就沒有多大用途了!另外,目前的 Linux 系統都已經稍微優化過,所以這個命令最多是用來測試效能啦!而且建議你不要隨便調整硬盤參數,文件系統容易出問題喔!除非你真的知道你調整的數據是啥!

    [root@www ~]# hdparm [-icdmXTt] 裝置名稱 選項與參數: -i :將核心偵測到的硬盤參數顯示出來! -c :配置 32-bit (32位)存取模式。這個 32 位存取模式指的是在硬盤在與 PCI 接口之間傳輸的模式,而硬盤本身是依舊以 16 位模式在跑的!默認的情況下,這個配置值都會被打開,建議直接使用 c1 即可! -d :配置是否激活 dma 模式, -d1 為啟動, -d0 為取消; -m :配置同步讀取多個 sector 的模式。一般來說,配置此模式,可降低系統因為讀取磁盤而損耗的效能~不過, WD 的硬盤則不怎么建議配置此值~一般來說,配置為 16/32 是優化,不過,WD 硬盤建議值則是 4/8 。這個值的最大值,可以利用 hdparm -i /dev/hda 輸出的 MaxMultSect來配置喔!一般如果不曉得,配置 16 是合理的! -X :配置 UtraDMA 的模式,一般來說, UDMA 的模式值加 64 即為配置值。并且,硬盤與主板芯片必須要同步,所以,取最小的那個。一般來說:33 MHz DMA mode 0~2 (X64~X66)66 MHz DMA mode 3~4 (X67~X68)100MHz DMA mode 5 (X69)如果您的硬盤上面顯示的是 UATA 100 以上的,那么配置 X69 也不錯! -T :測試緩存區 cache 的存取效能 -t :測試硬盤的實際存取效能 (較正確!)范例一:取得我硬盤的最大同步存取 sector 值與目前的 UDMA 模式 [root@www ~]# hdparm -i /dev/hdcModel=IC35L040AVER07-0, FwRev=ER4OA41A, SerialNo=SX0SXL98406 <==硬盤的廠牌型號Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=40BuffType=DualPortCache, BuffSize=1916kB, MaxMultSect=16, MultSect=16CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=80418240IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}PIO modes: pio0 pio1 pio2 pio3 pio4DMA modes: mdma0 mdma1 mdma2UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 <==有 * 為目前的值AdvancedPM=yes: disabled (255) WriteCache=enabledDrive conforms to: ATA/ATAPI-5 T13 1321D revision 1: ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 # 這顆硬盤緩沖存儲器只有 2MB(BuffSize),但使用的是 udma5 !還可以。范例二:由上個范例知道最大 16 位/UDMA 為 mode 5,所以可以配置為: [root@www ~]# hdparm -d1 -c1 -X69 /dev/hdc范例三:測試這顆硬盤的讀取效能 [root@www ~]# hdparm -Tt /dev/hdc /dev/hdc:Timing cached reads: 428 MB in 2.00 seconds = 213.50 MB/secTiming buffered disk reads: 114 MB in 3.00 seconds = 38.00 MB/sec # 鳥哥的這部測試機沒有很好啦~這樣的速度.....差強人意~

    如果你是使用 SATA 硬盤的話,這個命令唯一可以做的,就是最后面那個測試的功能而已啰!雖然這樣的測試不是很準確,至少是一個可以比較的基準。鳥哥在我的 cluster 機器上面測試的 SATA (/dev/sda) 與RAID (/dev/sdb) 結果如下,可以提供給你參考看看。

    [root@www ~]# hdparm -Tt /dev/sda /dev/sdb /dev/sda:Timing cached reads: 4152 MB in 2.00 seconds = 2075.28 MB/secTiming buffered disk reads: 304 MB in 3.01 seconds = 100.91 MB/sec/dev/sdb:Timing cached reads: 4072 MB in 2.00 seconds = 2036.31 MB/secTiming buffered disk reads: 278 MB in 3.00 seconds = 92.59 MB/sec

    配置啟動掛載:

    手動處理 mount 不是很人性化,我們總是需要讓系統『自動』在啟動時進行掛載的!本小節就是在談這玩意兒!另外,從 FTP 服務器捉下來的映像檔能否不用刻錄就可以讀取內容?我們也需要談談先!


    啟動掛載 /etc/fstab 及 /etc/mtab

    剛剛上面說了許多,那么可不可以在啟動的時候就將我要的文件系統都掛好呢?這樣我就不需要每次進入 Linux 系統都還要在掛載一次呀!當然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不過,在開始說明前,這里要先跟大家說一說系統掛載的一些限制:

    • 根目錄 / 是必須掛載的﹐而且一定要先于其它 mount point 被掛載進來。
    • 其它 mount point 必須為已創建的目錄﹐可任意指定﹐但一定要遵守必須的系統目錄架構原則
    • 所有 mount point 在同一時間之內﹐只能掛載一次。
    • 所有 partition 在同一時間之內﹐只能掛載一次。
    • 如若進行卸除﹐您必須先將工作目錄移到 mount point(及其子目錄) 之外。

    讓我們直接查閱一下 /etc/fstab 這個文件的內容吧!

    [root@www ~]# cat /etc/fstab # Device Mount point filesystem parameters dump fsck LABEL=/1 / ext3 defaults 1 1 LABEL=/home /home ext3 defaults 1 2 LABEL=/boot /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 LABEL=SWAP-hdc5 swap swap defaults 0 0 # 上述特殊字體的部分與實際磁盤有關!其他則是虛擬文件系統或 # 與內存置換空間 (swap) 有關。

    其實 /etc/fstab (filesystem table) 就是將我們利用 mount 命令進行掛載時,將所有的選項與參數寫入到這個文件中就是了。除此之外, /etc/fstab 還加入了 dump 這個備份用命令的支持!與啟動時是否進行文件系統檢驗fsck 等命令有關。

    這個文件的內容共有六個字段,這六個字段非常的重要!你『一定要背起來』才好!各個字段的詳細數據如下:

    Tips:
    鳥哥比較龜毛一點,因為某些 distributions 的 /etc/fstab 文件排列方式蠻丑的,雖然每一欄之間只要以空格符分開即可,但就是覺得丑,所以通常鳥哥就會自己排列整齊,并加上批注符號(就是 # ),來幫我記憶這些信息!
    • 第一欄:磁盤裝置文件名或該裝置的 Label:

    這個字段請填入文件系統的裝置文件名。但是由上面表格的默認值我們知道系統默認使用的是 Label 名稱!在鳥哥的這個測試系統中 /dev/hdc2 標頭名稱為 /1,所以上述表格中的『LABEL=/1』也可以被取代成為『/dev/hdc2』的意思。至于Label可以使用dumpe2fs 命令來查閱的。

    Tips:
    記得有一次有個網友寫信給鳥哥,他說,依照 e2label的配置去練習修改自己的 partition 的 Label name 之后,卻發現,再也無法順利啟動成功!后來才發現,原來他的 /etc/fstab 就是以 Label name 去掛載的。但是因為在練習的時候,將 Label name 改名字過了,導致在啟動的過程當中再也找不到相關的Label name了。

    所以啦,這里再次的強調,利用裝置名稱 (ex> /dev/hda1) 來掛載 partition 時,雖然是被固定死的,所以您的硬盤不可以隨意插在任意的插槽,不過他還是有好處的。而使用 Label name 來掛載,雖然就沒有插槽方面的問題,不過,您就得要隨時注意您的Label name 喔!尤其是新增硬盤的時候! ^_^
    • 第二欄:掛載點 (mount point)::

    就是掛載點啊!掛載點是什么?一定是目錄啊~要知道啊!

    • 第三欄:磁盤分區槽的文件系統:

    在手動掛載時可以讓系統自動測試掛載,但在這個文件當中我們必須要手動寫入文件系統才行!包括 ext3, reiserfs, nfs, vfat 等等。

    • 第四欄:文件系統參數:

    記不記得我們在 mount 這個命令中談到很多特殊的文件系統參數?還有我們使用過的『-o iocharset=cp950』?這些特殊的參數就是寫入在這個字段啦!雖然之前在mount 已經提過一次,這里我們利用表格的方式再匯整一下:

    參數內容意義
    async/sync
    異步/同步
    配置磁盤是否以異步方式運行!默認為 async(效能較佳)
    auto/noauto
    自動/非自動
    當下達 mount -a 時,此文件系統是否會被主動測試掛載。默認為 auto。
    rw/ro
    可擦寫/只讀
    讓該分割槽以可擦寫或者是只讀的型態掛載上來,如果你想要分享的數據是不給用戶隨意變更的,這里也能夠配置為只讀。則不論在此文件系統的文件是否配置 w 權限,都無法寫入喔!
    exec/noexec
    可運行/不可運行
    限制在此文件系統內是否可以進行『運行』的工作?如果是純粹用來儲存數據的,那么可以配置為 noexec 會比較安全,相對的,會比較麻煩!
    user/nouser
    允許/不允許使用者掛載
    是否允許用戶使用 mount 命令來掛載呢?一般而言,我們當然不希望一般身份的 user 能使用 mount 啰,因為太不安全了,因此這里應該要配置為 nouser 啰!
    suid/nosuid
    具有/不具有 suid 權限
    該文件系統是否允許 SUID 的存在?如果不是運行文件放置目錄,也可以配置為 nosuid 來取消這個功能!
    usrquota注意名稱是『 usrquota 』不要拼錯了!這個是在啟動 filesystem 支持磁盤配額模式,更多數據我們在第四篇再談。
    grpquota注意名稱是『grpquota』,啟動 filesystem 對群組磁盤配額模式的支持。
    defaults同時具有 rw, suid, dev, exec, auto, nouser, async 等參數。基本上,默認情況使用 defaults 配置即可!

    • 第五欄:能否被 dump 備份命令作用:

    dump 是一個用來做為備份的命令(我們會在第二十五章備份策略中談到這個命令),我們可以透過 fstab 指定哪個文件系統必須要進行 dump 備份!0 代表不要做 dump 備份, 1 代表要每天進行 dump 的動作。 2 也代表其他不定日期的 dump 備份動作,通常這個數值不是 0 就是 1 啦!

    • 第六欄:是否以 fsck 檢驗扇區:

    啟動的過程中,系統默認會以 fsck 檢驗我們的 filesystem 是否完整 (clean)。不過,某些 filesystem 是不需要檢驗的,例如內存置換空間 (swap) ,或者是特殊文件系統例如 /proc 與 /sys 等等。所以,在這個字段中,我們可以配置是否要以 fsck 檢驗該 filesystem 喔。0 是不要檢驗, 1 表示最早檢驗(一般只有根目錄會配置為 1), 2 也是要檢驗,不過 1 會比較早被檢驗啦!一般來說,根目錄配置為 1 ,其他的要檢驗的 filesystem 都配置為 2 就好了。

    例題: 假設我們要將 /dev/hdc6 每次啟動都自動掛載到 /mnt/hdc6 ,該如何進行? 答: 首先,請用 nano 將底下這一行寫入 /etc/fstab 當中;
    [root@www ~]# nano /etc/fstab /dev/hdc6 /mnt/hdc6 ext3 defaults 1 2
    再來看看 /dev/hdc6 是否已經掛載,如果掛載了,請務必卸除再說!
    [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc6 1976312 42072 1833836 3% /mnt/hdc6 # 竟然不知道何時被掛載了?趕緊給他卸除先![root@www ~]# umount /dev/hdc6
    最后測試一下剛剛我們寫入 /etc/fstab 的語法有沒有錯誤!這點很重要!因為這個文件如果寫錯了,則你的 Linux 很可能將無法順利啟動完成!所以請務必要測試測試喔!
    [root@www ~]# mount -a [root@www ~]# df
    最終有看到 /dev/hdc6 被掛載起來的信息才是成功的掛載了!而且以后每次啟動都會順利的將此文件系統掛載起來的!由于這個范例僅是測試而已,請務必回到 /etc/fstab 當中,將上述這行給他批注或者是刪除掉!
    [root@www ~]# nano /etc/fstab # /dev/hdc6 /mnt/hdc6 ext3 defaults 1 2

    /etc/fstab 是啟動時的配置文件,不過,實際 filesystem 的掛載是記錄到 /etc/mtab 與 /proc/mounts 這兩個文件當中的。每次我們在更動 filesystem 的掛載時,也會同時更動這兩個文件喔!但是,萬一發生您在 /etc/fstab 輸入的數據錯誤,導致無法順利啟動成功,而進入單人維護模式當中,那時候的 / 可是 read only 的狀態,當然您就無法修改 /etc/fstab ,也無法升級 /etc/mtab 啰~那怎么辦?沒關系,可以利用底下這一招:

    [root@www ~]# mount -n -o remount,rw /

    特殊裝置 loop 掛載 (映象檔不刻錄就掛載使用)
    • 掛載光盤/DVD映象文件

    想象一下如果今天我們從國家高速網絡中心(http://ftp.twaren.net)或者是義守大學(http://ftp.isu.edu.tw)下載了 Linux 或者是其他所需光盤/DVD的映象文件后,難道一定需要刻錄成為光盤才能夠使用該文件里面的數據嗎?當然不是啦!我們可以透過 loop 裝置來掛載的!

    那要如何掛載呢?鳥哥將整個 CentOS 5.2 的 DVD 映象檔捉到測試機上面,然后利用這個文件來掛載給大家參考看看啰!

    [root@www ~]# ll -h /root/centos5.2_x86_64.iso -rw-r--r-- 1 root root 4.3G Oct 27 17:34 /root/centos5.2_x86_64.iso # 看到上面的結果吧!這個文件就是映象檔,文件非常的大吧![root@www ~]# mkdir /mnt/centos_dvd [root@www ~]# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /root/centos5.2_x86_64.iso4493152 4493152 0 100% /mnt/centos_dvd # 就是這個項目! .iso 映象文件內的所有數據可以在 /mnt/centos_dvd 看到![root@www ~]# ll /mnt/centos_dvd total 584 drwxr-xr-x 2 root root 522240 Jun 24 00:57 CentOS <==瞧!就是DVD的內容啊! -rw-r--r-- 8 root root 212 Nov 21 2007 EULA -rw-r--r-- 8 root root 18009 Nov 21 2007 GPL drwxr-xr-x 4 root root 2048 Jun 24 00:57 images .....底下省略.....[root@www ~]# umount /mnt/centos_dvd/ # 測試完成!記得將數據給他卸除!

    非常方便吧!如此一來我們不需要將這個文件刻錄成為光盤或者是 DVD 就能夠讀取內部的數據了!換句話說,你也可以在這個文件內『動手腳』去修改文件的!這也是為什么很多映象檔提供后,還得要提供驗證碼 (MD5)給使用者確認該映象檔沒有問題!


    • 創建大文件以制作 loop 裝置文件!

    想一想,既然能夠掛載 DVD 的映象檔,那么我能不能制作出一個大文件,然后將這個文件格式化后掛載呢?好問題!這是個有趣的動作!而且還能夠幫助我們解決很多系統的分割不良的情況呢!舉例來說,如果當初在分割時,你只有分割出一個根目錄,假設你已經沒有多余的容量可以進行額外的分割的!偏偏根目錄的容量還很大!此時你就能夠制作出一個大文件,然后將這個文件掛載!如此一來感覺上你就多了一個分割槽啰!用途非常的廣泛啦!

    底下我們在 /home 下創建一個 512MB 左右的大文件,然后將這個大文件格式化并且實際掛載來玩一玩!這樣你會比較清楚鳥哥在講啥!

    • 創建大型文件

      首先,我們得先有一個大的文件吧!怎么創建這個大文件呢?在 Linux 底下我們有一支很好用的程序dd !他可以用來創建空的文件喔!詳細的說明請先翻到下一章壓縮命令的運用 來查閱,這里鳥哥僅作一個簡單的范例而已。假設我要創建一個空的文件在 /home/loopdev ,那可以這樣做:
      [root@www ~]# dd if=/dev/zero of=/home/loopdev bs=1M count=512 512+0 records in <==讀入 512 筆數據 512+0 records out <==輸出 512 筆數據 536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s # 這個命令的簡單意義如下: # if 是 input file ,輸入文件。那個 /dev/zero 是會一直輸出 0 的裝置! # of 是 output file ,將一堆零寫入到后面接的文件中。 # bs 是每個 block 大小,就像文件系統那樣的 block 意義; # count 則是總共幾個 bs 的意思。[root@www ~]# ll -h /home/loopdev -rw-r--r-- 1 root root 512M Oct 28 02:29 /home/loopdev
      dd 就好像在迭磚塊一樣,將 512 塊,每塊 1MB 的磚塊堆棧成為一個大文件 (/home/loopdev) !最終就會出現一個 512MB 的文件!粉簡單吧!

    • 格式化

      很簡單就創建起一個 512MB 的文件了吶!接下來當然是格式化啰!
      [root@www ~]# mkfs -t ext3 /home/loopdev mke2fs 1.39 (29-May-2006) /home/loopdev is not a block special device. Proceed anyway? (y,n) y <==由于不是正常的裝置,所以這里會提示你! Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user .....以下省略.....

    • 掛載

      那要如何掛載啊?利用 mount 的特殊參數,那個 -o loop 的參數來處理!
      [root@www ~]# mount -o loop /home/loopdev /media/cdrom/ [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /home/loopdev 507748 18768 462766 4% /media/cdrom

    透過這個簡單的方法,感覺上你就可以在原本的分割槽在不更動原有的環境下制作出你想要的分割槽就是了!這東西很好用的!尤其是想要玩 Linux 上面的『虛擬機』的話,也就是以一部 Linux 主機再切割成為數個獨立的主機系統時,類似 VMware 這類的軟件,在 Linux 上使用 xen 這個軟件,他就可以配合這種 loop device 的文件類型來進行根目錄的掛載,真的非常有用的喔! ^_^


    內存置換空間(swap)之建置

    還記得在安裝 Linux 之前大家常常會告訴你的話吧!就是安裝時一定需要的兩個 partition 啰!一個是根目錄,另外一個就是 swap(內存置換空間)。關于內存置換空間的解釋在第四章安裝 Linux 內的磁盤分區時有約略提過,swap 的功能就是在應付物理內存不足的情況下所造成的內存延伸記錄的功能。

    一般來說,如果硬件的配備足夠的話,那么 swap 應該不會被我們的系統所使用到,swap 會被利用到的時刻通常就是物理內存不足的情況了。從第零章的計算器概論當中,我們知道 CPU 所讀取的數據都來自于內存,那當內存不足的時候,為了讓后續的程序可以順利的運行,因此在內存中暫不使用的程序與數據就會被挪到 swap 中了。此時內存就會空出來給需要運行的程序加載。由于 swap 是用硬盤來暫時放置內存中的信息,所以用到 swap 時,你的主機硬盤燈就會開始閃個不停啊!

    雖然目前(2009)主機的內存都很大,至少都有 1GB 以上啰!因此在個人使用上你不要配置 swap 應該也沒有什么太大的問題。不過服務器可就不這么想了~由于你不會知道何時會有大量來自網絡的要求,因此你最好能夠預留一些 swap 來緩沖一下系統的內存用量!至少達到『備而不用』的地步啊!

    現在想象一個情況,你已經將系統創建起來了,此時卻才發現你沒有建置 swap ~那該如何是好呢?透過本章上面談到的方法,你可以使用如下的方式來創建你的 swap 啰!

    • 配置一個 swap partition
    • 創建一個虛擬內存的文件

    不啰唆,就立刻來處理處理吧!


    使用實體分割槽建置swap

    創建 swap 分割槽的方式也是非常的簡單的!透過底下幾個步驟就搞定啰:

  • 分割:先使用 fdisk 在你的磁盤中分割出一個分割槽給系統作為 swap 。由于 Linux 的 fdisk 默認會將分割槽的 ID 配置為 Linux 的文件系統,所以你可能還得要配置一下 system ID 就是了。
  • 格式化:利用創建 swap 格式的『mkswap 裝置文件名』就能夠格式化該分割槽成為 swap 格式啰
  • 使用:最后將該 swap 裝置啟動,方法為:『swapon 裝置文件名』。
  • 觀察:最終透過 free 這個命令來觀察一下內存的用量吧!
  • 不啰唆,立刻來實作看看!既然我們還有多余的磁盤容量可以分割,那么讓我們繼續分割出 256MB 的磁盤分區槽吧!然后將這個磁盤分區槽做成 swap 吧!


    • 1. 先進行分割的行為啰!
    [root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2303-5005, default 2303): <==這里按[enter] Using default value 2303 Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256MCommand (m for help): pDevice Boot Start End Blocks Id System .....中間省略..... /dev/hdc6 2053 2302 2008093+ 83 Linux /dev/hdc7 2303 2334 257008+ 83 Linux <==新增的項目Command (m for help): t <==修改系統 ID Partition number (1-7): 7 <==從上結果看到的,七號partition Hex code (type L to list codes): 82 <==改成 swap 的 ID Changed system type of partition 7 to 82 (Linux swap / Solaris)Command (m for help): pDevice Boot Start End Blocks Id System .....中間省略..... /dev/hdc6 2053 2302 2008093+ 83 Linux /dev/hdc7 2303 2334 257008+ 82 Linux swap / SolarisCommand (m for help): w # 此時就將 partition table 升級了![root@www ~]# partprobe # 這個玩意兒很重要的啦!不要忘記讓核心升級 partition table 喔!


    • 2. 開始建置 swap 格式
    [root@www ~]# mkswap /dev/hdc7 Setting up swapspace version 1, size = 263172 kB <==非常快速!


    • 3. 開始觀察與加載看看吧!
    [root@www ~]# freetotal used free shared buffers cached Mem: 742664 684592 58072 0 43820 497144 -/+ buffers/cache: 143628 599036 Swap: 1020088 96 1019992 # 我有 742664K 的物理內存,使用 684592K 剩余 58072K ,使用掉的內存有 # 43820K / 497144K 用在緩沖/緩存的用途中。 # 至于 swap 已經存在了 1020088K 啰!這樣會看了吧?![root@www ~]# swapon /dev/hdc7 [root@www ~]# freetotal used free shared buffers cached Mem: 742664 684712 57952 0 43872 497180 -/+ buffers/cache: 143660 599004 Swap: 1277088 96 1276992 <==有添加啰!看到否?[root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 # 上面列出目前使用的 swap 裝置有哪些的意思!


    使用文件建置swap

    如果是在實體分割槽無法支持的環境下,此時前一小節提到的 loop 裝置建置方法就派的上用場啦!與實體分割槽不一樣的只是利用 dd 去建置一個大文件而已。多說無益,我們就再透過文件建置的方法創建一個128 MB 的內存置換空間吧!


    • 1. 使用 dd 這個命令來新增一個 128MB 的文件在 /tmp 底下:
    [root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s[root@www ~]# ll -h /tmp/swap -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap
    這樣一個 128MB 的文件就建置妥當。若忘記上述的各項參數的意義,請回前一小節查閱一下啰!


    • 2. 使用 mkswap 將 /tmp/swap 這個文件格式化為 swap 的文件格式:
    [root@www ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 134213 kB # 這個命令下達時請『特別小心』,因為下錯字節控制,將可能使您的文件系統掛掉!


    • 3. 使用 swapon 來將 /tmp/swap 啟動啰!
    [root@www ~]# freetotal used free shared buffers cached Mem: 742664 450860 291804 0 45584 261284 -/+ buffers/cache: 143992 598672 Swap: 1277088 96 1276992[root@www ~]# swapon /tmp/swap [root@www ~]# freetotal used free shared buffers cached Mem: 742664 450860 291804 0 45604 261284 -/+ buffers/cache: 143972 598692 Swap: 1408152 96 1408056[root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 /tmp/swap file 131064 0 -3


    • 4. 使用 swapoff 關掉 swap file
    [root@www ~]# swapoff /tmp/swap [root@www ~]# swapoff /dev/hdc7 [root@www ~]# freetotal used free shared buffers cached Mem: 742664 450860 291804 0 45660 261284 -/+ buffers/cache: 143916 598748 Swap: 1020088 96 1019992 <==回復成最原始的樣子了!


    swap使用上的限制

    說實話,swap 在目前的壁紙計算機來講,存在的意義已經不大了!這是因為目前的 x86 主機所含的內存實在都太大了 (一般入門級至少也都有 512MB 了),所以,我們的 Linux 系統大概都用不到 swap 這個玩意兒的。不過,如果是針對服務器或者是工作站這些常年上線的系統來說的話,那么,無論如何,swap 還是需要創建的。

    因為 swap 主要的功能是當物理內存不夠時,則某些在內存當中所占的程序會暫時被移動到 swap 當中,讓物理內存可以被需要的程序來使用。另外,如果你的主機支持電源管理模式,也就是說,你的 Linux 主機系統可以進入『休眠』模式的話,那么,運行當中的程序狀態則會被紀錄到 swap 去,以作為『喚醒』主機的狀態依據!另外,有某些程序在運行時,本來就會利用 swap 的特性來存放一些數據段,所以, swap 來是需要創建的!只是不需要太大!

    不過, swap 在被創建時,是有限制的喔!

    • 在核心 2.4.10 版本以后,單一 swap 量已經沒有 2GB 的限制了,
    • 但是,最多還是僅能創建到 32 個 swap 的數量!
    • 而且,由于目前 x86_64 (64位) 最大內存尋址到 64GB,因此, swap 總量最大也是僅能達 64GB 就是了!

    文件系統的特殊觀察與操作

    文件系統實在是非常有趣的東西,鳥哥學了好幾年還是很多東西不很懂呢!在學習的過程中很多朋友在討論區都有提供一些想法!這些想法將他歸納起來有底下幾點可以參考的數據呢!


    boot sector 與 superblock 的關系

    在過去非常多的文章都寫到啟動管理程序是安裝到 superblock 內的,但是我們由官方的 How to 文件知道,圖解(圖 1.3.1)的結果是將可安裝啟動信息的boot sector (啟動扇區) 獨立出來,并非放置到 superblock 當中的!那么也就是說過去的文章寫錯了?這其實還是可以討論討論的!

    經過一些搜尋,鳥哥找到幾篇文章(非官方文件)的說明,大多是網友分析的結果啦!如下所示:(注10)

    • The Second Extended File System: http://www.nongnu.org/ext2-doc/ext2.html
    • Rob's ext2 documentation: http://www.landley.net/code/toybox/ext2.html
    • Life is different blog: ext2文件系統分析: http://www.qdhedu.com/blog/post/7.html

    這幾篇文章有幾個重點,歸納一下如下:

    • superblock 的大小為 1024 bytes;
    • superblock 前面需要保留 1024 bytes 下來,以讓啟動管理程序可以安裝。

    分析上述兩點我們知道 boot sector 應該會占有 1024 bytes 的大小吧!但是整個文件系統主要是依據 block 大小來決定的啊!因此要討論 boot sector 與 superblock 的關系時,不得不將 block 的大小拿出來討論討論喔!


    • block 為 1024 bytes (1K) 時:

    如果 block 大小剛好是 1024 的話,那么 boot sector 與 superblock 各會占用掉一個 block ,所以整個文件系統圖示就會如同圖 1.3.1 所顯示的那樣,boot sector 是獨立于 superblock 外面的!由于鳥哥在基礎篇安裝的環境中有個 /boot 的獨立文件系統在 /dev/hdc1 中,使用 dumpe2fs 觀察的結果有點像底下這樣(如果你是按照鳥哥的教學安裝你的 CentOS 時,可以發現相同的情況喔!):

    [root@www ~]# dumpe2fs /dev/hdc1 dumpe2fs 1.39 (29-May-2006) Filesystem volume name: /boot ....(中間省略).... First block: 1 Block size: 1024 ....(中間省略)....Group 0: (Blocks 1-8192)Primary superblock at 1, Group descriptors at 2-2Reserved GDT blocks at 3-258Block bitmap at 259 (+258), Inode bitmap at 260 (+259)Inode table at 261-511 (+260)511 free blocks, 1991 free inodes, 2 directoriesFree blocks: 5619-6129Free inodes: 18-2008 # 看到最后一個特殊字體的地方嗎? Group0 的 superblock 是由 1 號 block 開始喔!

    由上表我們可以確實的發現 0 號 block 是保留下來的,那就是留給 boot sector 用的啰!所以整個分割槽的文件系統分區有點像底下這樣的圖示:


    圖 6.1.1、1K block 的 boot sector 示意圖

    • block 大于 1024 bytes (2K, 4K) 時:

    如果 block 大于 1024 的話,那么 superblock 將會在 0 號!我們擷取本章一開始介紹 dumpe2fs 時的內容來說明一下好了!

    [root@www ~]# dumpe2fs /dev/hdc2 dumpe2fs 1.39 (29-May-2006) ....(中間省略).... Filesystem volume name: /1 ....(中間省略).... Block size: 4096 ....(中間省略)....Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-1Reserved GDT blocks at 2-626Block bitmap at 627 (+627), Inode bitmap at 628 (+628)Inode table at 629-1641 (+629)0 free blocks, 32405 free inodes, 2 directoriesFree blocks:Free inodes: 12-32416

    我們可以發現 superblock 就在第一個 block (第 0 號) 上頭!但是 superblock 其實就只有 1024bytes 嘛!為了怕浪費更多空間,因此第一個 block 內就含有 boot sector 與 superblock 兩者!舉上頭的表格來說,因為每個 block 占有 4K ,因此在第一個 block 內 superblock 僅占有 1024-2047( 由 0 號起算的話)之間的咚咚,至于 2048bytes 以后的空間就真的是保留啦!而 0-1023 就保留給 boot sector 來使用。


    圖 6.1.2、4K block 的 boot sector 示意圖

    因為上述的情況,如果在比較大的 block 尺寸(size)中,我們可能可以說你能夠將啟動管理程序安裝到 superblock所在的 block 號碼中!就是上表的 0 號啰!但事實上還是安裝到 boot sector 的保留區域中啦!所以說,以前的文章說啟動管理程序可以安裝到 superblock 內也不能算全錯~但比較正確的說法,應該是安裝到該 filesystem最前面的 1024 bytes 內的區域,就是 boot sector 這樣比較好!


    磁盤空間之浪費問題

    我們在前面的 block 介紹中談到了一個 block 只能放置一個文件,因此太多小文件將會浪費非常多的磁盤容量。但你有沒有注意到,整個文件系統中包括 superblock, inode table與其他中介數據等其實都會浪費磁盤容量喔!所以當我們在 /dev/hdc6 創建起 ext3 文件系統時,一掛載就立刻有很多容量被用掉了!

    另外,不知道你有沒有發現到,當你使用 ls -l 去查詢某個目錄下的數據時,第一行都會出現一個『total』的字樣!那是啥東西?其實那就是該目錄下的所有數據所耗用的實際 block 數量 * block 大小的值。我們可以透過 ll -s 來觀察看看上述的意義:

    [root@www ~]# ll -s total 104 8 -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg 8 -rw-r--r-- 2 root root 255 Jan 6 2007 crontab 4 lrwxrwxrwx 1 root root 12 Oct 22 13:58 crontab2 -> /etc/crontab 48 -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log 12 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog 4 -rw-r--r-- 1 root root 0 Sep 27 00:25 test1 8 drwxr-xr-x 2 root root 4096 Sep 27 00:25 test2 4 -rw-rw-r-- 1 root root 0 Sep 27 00:36 test3 8 drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4

    從上面的特殊字體部分,那就是每個文件所使用掉 block 的容量!舉例來說,那個 crontab 雖然僅有 255bytes ,不過他卻占用了兩個 block (每個 block 為 4K),將所有的 block 加總就得到 104Kbytes 那個數值了。如果計算每個文件實際容量的加總結果,其實只有 56.5K 而已~所以啰,這樣就耗費掉好多容量了!

    如果想要查詢某個目錄所耗用的所有容量時,那就使用 du 吧!不過 du 如果加上 -s 這個選項時,還可以依據不同的規范去找出文件系統所消耗的容量喔!舉例來說,我們就來看看 /etc/ 這個目錄的容量狀態吧!

    [root@www ~]# du -sb /etc 108360494 /etc <==單位是 bytes 喔![root@www ~]# du -sm /etc 118 /etc <==單位是 Mbytes 喔!

    使用 bytes 去分析時,發現到實際的數據占用約 103.3Mbytes,但是使用 block 去測試,就發現其實耗用了 118Mbytes,此時文件系統就耗費了約 15Mbytes 啰!這樣看的懂我們在講的數據了吧?


    利用 GNU 的 parted 進行分割行為

    雖然你可以使用 fdisk 很快速的將你的分割槽切割妥當,不過 fdisk 卻無法支持到高于 2TB 以上的分割槽!此時就得需要 parted 來處理了。不要覺得 2TB 你用不著! 2009 年的現在已經有單顆硬盤高達 2TB 的容量了!如果再搭配主機系統有內建磁盤陣列裝置,要使用數個 TB 的單一磁盤裝置也不是不可能的!所以,還是得要學一下這個重要的工具! parted !

    parted 可以直接在一行命令列就完成分割,是一個非常好用的命令!他的語法有點像這樣:

    [root@www ~]# parted [裝置] [命令 [參數]] 選項與參數: 命令功能: 新增分割:mkpart [primary|logical|extended] [ext3|vfat] 開始 結束 分割表 :print 刪除分割:rm [partition]范例一:以 parted 列出目前本機的分割表數據 [root@www ~]# parted /dev/hdc print Model: IC35L040AVER07-0 (ide) <==硬盤接口與型號 Disk /dev/hdc: 41.2GB <==磁盤文件名與容量 Sector size (logical/physical): 512B/512B <==每個扇區的大小 Partition Table: msdos <==分割表形式Number Start End Size Type File system Flags1 32.3kB 107MB 107MB primary ext3 boot2 107MB 10.6GB 10.5GB primary ext33 10.6GB 15.8GB 5240MB primary ext34 15.8GB 41.2GB 25.3GB extended5 15.8GB 16.9GB 1045MB logical linux-swap6 16.9GB 18.9GB 2056MB logical ext37 18.9GB 19.2GB 263MB logical linux-swap [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]

    上面是最簡單的 parted 命令功能簡介,你可以使用『 man parted 』,或者是『 parted /dev/hdc help mkpart 』去查詢更詳細的數據。比較有趣的地方在于分割表的輸出。我們將上述的分割表示意拆成六部分來說明:

  • Number:這個就是分割槽的號碼啦!舉例來說,1號代表的是 /dev/hdc1 的意思;
  • Start:起始的磁柱位置在這顆磁盤的多少 MB 處?有趣吧!他以容量作為單位喔!
  • End:結束的磁柱位置在這顆磁盤的多少 MB 處?
  • Size:由上述兩者的分析,得到這個分割槽有多少容量;
  • Type:就是分割槽的類型,有primary, extended, logical等類型;
  • File system:就如同 fdisk 的 System ID 之意。
  • 接下來我們嘗試來創建一個全新的分割槽吧!因為我們僅剩下邏輯分割槽可用,所以等一下底下我們選擇的會是 logical 的分割類型喔!

    范例二:創建一個約為 512MB 容量的邏輯分割槽 [root@www ~]# parted /dev/hdc mkpart logical ext3 19.2GB 19.7GB # 請參考前一表格的命令介紹,因為我們的 /dev/hdc7 在 19.2GB 位置結束, # 所以我們當然要由 19.2GB 位置處繼續下一個分割,這樣懂了吧? [root@www ~]# parted /dev/hdc print .....前面省略.....7 18.9GB 19.2GB 263MB logical linux-swap 8 19.2GB 19.7GB 502MB logical <==就是剛剛創建的啦!
    范例三:將剛剛創建的第八號磁盤分區槽刪除掉吧! [root@www ~]# parted /dev/hdc rm 8 # 這樣就刪除了!實在很厲害!所以這個命令的下達要特別注意! # 因為...命令一下去就立即生效了~如果寫錯的話,會哭死~

    關于 parted 的介紹我們就到這里啦!除非你有使用到大于 2TB 以上的磁盤,否則請愛用 fdisk 這個程序來進行分割喔!拜托拜托!


    重點回顧
    • 基本上 Linux 的正統文件系統為 Ext2 ,該文件系統內的信息主要有:
      • superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統的格式與相關信息等;
      • inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的 block 號碼;
      • block:實際記錄文件的內容,若文件太大時,會占用多個 block 。
    • Ext2 文件系統的數據存取為索引式文件系統(indexed allocation)
    • 需要碎片整理的原因就是文件寫入的 block 太過于離散了,此時文件讀取的效能將會變的很差所致。這個時候可以透過碎片整理將同一個文件所屬的 blocks 匯整在一起。
    • Ext2文件系統主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。
    • data block 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1K, 2K 及 4K 三種而已
    • inode 記錄文件的屬性/權限等數據,其他重要項目為: 每個 inode 大小均固定為 128 bytes; 每個文件都僅會占用一個 inode 而已;因此文件系統能夠創建的文件數量與 inode 的數量有關;
    • 文件的 block 在記錄文件的實際數據,目錄的 block 則在記錄該目錄底下文件名與其 inode 號碼的對照表;
    • 日志式文件系統 (journal) 會多出一塊記錄區,隨時記載文件系統的主要活動,可加快系統復原時間;
    • Linux 文件系統為添加效能,會讓主存儲器作為大量的磁盤高速緩存;
    • 實體鏈接只是多了一個文件名對該 inode 號碼的鏈接而已;
    • 符號鏈接就類似Windows的快捷方式功能。
    • 磁盤的使用必需要經過:分割、格式化與掛載,分別慣用的命令為:fdisk, mkfs, mount三個命令
    • 啟動自動掛載可參考/etc/fstab之配置,配置完畢務必使用 mount -a 測試語法正確否;

    本章習題:
    ( 要看答案請將鼠標移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
    • 情境模擬題一:復原本章的各例題練習,本章新增非常多 partition ,請將這些 partition 刪除,恢復到原本剛安裝好時的狀態。

      • 目標:了解到刪除分割槽需要注意的各項信息;
      • 前提:本章的各項范例練習你都必須要做過,才會擁有 /dev/hdc6, /dev/hdc7 出現;
      • 需求:熟悉 fdisk, umount, swapoff 等命令。

      由于本章處理完畢后,將會有 /dev/hdc6 與 /dev/hdc7 這兩個新增的 partition ,所以請刪除掉這兩個 partition 。刪除的過程需要注意的是:

    • 需先以 free / swapon -s / mount 等命令查閱, /dev/hdc6, /dev/hdc7 不可以被使用!如果有被使用,則你必須要使用umount 卸除文件系統。如果是內存置換空間,則需使用 swapon -s 找出被使用的分割槽,再以 swapoff 去卸除他!

    • 觀察 /etc/fstab ,該文件不能存在這兩個 partition;

    • 使用『 fdisk /dev/hdc 』刪除,注意,由于是邏輯分割槽,這些分割槽一定從 5 號開始連續編號,因此你最好不要從 6 號刪除!否則原本的 7 號在你刪除 6 號后,將會變成 6 號!因此,你應該由 7 號刪除掉,再刪除 6 號。

    • 情境模擬題二:由于我的系統原本分割的不夠好,我的用戶希望能夠獨立一個 filesystem 附掛在 /srv/myproject 目錄下。那你該如何創建新的 filesystem ,并且讓這個 filesystem 每次啟動都能夠自動的掛載到 /srv/myproject ,且該目錄是給 project 這個群組共享的,其他人不可具有任何權限。且該 filesystem 具有 5GB 的容量。

      • 目標:理解文件系統的建置、自動掛載文件系統與項目開發必須要的權限;
      • 前提:你需要進行過第七章的情境模擬才可以繼續本章;
      • 需求:本章的所有概念必須要清楚!

      那就讓我們開始來處理這個流程吧!

    • 首先,我們必須要使用 fdisk /dev/hdc 來創建新的 partition ,由于本章之前范例的 partition 已經在上一個練習中刪除,因此你應該會多出一個 /dev/hdc6 才對:『fdisk /dev/hdc』,然后按下『n 』,按下『Enter』選擇默認的啟始磁柱,按下『+5000M』創建 5GB 的磁盤分區槽,可以多按一次『p』看看是否正確,若無問題則按下『w』寫入分割表;

    • 避免重新啟動,因此使用『 partprobe 』強制核心升級分割表;如果屏幕出現類似:『end_request: I/O error dev fd0, sector 0 』的錯誤時,不要擔心啊!這個說明的是『找不到軟盤』,我們本來就沒有軟盤,所以這個錯誤是可以忽略的。

    • 創建完畢后,開始進行格式化的動作如下:『mkfs -t ext3 /dev/hdc6』,這樣就 OK 了!

    • 開始創建掛載點,利用:『 mkdir /srv/myproject 』來創建即可;

    • 編寫自動掛載的配置文件:『 nano /etc/fstab 』,這個文件最底下新增一行,內容如下:
      /dev/hdc6 /srv/myproject ext3 defaults 1 2

    • 測試自動掛載:『 mount -a 』,然后使用『 df 』觀察看看有無掛載即可!

    • 配置最后的權限,使用:『 chgrp project /srv/myproject 』以及『chmod 2770 /srv/myproject 』即可。

    簡答題部分:
    • 如果由于你的主機磁盤容量不夠大,你想要添加一顆新磁盤,并將該磁盤全部分割成單一分割槽,且將該分割槽掛載到 /home 目錄,你該如何處置? 詳細的流程可以分為硬件組裝、磁盤分區、格式化、數據搬移與掛載等。
      • 安裝硬盤:關掉 Linux 主機電源,若為 IDE 接口時,需要處理跳針 (jump) ,放入主機后插好硬盤的扁平電纜與電源線,重新啟動電源;
      • 磁盤分區:透過類似上述情境模擬二的動作,將整顆磁盤分區成單一主要分割槽,類似 /dev/sdb1 占有全部容量;
      • 格式化:透過 mkfs -t ext3 來格式化;
      • 數據搬移:由于原本的 /home 還會有數據存在,因此你可以 mount /dev/sdb1 /mnt ,再將 /home 的數據復制到 /mnt/ 中,例如:『 cp -a /home/* /mnt 』即可。復制完畢后卸除 /home 以及 /mnt
      • 重新掛載:編輯 /etc/fstab ,將 /home 所在的 filesystem 裝置改為 /dev/sdb1 之類的新分割槽,然后 mount -a測試看看是否正確,如果正確的話,才是順利結束了這次的動作。
    • 如果扇區 /dev/hda3 有問題,偏偏他是被掛載上的,請問我要如何修理此一扇區?
      umount /dev/hda3
      fsck /dev/hda3
    • 我們常常說,啟動的時候,『發現硬盤有問題』,請問,這個問題的產生是『filesystem 的損毀』,還是『硬盤的損毀』?
      特別需要注意的是,如果您某個 filesystem 里面,由于操作不當,可能會造成 Superblock 數據的損毀,或者是 inode 的架構損毀,或者是 block area 的記錄遺失等等,這些問題當中,其實您的『硬盤』還是好好的,不過,在硬盤上面的『文件系統』則已經無法再利用!一般來說,我們的 Linux 很少會造成 filesystem 的損毀,所以,發生問題時,很可能整個硬盤都損毀了。但是,如果您的主機常常不正常斷電,那么,很可能硬盤是沒問題的,但是,文件系統則有損毀之虞。此時,重建文件系統 (reinstall) 即可!不需要換掉硬盤啦! ^_^
    • 當我有兩個文件,分別是 file1 與 file2 ,這兩個文件互為 hard link 的文件,請問,若我將 file1 刪除,然后再以類似 vi 的方式重新創建一個名為 file1 的文件,則 file2 的內容是否會被更動?
      這是來自網友的疑問。當我刪除 file1 之后, file2 則為一個正規文件,并不會與他人共同分享同一個inode 與 block ,因此,當我重新創建一個檔名為 file1 時,他所利用的 inode 與 block 都是由我們的 filesystem 主動去搜尋 meta data ,找到空的 inode 與 block 來創建的,與原本的 file1 并沒有任何關連性喔!所以,新建的 file1 并不會影響 file2 呢!

    參考數據與延伸閱讀
    • 注1:根據The Linux Document Project的文件所繪制的圖示,詳細的參考文獻可以參考如下連結:
      Filesystem How-To: http://tldp.org/HOWTO/Filesystems-HOWTO-6.html
    • 注2:參考維基百科所得數據,鏈接網址如下:
      條目: Ext2 介紹 http://en.wikipedia.org/wiki/Ext2
    • 注3:PAVE為一套秀圖軟件,常應用于數值模式的輸出文件之再處理:
      PAVE 使用手冊: http://www.ie.unc.edu/cempd/EDSS/pave_doc/index.shtml
    • 注4:詳細的 inode 表格所定義的旗標可以參考如下連結:
      John's spec of the second extended filesystem: http://uranus.it.swin.edu.au/~jn/explore2fs/es2fs.htm
    • 注5:參考 Ext2 官網提供的解說文件,這份文件非常值得參考的!
      文章名稱:『Design and Implementation of the Second Extended Filesystem 』
      http://e2fsprogs.sourceforge.net/ext2intro.html
    • 注6:Red Hat 自己推出的白皮書內容:
      文章名稱:Whitepaper: Red Hat's New Journaling File System: ext3
      http://www.redhat.com/support/wpapers/redhat/ext3/
    • 注7:其他值得參考的 Ext2 相關文件系統文章之連結如下:
      The Second Extended File System - An introduction:http://www.freeos.com/articles/3912/
      ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable
      http://www.linuxplanet.com/linuxplanet/reports/3726/1/文件系統的比較:維基百科:http://en.wikipedia.org/wiki/Comparison_of_file_systems
    • 注8:NTFS 文件系統官網:Linux-NTFS Project: http://www.linux-ntfs.org/
    • 注9: Linux 核心所支持的硬件之裝置代號(Major, Minor)查詢:
      http://www.kernel.org/pub/linux/docs/device-list/devices.txt
    • 注10:與 Boot sector 及 Superblock 的探討有關的討論文章:
      The Second Extended File System: http://www.nongnu.org/ext2-doc/ext2.html
      Rob's ext2 documentation: http://www.landley.net/code/toybox/ext2.html
      Life is different blog: ext2文件系統分析: http://www.qdhedu.com/blog/post/7.html

    2002/07/15:第一次完成
    2003/02/07:重新編排與加入 FAQ
    2004/03/15:修改 inode 的說明,并且將連結檔的說明移動至這個章節當中!
    2005/07/20:將舊的文章移動到 這里 。
    2005/07/22:將原本的附錄一與附錄二移動成為附錄 B 啦!
    2005/07/26:做了一個比較完整的修訂,加入較完整的 ext3 的說明~
    2005/09/08:看到了一篇討論,說明 FC4 在默認的環境中,使用 mkswap 會有問題。
    2005/10/11:新添加了一個目錄的 link 數量說明!
    2005/11/11:添加了一個 fsck 的 -f 參數在里頭!
    2006/03/02:參考:這里的說明,將 ext2/ext3 最大文件系統由 16TB 改為 32TB。
    2006/03/31:添加了虛擬內存的相關說明在 這里
    2006/05/01:將硬盤扇區的圖做個修正,感謝網友 LiaoLiang 兄提供的信息!并加入參考文獻!
    2006/06/09:添加 hard link 不能鏈接到目錄的原因,詳情參考:http://phorum.study-area.org/viewtopic.php?t=12235
    2006/06/28:添加關于 loop device 的相關說明吶!
    2006/09/08:加入 mknod 內的裝置代號說明 ,以及列出 Linux 核心網站的裝置代號查詢。
    2008/09/29:原本的FC4系列文章移動到此處
    2008/10/24:由于軟盤的使用已經越來越少了,所以將 fdformat 及 mkbootdisk 拿掉了!
    2008/10/31:這個月事情好多~花了一個月才將數據整理完畢!修改幅度非常的大喔!
    2008/11/01:最后一節的利用 GNU 的 parted 進行分割行為誤植為 GUN !感謝網友阿賢的來信告知!
    2008/12/05:感謝網友 ian_chen 的告知,之前將 flash 當成 flush 了!真抱歉!已升級!
    2009/04/01:感謝討論局域網友提供的說明,鳥哥之前superblock 這里寫得不夠好,有訂正說明,請幫忙看看。
    2009/08/19:加入兩題情境模擬,重新修訂一題簡答題。

    2009/08/30:加入 du 的 -S 說明中。


    出處:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php

    總結

    以上是生活随笔為你收集整理的鸟哥的Linux私房菜(基础篇)- 第八章、Linux 磁盘与文件系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    亚洲日韩乱码中文无码蜜桃臀网站 | 无码人妻黑人中文字幕 | 欧美熟妇另类久久久久久不卡 | 人妻有码中文字幕在线 | 九九综合va免费看 | 中文久久乱码一区二区 | 国产做国产爱免费视频 | 亲嘴扒胸摸屁股激烈网站 | 两性色午夜视频免费播放 | 高潮毛片无遮挡高清免费视频 | 一本无码人妻在中文字幕免费 | 国产精品欧美成人 | 成人一区二区免费视频 | 欧美熟妇另类久久久久久多毛 | 国产精品人妻一区二区三区四 | 1000部啪啪未满十八勿入下载 | 欧美日韩久久久精品a片 | 野外少妇愉情中文字幕 | 久久综合网欧美色妞网 | 强辱丰满人妻hd中文字幕 | 亚洲国产精品毛片av不卡在线 | 老熟女重囗味hdxx69 | 午夜精品一区二区三区的区别 | 国产精品永久免费视频 | 在线a亚洲视频播放在线观看 | 一二三四社区在线中文视频 | 2020久久香蕉国产线看观看 | 狂野欧美性猛交免费视频 | 日日摸日日碰夜夜爽av | 欧美真人作爱免费视频 | аⅴ资源天堂资源库在线 | 97夜夜澡人人双人人人喊 | 精品国产aⅴ无码一区二区 | 国产一精品一av一免费 | 精品无码一区二区三区的天堂 | 欧美日本日韩 | 高清不卡一区二区三区 | 亚洲国产精品美女久久久久 | 亚洲成av人综合在线观看 | 在教室伦流澡到高潮hnp视频 | 国产电影无码午夜在线播放 | 欧美日韩一区二区三区自拍 | 亚洲精品一区国产 | 乱码av麻豆丝袜熟女系列 | 久久天天躁狠狠躁夜夜免费观看 | 97夜夜澡人人双人人人喊 | 亚洲国产精品一区二区美利坚 | 亚洲日本一区二区三区在线 | 国产在线一区二区三区四区五区 | 日本乱偷人妻中文字幕 | 日韩av激情在线观看 | 99re在线播放 | 99精品无人区乱码1区2区3区 | 亚洲熟悉妇女xxx妇女av | 国产手机在线αⅴ片无码观看 | 任你躁国产自任一区二区三区 | 日韩成人一区二区三区在线观看 | 中文无码成人免费视频在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 精品国产乱码久久久久乱码 | 一本大道伊人av久久综合 | 久久天天躁夜夜躁狠狠 | 永久免费精品精品永久-夜色 | 国产农村乱对白刺激视频 | 亚洲精品中文字幕乱码 | 俺去俺来也在线www色官网 | 国产超碰人人爽人人做人人添 | 婷婷丁香六月激情综合啪 | аⅴ资源天堂资源库在线 | 又色又爽又黄的美女裸体网站 | www一区二区www免费 | yw尤物av无码国产在线观看 | 亚洲精品无码人妻无码 | 无码午夜成人1000部免费视频 | 男女下面进入的视频免费午夜 | 日日橹狠狠爱欧美视频 | 国产情侣作爱视频免费观看 | 久久97精品久久久久久久不卡 | 人妻aⅴ无码一区二区三区 | 免费无码肉片在线观看 | 曰韩少妇内射免费播放 | 国产精品鲁鲁鲁 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 免费观看又污又黄的网站 | 国产精品福利视频导航 | 鲁一鲁av2019在线 | 色五月五月丁香亚洲综合网 | 欧美一区二区三区视频在线观看 | 在线亚洲高清揄拍自拍一品区 | 天海翼激烈高潮到腰振不止 | 97夜夜澡人人爽人人喊中国片 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 全黄性性激高免费视频 | 国产午夜无码视频在线观看 | 日韩精品乱码av一区二区 | 色欲久久久天天天综合网精品 | 久热国产vs视频在线观看 | 夜夜高潮次次欢爽av女 | 少妇无码一区二区二三区 | 老熟女重囗味hdxx69 | 国产午夜手机精彩视频 | 久久精品人人做人人综合试看 | 国产成人精品必看 | 蜜桃视频插满18在线观看 | 国产午夜手机精彩视频 | 欧美 日韩 人妻 高清 中文 | 老太婆性杂交欧美肥老太 | 中文字幕无线码 | 国产办公室秘书无码精品99 | а天堂中文在线官网 | 日本熟妇浓毛 | 亚洲爆乳大丰满无码专区 | 亚洲爆乳大丰满无码专区 | 欧美 日韩 人妻 高清 中文 | 久久国内精品自在自线 | 欧美熟妇另类久久久久久多毛 | 亚洲欧美精品aaaaaa片 | 久久久精品国产sm最大网站 | 色综合久久久久综合一本到桃花网 | 天天做天天爱天天爽综合网 | 亚洲欧美日韩国产精品一区二区 | 亚洲一区二区三区播放 | 国产精品亚洲专区无码不卡 | 日韩精品a片一区二区三区妖精 | 亚洲男女内射在线播放 | 国产电影无码午夜在线播放 | 少妇人妻偷人精品无码视频 | 中文字幕亚洲情99在线 | 精品久久久中文字幕人妻 | 亚洲精品鲁一鲁一区二区三区 | 人人妻人人澡人人爽欧美精品 | 88国产精品欧美一区二区三区 | 熟女少妇人妻中文字幕 | 特黄特色大片免费播放器图片 | 伊人色综合久久天天小片 | 久久国内精品自在自线 | 免费人成网站视频在线观看 | 老熟女乱子伦 | 人人妻人人藻人人爽欧美一区 | 久久99精品国产.久久久久 | 亚洲小说春色综合另类 | 亚洲欧洲中文日韩av乱码 | 夜先锋av资源网站 | 天天躁夜夜躁狠狠是什么心态 | 国产精品怡红院永久免费 | 中文字幕av无码一区二区三区电影 | 久在线观看福利视频 | 亚洲国产精品成人久久蜜臀 | 动漫av一区二区在线观看 | 日韩人妻无码中文字幕视频 | 中文久久乱码一区二区 | 成人免费视频一区二区 | 亚洲国产精品无码久久久久高潮 | 国产精品亚洲а∨无码播放麻豆 | 欧美性生交活xxxxxdddd | 国内精品人妻无码久久久影院 | 国产成人无码av片在线观看不卡 | 一二三四社区在线中文视频 | 久久人人爽人人人人片 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲国产精品成人久久蜜臀 | 高清不卡一区二区三区 | 免费看男女做好爽好硬视频 | 久久久久成人片免费观看蜜芽 | 国产国产精品人在线视 | 性色欲情网站iwww九文堂 | 日韩精品久久久肉伦网站 | 国产熟妇另类久久久久 | 久久综合激激的五月天 | 亚洲精品久久久久中文第一幕 | 色综合久久久无码网中文 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 激情综合激情五月俺也去 | 夜精品a片一区二区三区无码白浆 | 中文字幕无码乱人伦 | 国产午夜亚洲精品不卡下载 | 国产欧美熟妇另类久久久 | www国产亚洲精品久久网站 | 欧美黑人巨大xxxxx | 97久久超碰中文字幕 | 日日摸夜夜摸狠狠摸婷婷 | 欧美日韩人成综合在线播放 | 四虎永久在线精品免费网址 | 亚洲国产精品一区二区第一页 | 蜜臀av在线播放 久久综合激激的五月天 | 久久综合给久久狠狠97色 | 国产一区二区三区精品视频 | 成年美女黄网站色大免费视频 | 久久zyz资源站无码中文动漫 | 亚洲成av人片在线观看无码不卡 | 嫩b人妻精品一区二区三区 | 国产人妻精品午夜福利免费 | 久久99热只有频精品8 | 亚洲日韩av一区二区三区四区 | 久久zyz资源站无码中文动漫 | 欧美老妇交乱视频在线观看 | 欧美野外疯狂做受xxxx高潮 | 成人无码精品1区2区3区免费看 | 欧美成人高清在线播放 | 日本一卡二卡不卡视频查询 | 狂野欧美激情性xxxx | 中文字幕乱码人妻二区三区 | 日韩精品一区二区av在线 | 日本xxxx色视频在线观看免费 | 国产成人综合色在线观看网站 | 亚洲无人区一区二区三区 | 人妻少妇被猛烈进入中文字幕 | 亚洲色偷偷偷综合网 | 中文字幕乱码中文乱码51精品 | 丰腴饱满的极品熟妇 | 国产人妻精品一区二区三区 | 国产精品丝袜黑色高跟鞋 | 精品少妇爆乳无码av无码专区 | 强辱丰满人妻hd中文字幕 | 狠狠cao日日穞夜夜穞av | 亚洲精品无码人妻无码 | 国产婷婷色一区二区三区在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 一本久久a久久精品vr综合 | 亚洲理论电影在线观看 | 久久99精品国产.久久久久 | 成人试看120秒体验区 | 欧美freesex黑人又粗又大 | 日韩人妻无码一区二区三区久久99 | 国产成人亚洲综合无码 | 性生交大片免费看l | 美女扒开屁股让男人桶 | 中文字幕 亚洲精品 第1页 | 亚洲成a人片在线观看无码 | 中国大陆精品视频xxxx | 久久天天躁狠狠躁夜夜免费观看 | 亚洲精品中文字幕 | 成熟女人特级毛片www免费 | 欧美精品一区二区精品久久 | 好男人www社区 | 妺妺窝人体色www在线小说 | 青草视频在线播放 | 亚洲熟妇自偷自拍另类 | 波多野结衣乳巨码无在线观看 | 欧美日韩一区二区综合 | 成人无码视频免费播放 | 国产另类ts人妖一区二区 | 牲欲强的熟妇农村老妇女视频 | 少妇被黑人到高潮喷出白浆 | 亚欧洲精品在线视频免费观看 | aⅴ亚洲 日韩 色 图网站 播放 | 午夜福利试看120秒体验区 | 99久久99久久免费精品蜜桃 | 天堂а√在线地址中文在线 | 国产熟妇高潮叫床视频播放 | 久久zyz资源站无码中文动漫 | 成熟妇人a片免费看网站 | 亚洲精品鲁一鲁一区二区三区 | 色综合久久久久综合一本到桃花网 | 蜜臀av在线播放 久久综合激激的五月天 | 精品国偷自产在线视频 | 精品欧洲av无码一区二区三区 | 丰满人妻精品国产99aⅴ | 中文字幕av伊人av无码av | 秋霞特色aa大片 | 久久精品国产亚洲精品 | 老太婆性杂交欧美肥老太 | 一个人看的视频www在线 | 欧美性黑人极品hd | ass日本丰满熟妇pics | 无码人妻丰满熟妇区五十路百度 | 久久久久久av无码免费看大片 | 国产精品久久久午夜夜伦鲁鲁 | 伊人久久大香线蕉亚洲 | 欧美成人免费全部网站 | 久久精品人妻少妇一区二区三区 | aa片在线观看视频在线播放 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 欧美三级不卡在线观看 | 老司机亚洲精品影院无码 | 色一情一乱一伦一区二区三欧美 | 国产亚洲精品久久久闺蜜 | 国产激情精品一区二区三区 | 丁香啪啪综合成人亚洲 | 亚洲a无码综合a国产av中文 | 香蕉久久久久久av成人 | 久久国产精品二国产精品 | 麻豆国产人妻欲求不满 | 国产女主播喷水视频在线观看 | 国产在线一区二区三区四区五区 | 人人澡人人透人人爽 | 精品无码国产一区二区三区av | 国内精品人妻无码久久久影院蜜桃 | 东京热男人av天堂 | 无码人妻黑人中文字幕 | 成人无码影片精品久久久 | 精品人人妻人人澡人人爽人人 | 欧美国产亚洲日韩在线二区 | 日韩精品久久久肉伦网站 | 人人爽人人澡人人高潮 | 国产精品无码久久av | 天天av天天av天天透 | 亚洲理论电影在线观看 | 欧美自拍另类欧美综合图片区 | 久久久精品国产sm最大网站 | 成人精品视频一区二区 | 国产疯狂伦交大片 | 欧美成人午夜精品久久久 | 国产精品人人妻人人爽 | 男人扒开女人内裤强吻桶进去 | 成人动漫在线观看 | 丁香花在线影院观看在线播放 | 久久久久亚洲精品男人的天堂 | 亚洲欧美中文字幕5发布 | 国产高清不卡无码视频 | 欧美乱妇无乱码大黄a片 | 精品久久综合1区2区3区激情 | 99久久人妻精品免费二区 | a国产一区二区免费入口 | 熟妇女人妻丰满少妇中文字幕 | 98国产精品综合一区二区三区 | 综合人妻久久一区二区精品 | 无码一区二区三区在线观看 | 久久久国产一区二区三区 | 久久久精品欧美一区二区免费 | 国产香蕉97碰碰久久人人 | 精品乱码久久久久久久 | 色欲av亚洲一区无码少妇 | 一区二区三区高清视频一 | 国内揄拍国内精品少妇国语 | 亚洲s色大片在线观看 | 欧美日韩一区二区免费视频 | 国产亚洲精品久久久闺蜜 | 欧美 亚洲 国产 另类 | 亚洲熟妇自偷自拍另类 | 亚洲另类伦春色综合小说 | 一本色道久久综合狠狠躁 | 99视频精品全部免费免费观看 | 国产精品美女久久久网av | 成人性做爰aaa片免费看不忠 | 亚洲人成网站在线播放942 | 国产精品视频免费播放 | 国产激情综合五月久久 | 色 综合 欧美 亚洲 国产 | 国内精品久久毛片一区二区 | 中文字幕无码热在线视频 | 日本一区二区三区免费高清 | 亚洲男人av天堂午夜在 | 欧美日韩综合一区二区三区 | 久久久久人妻一区精品色欧美 | www一区二区www免费 | 老子影院午夜伦不卡 | 亚洲色欲色欲欲www在线 | 国产精品亚洲专区无码不卡 | 成人性做爰aaa片免费看不忠 | 色爱情人网站 | 在线精品亚洲一区二区 | 特黄特色大片免费播放器图片 | 娇妻被黑人粗大高潮白浆 | 亚洲一区二区三区 | 精品无码成人片一区二区98 | 无码午夜成人1000部免费视频 | 国产麻豆精品一区二区三区v视界 | 免费无码一区二区三区蜜桃大 | 国产午夜无码视频在线观看 | 中文字幕乱码亚洲无线三区 | 中文毛片无遮挡高清免费 | 精品久久久久久人妻无码中文字幕 | 中文精品无码中文字幕无码专区 | 蜜桃无码一区二区三区 | 俺去俺来也www色官网 | 精品日本一区二区三区在线观看 | 久久久www成人免费毛片 | 5858s亚洲色大成网站www | 免费观看激色视频网站 | 亚洲乱亚洲乱妇50p | 亲嘴扒胸摸屁股激烈网站 | 国产亚洲精品久久久闺蜜 | 亚洲国产精品毛片av不卡在线 | 久久久久免费精品国产 | 日韩av无码一区二区三区不卡 | 对白脏话肉麻粗话av | 狂野欧美性猛xxxx乱大交 | 国产卡一卡二卡三 | 亚洲精品成a人在线观看 | 国产一区二区三区四区五区加勒比 | 国产午夜无码视频在线观看 | 国产激情无码一区二区 | 国产成人精品无码播放 | 久久久婷婷五月亚洲97号色 | 丰满人妻精品国产99aⅴ | 人人妻人人藻人人爽欧美一区 | 国产精品99久久精品爆乳 | 国产精品理论片在线观看 | 高清国产亚洲精品自在久久 | 国产精品久久久久7777 | 久久亚洲中文字幕精品一区 | 搡女人真爽免费视频大全 | 精品无码av一区二区三区 | 精品无码国产自产拍在线观看蜜 | 亚洲欧美国产精品久久 | 极品尤物被啪到呻吟喷水 | 1000部夫妻午夜免费 | 性做久久久久久久久 | 国产精品a成v人在线播放 | 亚洲精品综合五月久久小说 | 永久黄网站色视频免费直播 | 亚洲爆乳精品无码一区二区三区 | 高清不卡一区二区三区 | 中文字幕 亚洲精品 第1页 | 婷婷六月久久综合丁香 | 精品久久久久香蕉网 | 中文字幕精品av一区二区五区 | 国产成人精品视频ⅴa片软件竹菊 | 婷婷五月综合缴情在线视频 | 亚洲色成人中文字幕网站 | 国产特级毛片aaaaaaa高清 | 久久久久久国产精品无码下载 | 性史性农村dvd毛片 | 伊人久久大香线蕉av一区二区 | 国产免费观看黄av片 | 精品偷拍一区二区三区在线看 | 狠狠综合久久久久综合网 | 欧美zoozzooz性欧美 | 强辱丰满人妻hd中文字幕 | 久久国产精品萌白酱免费 | 国产精品无码永久免费888 | 国语精品一区二区三区 | 天天躁夜夜躁狠狠是什么心态 | 亚洲精品欧美二区三区中文字幕 | 国产片av国语在线观看 | 无码国模国产在线观看 | 丰满少妇弄高潮了www | 奇米影视7777久久精品人人爽 | 亚洲午夜久久久影院 | 国产精品久久久久久亚洲毛片 | 日韩欧美中文字幕公布 | 夜精品a片一区二区三区无码白浆 | 成年美女黄网站色大免费视频 | 精品一二三区久久aaa片 | 2020久久香蕉国产线看观看 | 成人性做爰aaa片免费看 | 久精品国产欧美亚洲色aⅴ大片 | 欧美激情综合亚洲一二区 | 国产无av码在线观看 | 亚洲国产高清在线观看视频 | 日本乱人伦片中文三区 | 色老头在线一区二区三区 | 色综合久久久久综合一本到桃花网 | 未满成年国产在线观看 | 欧美日韩视频无码一区二区三 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲 高清 成人 动漫 | 国语自产偷拍精品视频偷 | 蜜桃无码一区二区三区 | 久久视频在线观看精品 | 波多野42部无码喷潮在线 | 精品久久久无码中文字幕 | 狠狠色噜噜狠狠狠狠7777米奇 | 精品久久综合1区2区3区激情 | 四虎永久在线精品免费网址 | 一本大道久久东京热无码av | 天下第一社区视频www日本 | 亚洲男人av天堂午夜在 | 波多野结衣av在线观看 | 少妇被黑人到高潮喷出白浆 | 欧美喷潮久久久xxxxx | 高中生自慰www网站 | 97无码免费人妻超级碰碰夜夜 | 狠狠cao日日穞夜夜穞av | 美女毛片一区二区三区四区 | 99麻豆久久久国产精品免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 午夜精品一区二区三区的区别 | 欧美精品无码一区二区三区 | 久久亚洲精品成人无码 | 国产又粗又硬又大爽黄老大爷视 | 日本xxxx色视频在线观看免费 | 性色av无码免费一区二区三区 | 日韩亚洲欧美中文高清在线 | 国精品人妻无码一区二区三区蜜柚 | 人妻aⅴ无码一区二区三区 | 亚洲一区二区三区在线观看网站 | 久久精品无码一区二区三区 | 国产精品国产自线拍免费软件 | 国产精品久久久久久亚洲毛片 | 亚洲色欲色欲天天天www | 欧美喷潮久久久xxxxx | 精品成人av一区二区三区 | 毛片内射-百度 | 国产乡下妇女做爰 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲熟妇自偷自拍另类 | 无码国产乱人伦偷精品视频 | 久久无码中文字幕免费影院蜜桃 | 未满小14洗澡无码视频网站 | 中文字幕av日韩精品一区二区 | 亚欧洲精品在线视频免费观看 | 青草青草久热国产精品 | 国产成人一区二区三区在线观看 | 蜜桃视频韩日免费播放 | 无码人妻少妇伦在线电影 | 少妇性l交大片欧洲热妇乱xxx | 国产精品久久国产精品99 | 国产亚洲精品久久久久久大师 | 伊人久久大香线蕉亚洲 | 色综合久久88色综合天天 | 免费观看激色视频网站 | 狠狠cao日日穞夜夜穞av | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文无码成人免费视频在线观看 | 精品一二三区久久aaa片 | 精品国产麻豆免费人成网站 | 美女毛片一区二区三区四区 | 精品厕所偷拍各类美女tp嘘嘘 | 日日碰狠狠躁久久躁蜜桃 | 久久99精品国产麻豆蜜芽 | 国产成人精品一区二区在线小狼 | 久久久久久a亚洲欧洲av冫 | 亚洲综合精品香蕉久久网 | 久久人人爽人人爽人人片ⅴ | 久久久久久亚洲精品a片成人 | 亚洲精品无码人妻无码 | 人人妻人人澡人人爽欧美一区 | 少妇人妻大乳在线视频 | 毛片内射-百度 | 精品久久久中文字幕人妻 | 成熟女人特级毛片www免费 | 中文字幕av伊人av无码av | 国产精品多人p群无码 | 我要看www免费看插插视频 | 人人超人人超碰超国产 | 好爽又高潮了毛片免费下载 | 曰韩无码二三区中文字幕 | 亚洲一区二区三区含羞草 | 欧美xxxx黑人又粗又长 | 99久久久无码国产aaa精品 | 国产在线精品一区二区高清不卡 | 亚洲国产综合无码一区 | 欧美freesex黑人又粗又大 | 丁香啪啪综合成人亚洲 | 国产成人无码av一区二区 | 国产色视频一区二区三区 | 精品国产国产综合精品 | 最新国产麻豆aⅴ精品无码 | 99国产欧美久久久精品 | 久久久久久久人妻无码中文字幕爆 | 双乳奶水饱满少妇呻吟 | 激情内射日本一区二区三区 | 色窝窝无码一区二区三区色欲 | 亚洲国产午夜精品理论片 | 少妇的肉体aa片免费 | 女人高潮内射99精品 | 女人被男人躁得好爽免费视频 | 国产麻豆精品一区二区三区v视界 | 亚洲精品一区三区三区在线观看 | 色综合久久久久综合一本到桃花网 | 亚洲日韩av片在线观看 | 成人无码视频免费播放 | 欧美性生交xxxxx久久久 | 亚洲综合精品香蕉久久网 | 久久久久久九九精品久 | 5858s亚洲色大成网站www | 99久久婷婷国产综合精品青草免费 | 欧美日本精品一区二区三区 | 久久精品人妻少妇一区二区三区 | 乱人伦中文视频在线观看 | 国产另类ts人妖一区二区 | 亚洲熟妇自偷自拍另类 | 人妻熟女一区 | 高潮毛片无遮挡高清免费 | 十八禁真人啪啪免费网站 | 日本在线高清不卡免费播放 | 蜜桃av抽搐高潮一区二区 | 亚洲精品午夜国产va久久成人 | 免费男性肉肉影院 | 欧美刺激性大交 | 日韩在线不卡免费视频一区 | 国产亚洲精品久久久久久 | 亚洲国产精品一区二区第一页 | 成人免费无码大片a毛片 | 亚洲熟女一区二区三区 | 高中生自慰www网站 | 日韩在线不卡免费视频一区 | 亚洲精品午夜无码电影网 | 婷婷五月综合缴情在线视频 | 巨爆乳无码视频在线观看 | 欧美熟妇另类久久久久久不卡 | 丰满护士巨好爽好大乳 | 欧美三级不卡在线观看 | 偷窥村妇洗澡毛毛多 | 久久午夜无码鲁丝片 | 中文字幕人妻无码一区二区三区 | 四虎永久在线精品免费网址 | 激情爆乳一区二区三区 | 老头边吃奶边弄进去呻吟 | 97精品人妻一区二区三区香蕉 | 无码人妻黑人中文字幕 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产99久久精品一区二区 | 亚洲成在人网站无码天堂 | 九九热爱视频精品 | 欧美日韩人成综合在线播放 | 人人澡人摸人人添 | 麻豆国产人妻欲求不满 | 人人妻人人澡人人爽欧美一区九九 | 天天做天天爱天天爽综合网 | 欧美性生交xxxxx久久久 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 欧美乱妇无乱码大黄a片 | 无遮挡啪啪摇乳动态图 | 九九久久精品国产免费看小说 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精华av午夜在线观看 | 国产人妻精品一区二区三区不卡 | 婷婷丁香六月激情综合啪 | 18精品久久久无码午夜福利 | 少妇无码一区二区二三区 | 天堂а√在线地址中文在线 | 正在播放老肥熟妇露脸 | 国产人妻精品一区二区三区不卡 | 国产精品.xx视频.xxtv | 国产精品.xx视频.xxtv | 樱花草在线播放免费中文 | 色婷婷综合中文久久一本 | 亚洲精品一区二区三区大桥未久 | 久久久av男人的天堂 | 亚洲成a人片在线观看无码3d | 午夜精品一区二区三区在线观看 | 国产xxx69麻豆国语对白 | а天堂中文在线官网 | 永久免费观看美女裸体的网站 | 日日噜噜噜噜夜夜爽亚洲精品 | 国精品人妻无码一区二区三区蜜柚 | 永久免费精品精品永久-夜色 | 亚洲日韩中文字幕在线播放 | 97色伦图片97综合影院 | 国产一区二区三区日韩精品 | 无码一区二区三区在线观看 | 人妻有码中文字幕在线 | 免费观看又污又黄的网站 | 久久97精品久久久久久久不卡 | 亚洲成在人网站无码天堂 | 国产无遮挡又黄又爽免费视频 | 国产成人久久精品流白浆 | 国产精品久久国产精品99 | 色婷婷综合中文久久一本 | 内射巨臀欧美在线视频 | 福利一区二区三区视频在线观看 | 九一九色国产 | 国产精品亚洲一区二区三区喷水 | 丝袜足控一区二区三区 | 亚洲欧洲日本综合aⅴ在线 | 伊人久久大香线蕉亚洲 | a片在线免费观看 | 亚洲精品综合五月久久小说 | 色诱久久久久综合网ywww | 在线a亚洲视频播放在线观看 | 亚洲精品国偷拍自产在线麻豆 | 红桃av一区二区三区在线无码av | 人妻少妇被猛烈进入中文字幕 | 国産精品久久久久久久 | 亚洲一区二区三区偷拍女厕 | www国产亚洲精品久久网站 | 毛片内射-百度 | 亚洲精品中文字幕久久久久 | 天天躁夜夜躁狠狠是什么心态 | 免费无码午夜福利片69 | 国产亚洲人成在线播放 | 成人毛片一区二区 | 中文字幕中文有码在线 | 亚洲精品一区二区三区在线观看 | 日本一区二区三区免费高清 | 激情五月综合色婷婷一区二区 | 午夜理论片yy44880影院 | 国产婷婷色一区二区三区在线 | 亚洲国产成人a精品不卡在线 | 久久久久久亚洲精品a片成人 | 国产午夜无码视频在线观看 | 高清不卡一区二区三区 | 亚洲日韩中文字幕在线播放 | 久久精品女人的天堂av | 国产精品美女久久久久av爽李琼 | 兔费看少妇性l交大片免费 | 97夜夜澡人人爽人人喊中国片 | 国产无套内射久久久国产 | 久久99国产综合精品 | av无码不卡在线观看免费 | 中文字幕av无码一区二区三区电影 | 少妇人妻大乳在线视频 | 亚洲成a人片在线观看无码3d | 国产成人久久精品流白浆 | 色狠狠av一区二区三区 | 中文字幕无码日韩欧毛 | 国产精品久久久午夜夜伦鲁鲁 | 曰本女人与公拘交酡免费视频 | 97色伦图片97综合影院 | 精品久久久无码中文字幕 | 最新国产麻豆aⅴ精品无码 | 国产三级久久久精品麻豆三级 | 久久精品一区二区三区四区 | 亚洲人成影院在线观看 | 强辱丰满人妻hd中文字幕 | 最新国产乱人伦偷精品免费网站 | 成人动漫在线观看 | 疯狂三人交性欧美 | а√资源新版在线天堂 | 5858s亚洲色大成网站www | 最近免费中文字幕中文高清百度 | 久久视频在线观看精品 | 亚洲熟妇色xxxxx欧美老妇y | 国产性生交xxxxx无码 | 国产手机在线αⅴ片无码观看 | 国产明星裸体无码xxxx视频 | 国产亚洲精品精品国产亚洲综合 | 丁香花在线影院观看在线播放 | 娇妻被黑人粗大高潮白浆 | 毛片内射-百度 | 国产精品人人妻人人爽 | 国产人成高清在线视频99最全资源 | 午夜精品久久久内射近拍高清 | 在线播放免费人成毛片乱码 | 国产熟妇高潮叫床视频播放 | 久久久久久久人妻无码中文字幕爆 | 四虎影视成人永久免费观看视频 | 纯爱无遮挡h肉动漫在线播放 | 亚洲精品久久久久久一区二区 | 99久久亚洲精品无码毛片 | 伊人久久大香线蕉亚洲 | 亚洲娇小与黑人巨大交 | 久久精品人人做人人综合试看 | 青青久在线视频免费观看 | 亚洲精品成人av在线 | 精品欧洲av无码一区二区三区 | 性做久久久久久久免费看 | 日韩av无码中文无码电影 | 自拍偷自拍亚洲精品10p | 成人三级无码视频在线观看 | 丰满人妻被黑人猛烈进入 | 国产av一区二区三区最新精品 | 亚洲精品国产精品乱码不卡 | 好男人www社区 | 美女极度色诱视频国产 | 免费中文字幕日韩欧美 | 成人免费视频视频在线观看 免费 | 999久久久国产精品消防器材 | 亚洲天堂2017无码 | 久久久久久av无码免费看大片 | 久久99久久99精品中文字幕 | 黄网在线观看免费网站 | 亚洲一区二区三区无码久久 | 老熟女重囗味hdxx69 | 人妻无码久久精品人妻 | 老熟妇仑乱视频一区二区 | 国产艳妇av在线观看果冻传媒 | 国产成人精品三级麻豆 | 人妻少妇精品无码专区二区 | 丰满人妻精品国产99aⅴ | 国产亚洲日韩欧美另类第八页 | 欧美丰满少妇xxxx性 | 中文字幕久久久久人妻 | 久久精品国产一区二区三区肥胖 | 久久婷婷五月综合色国产香蕉 | 国精产品一区二区三区 | 人人妻人人澡人人爽欧美一区 | 中文字幕无线码 | 欧美xxxxx精品 | 国产婷婷色一区二区三区在线 | 激情人妻另类人妻伦 | 亚洲日韩av一区二区三区中文 | 色欲av亚洲一区无码少妇 | 正在播放老肥熟妇露脸 | 青青久在线视频免费观看 | av无码电影一区二区三区 | 久久99精品国产麻豆蜜芽 | 欧美日韩久久久精品a片 | 久久99精品久久久久婷婷 | 亚洲一区av无码专区在线观看 | www国产亚洲精品久久久日本 | 人人妻人人藻人人爽欧美一区 | 狠狠色噜噜狠狠狠7777奇米 | 在线视频网站www色 | 欧美成人午夜精品久久久 | 午夜肉伦伦影院 | аⅴ资源天堂资源库在线 | 在线播放无码字幕亚洲 | 午夜性刺激在线视频免费 | 精品国精品国产自在久国产87 | 久久久中文字幕日本无吗 | 久久精品人人做人人综合试看 | 99久久精品无码一区二区毛片 | 国产午夜福利100集发布 | 婷婷丁香六月激情综合啪 | 久久精品国产日本波多野结衣 | 久久久久人妻一区精品色欧美 | 无码人妻精品一区二区三区下载 | 国产色xx群视频射精 | 亚洲大尺度无码无码专区 | 99久久婷婷国产综合精品青草免费 | av香港经典三级级 在线 | 久激情内射婷内射蜜桃人妖 | 偷窥日本少妇撒尿chinese | 国产精品igao视频网 | 成熟人妻av无码专区 | 国产亚av手机在线观看 | 亚洲国产精品毛片av不卡在线 | 日本丰满熟妇videos | 欧美人与动性行为视频 | 乌克兰少妇性做爰 | 精品一区二区三区无码免费视频 | 自拍偷自拍亚洲精品10p | 国产福利视频一区二区 | 人人妻人人藻人人爽欧美一区 | 亚洲国产午夜精品理论片 | 欧美人妻一区二区三区 | 天堂亚洲2017在线观看 | 欧美性生交活xxxxxdddd | 精品国产精品久久一区免费式 | 人人妻人人澡人人爽欧美精品 | 亚洲熟妇色xxxxx亚洲 | 欧美日韩综合一区二区三区 | 人人超人人超碰超国产 | 国产精品二区一区二区aⅴ污介绍 | 波多野结衣乳巨码无在线观看 | 中国女人内谢69xxxxxa片 | 男人和女人高潮免费网站 | 色老头在线一区二区三区 | 东京一本一道一二三区 | 国产97色在线 | 免 | 亚洲码国产精品高潮在线 | 日韩人妻无码一区二区三区久久99 | 国产精品久久久午夜夜伦鲁鲁 | 黑人玩弄人妻中文在线 | 中文字幕人成乱码熟女app | 强开小婷嫩苞又嫩又紧视频 | 秋霞成人午夜鲁丝一区二区三区 | 日本成熟视频免费视频 | yw尤物av无码国产在线观看 | 夜夜影院未满十八勿进 | 任你躁在线精品免费 | 爆乳一区二区三区无码 | 一本色道久久综合亚洲精品不卡 | 国产真实夫妇视频 | 亚洲自偷自拍另类第1页 | 乌克兰少妇性做爰 | 强伦人妻一区二区三区视频18 | 国产精品亚洲专区无码不卡 | 少妇人妻大乳在线视频 | 亚洲人成网站色7799 | 日韩精品无码一本二本三本色 | 亚洲欧美日韩综合久久久 | 亚洲综合无码一区二区三区 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲国产欧美国产综合一区 | 国产国语老龄妇女a片 | 久久久中文久久久无码 | 国产激情精品一区二区三区 | 99视频精品全部免费免费观看 | 国产尤物精品视频 | 黑人粗大猛烈进出高潮视频 | 永久免费精品精品永久-夜色 | 天天av天天av天天透 | 精品国产一区av天美传媒 | 国产凸凹视频一区二区 | 亚洲精品国产精品乱码不卡 | 暴力强奷在线播放无码 | 亚洲精品午夜国产va久久成人 | 久久国产精品萌白酱免费 | 日本肉体xxxx裸交 | 夜夜高潮次次欢爽av女 | 免费看少妇作爱视频 | 精品偷拍一区二区三区在线看 | 无码国产激情在线观看 | 久久精品女人天堂av免费观看 | 国产又爽又猛又粗的视频a片 | 成 人 网 站国产免费观看 | 97夜夜澡人人爽人人喊中国片 | 玩弄中年熟妇正在播放 | 夜精品a片一区二区三区无码白浆 | 亚洲色欲色欲天天天www | 亚洲中文字幕在线无码一区二区 | 亚洲国产日韩a在线播放 | 久久国产精品偷任你爽任你 | 亚洲日本va午夜在线电影 | 亚洲精品无码人妻无码 | 亚洲综合无码久久精品综合 | 极品嫩模高潮叫床 | 久久综合给合久久狠狠狠97色 | 亚洲综合伊人久久大杳蕉 | 日日躁夜夜躁狠狠躁 | 夜夜夜高潮夜夜爽夜夜爰爰 | 十八禁视频网站在线观看 | 国产成人无码专区 | 亚洲综合无码久久精品综合 | 激情内射日本一区二区三区 | 搡女人真爽免费视频大全 | 精品欧美一区二区三区久久久 | 人妻与老人中文字幕 | 99久久久无码国产aaa精品 | 免费无码av一区二区 | 国产超碰人人爽人人做人人添 | 国产xxx69麻豆国语对白 | 99久久精品国产一区二区蜜芽 | 色偷偷人人澡人人爽人人模 | 国产精品高潮呻吟av久久4虎 | 亚洲国产日韩a在线播放 | 日日碰狠狠躁久久躁蜜桃 | 在线 国产 欧美 亚洲 天堂 | 久久综合狠狠综合久久综合88 | a国产一区二区免费入口 | 成人片黄网站色大片免费观看 | 精品久久久久久人妻无码中文字幕 | 久久精品视频在线看15 | 55夜色66夜色国产精品视频 | 强辱丰满人妻hd中文字幕 | 久久精品女人天堂av免费观看 | 99久久久国产精品无码免费 | 伊人久久大香线蕉亚洲 | 日本熟妇乱子伦xxxx | 久久99精品久久久久久动态图 | 久久综合网欧美色妞网 | 国产精品久久久久9999小说 | 99在线 | 亚洲 | 妺妺窝人体色www婷婷 | 亚洲色欲色欲欲www在线 | 少妇人妻偷人精品无码视频 | 正在播放老肥熟妇露脸 | 兔费看少妇性l交大片免费 | 岛国片人妻三上悠亚 | 亚洲乱码中文字幕在线 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久国产精品二国产精品 | 欧美成人家庭影院 | 性做久久久久久久免费看 | 国产特级毛片aaaaaa高潮流水 | 成人亚洲精品久久久久软件 | 成熟女人特级毛片www免费 | 一个人看的www免费视频在线观看 | 一本大道伊人av久久综合 | 两性色午夜视频免费播放 | 精品成人av一区二区三区 | 熟妇女人妻丰满少妇中文字幕 | 激情五月综合色婷婷一区二区 | 老熟妇乱子伦牲交视频 | 中文字幕人妻无码一区二区三区 | www国产亚洲精品久久久日本 | 国产精品亚洲а∨无码播放麻豆 | 成熟妇人a片免费看网站 | 亚洲国产精品久久久天堂 | 无码人妻少妇伦在线电影 | 永久黄网站色视频免费直播 | 97精品人妻一区二区三区香蕉 | 亚洲精品www久久久 | 激情内射亚州一区二区三区爱妻 | 中文亚洲成a人片在线观看 | 九九在线中文字幕无码 | 亚洲熟熟妇xxxx | 日韩欧美群交p片內射中文 | 亚洲男人av香蕉爽爽爽爽 | 在教室伦流澡到高潮hnp视频 | 香港三级日本三级妇三级 | 欧美性生交活xxxxxdddd | 成人一区二区免费视频 | 天堂а√在线中文在线 | 亚洲中文字幕av在天堂 | 国产精品亚洲а∨无码播放麻豆 | 国产乱子伦视频在线播放 | 精品乱码久久久久久久 | 亚洲国产成人av在线观看 | 成在人线av无码免观看麻豆 | 又湿又紧又大又爽a视频国产 | 97久久超碰中文字幕 | 在线天堂新版最新版在线8 | 欧洲美熟女乱又伦 | 国产人妻大战黑人第1集 | 久久综合网欧美色妞网 | 国内精品一区二区三区不卡 | 亚洲va欧美va天堂v国产综合 | 午夜免费福利小电影 | 人人爽人人澡人人高潮 | 亚洲午夜福利在线观看 | 欧美日本精品一区二区三区 | 人妻体内射精一区二区三四 | а天堂中文在线官网 | 欧美日韩人成综合在线播放 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲欧美中文字幕5发布 | 中文字幕亚洲情99在线 | 久久久久成人片免费观看蜜芽 | 色一情一乱一伦一区二区三欧美 | 成人无码精品一区二区三区 | 亚洲一区二区三区播放 | 在线观看国产午夜福利片 | 色五月丁香五月综合五月 | 精品无码国产自产拍在线观看蜜 | 国产亚洲视频中文字幕97精品 | 无码国内精品人妻少妇 | 极品尤物被啪到呻吟喷水 | 亚洲伊人久久精品影院 | 搡女人真爽免费视频大全 | 色欲av亚洲一区无码少妇 | 欧美第一黄网免费网站 | 人人妻人人澡人人爽欧美一区九九 | 国产偷抇久久精品a片69 | 中文字幕人成乱码熟女app | 久久久久免费看成人影片 | 美女黄网站人色视频免费国产 | 最近免费中文字幕中文高清百度 | 无码人妻久久一区二区三区不卡 | 亚洲国产精品久久久久久 | 亚洲国产精品无码一区二区三区 | 国产精华av午夜在线观看 | 亚洲国产日韩a在线播放 | 午夜熟女插插xx免费视频 | 乱中年女人伦av三区 | 欧美喷潮久久久xxxxx | 乱码av麻豆丝袜熟女系列 | 国产精品久久久久久久9999 | 久久97精品久久久久久久不卡 | 精品一区二区三区波多野结衣 | 久久久久se色偷偷亚洲精品av | 国产欧美精品一区二区三区 | yw尤物av无码国产在线观看 | 亚洲无人区午夜福利码高清完整版 | 国产av一区二区精品久久凹凸 | 婷婷六月久久综合丁香 | 久久这里只有精品视频9 | 日本护士xxxxhd少妇 | 国产成人无码av在线影院 | 丰满少妇高潮惨叫视频 | 国产精品无码一区二区桃花视频 | 久久久久亚洲精品中文字幕 | 在线观看免费人成视频 | 日本护士xxxxhd少妇 | 国精品人妻无码一区二区三区蜜柚 | 高潮毛片无遮挡高清免费视频 | 国产猛烈高潮尖叫视频免费 | 国产熟妇高潮叫床视频播放 | 亚洲国产精品美女久久久久 | 国产成人精品三级麻豆 | 精品国产精品久久一区免费式 | 日日天日日夜日日摸 | 夜夜高潮次次欢爽av女 | 亚洲精品午夜无码电影网 | 四虎国产精品一区二区 | 国产在线精品一区二区三区直播 | 国产成人综合色在线观看网站 | 国产精品久久久久无码av色戒 | 无遮挡国产高潮视频免费观看 | 极品嫩模高潮叫床 | 麻豆国产人妻欲求不满 | 国产又爽又黄又刺激的视频 | 成人精品视频一区二区三区尤物 | 日本丰满护士爆乳xxxx | 亚洲综合无码久久精品综合 | 亚洲另类伦春色综合小说 | www一区二区www免费 | 国产精品久久久av久久久 | 高潮毛片无遮挡高清免费 | 亚洲日韩一区二区三区 | 久久99久久99精品中文字幕 | 丰满人妻精品国产99aⅴ | 国产人妻精品午夜福利免费 | 久久精品成人欧美大片 | 大胆欧美熟妇xx | 国产口爆吞精在线视频 | 亚洲国产成人av在线观看 | 亚洲综合在线一区二区三区 | 在线播放亚洲第一字幕 | 亚洲热妇无码av在线播放 | 成人无码视频在线观看网站 | 乱人伦中文视频在线观看 | 偷窥村妇洗澡毛毛多 | 欧美日韩色另类综合 | 欧美刺激性大交 | 精品国精品国产自在久国产87 | 波多野42部无码喷潮在线 | 亚洲精品中文字幕久久久久 | 中文无码成人免费视频在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产乱人无码伦av在线a | 丰满岳乱妇在线观看中字无码 | 精品无人区无码乱码毛片国产 | 久久人人爽人人人人片 | 久久久久99精品国产片 | 亚洲国产综合无码一区 | 曰本女人与公拘交酡免费视频 | 性色欲情网站iwww九文堂 | 丰满妇女强制高潮18xxxx | 偷窥日本少妇撒尿chinese | 无遮挡国产高潮视频免费观看 | 少妇性荡欲午夜性开放视频剧场 | 国产精品免费大片 | 久久精品国产大片免费观看 | 99久久人妻精品免费一区 | 久久久久人妻一区精品色欧美 | 国产人妖乱国产精品人妖 | 性欧美牲交xxxxx视频 | 99riav国产精品视频 | 一区二区传媒有限公司 | 亚欧洲精品在线视频免费观看 | 亚洲综合精品香蕉久久网 | 亚洲综合精品香蕉久久网 | 中文字幕乱妇无码av在线 | 日本精品高清一区二区 | 色婷婷欧美在线播放内射 | 国产成人无码av在线影院 | 伊人久久婷婷五月综合97色 | 国产电影无码午夜在线播放 | 国产成人无码午夜视频在线观看 | 国产又爽又黄又刺激的视频 | 永久黄网站色视频免费直播 | 国产一区二区三区日韩精品 | 久久精品人妻少妇一区二区三区 | 久久无码人妻影院 | 色噜噜亚洲男人的天堂 | 在线观看欧美一区二区三区 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲国产午夜精品理论片 | 午夜熟女插插xx免费视频 | 性色欲网站人妻丰满中文久久不卡 | 蜜桃av抽搐高潮一区二区 | 十八禁真人啪啪免费网站 | 18黄暴禁片在线观看 | 在教室伦流澡到高潮hnp视频 | 久久久久免费看成人影片 | 国产免费无码一区二区视频 | 激情内射日本一区二区三区 | 清纯唯美经典一区二区 | 宝宝好涨水快流出来免费视频 | 亚洲精品午夜无码电影网 | 日韩无码专区 | 国产av一区二区精品久久凹凸 | 国产黑色丝袜在线播放 | 亚洲一区二区三区在线观看网站 | 丰满少妇女裸体bbw | 欧美黑人性暴力猛交喷水 | 欧美黑人乱大交 | 中文字幕无线码 | 国产精品资源一区二区 | 精品国精品国产自在久国产87 | 欧美兽交xxxx×视频 | 中国女人内谢69xxxx | 99久久精品午夜一区二区 | 亚洲国产精品久久人人爱 | 国产无遮挡吃胸膜奶免费看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久久国产一区二区三区 | www一区二区www免费 | 激情综合激情五月俺也去 | 高潮毛片无遮挡高清免费 | 超碰97人人做人人爱少妇 | 国产亚洲精品久久久ai换 | 性欧美牲交xxxxx视频 | 红桃av一区二区三区在线无码av | 精品欧洲av无码一区二区三区 | 欧美精品国产综合久久 | 亚洲小说春色综合另类 | 欧美老熟妇乱xxxxx | 国内揄拍国内精品人妻 | 狠狠色噜噜狠狠狠7777奇米 | 国产乱人偷精品人妻a片 | 撕开奶罩揉吮奶头视频 | 伊在人天堂亚洲香蕉精品区 | 无码av免费一区二区三区试看 | 在线精品国产一区二区三区 | 捆绑白丝粉色jk震动捧喷白浆 | 18禁黄网站男男禁片免费观看 | 亚洲色欲色欲天天天www | 亚洲人交乣女bbw | 在教室伦流澡到高潮hnp视频 | 国产绳艺sm调教室论坛 | 国产人妻人伦精品1国产丝袜 | 亚洲区欧美区综合区自拍区 | 大地资源网第二页免费观看 | 爽爽影院免费观看 | 国产精品99爱免费视频 | 国产三级久久久精品麻豆三级 | 亚洲s码欧洲m码国产av | 一本久道久久综合婷婷五月 | 国产精品亚洲а∨无码播放麻豆 | 青青青爽视频在线观看 | 国产精品久久福利网站 | 亚洲成av人片天堂网无码】 | 亚洲aⅴ无码成人网站国产app | www成人国产高清内射 | 99re在线播放 | 丝袜 中出 制服 人妻 美腿 | 丝袜足控一区二区三区 | 成人无码影片精品久久久 | 澳门永久av免费网站 | 国产成人综合在线女婷五月99播放 | 国产人妻人伦精品1国产丝袜 | 亚洲自偷自偷在线制服 | 亚洲精品国产第一综合99久久 | 在线观看免费人成视频 | 两性色午夜免费视频 | 成人无码视频在线观看网站 | 国产精品亚洲一区二区三区喷水 | 十八禁真人啪啪免费网站 | 99久久99久久免费精品蜜桃 | 双乳奶水饱满少妇呻吟 | 樱花草在线社区www | 丰满肥臀大屁股熟妇激情视频 | 日日干夜夜干 | 欧美人与物videos另类 | 国产一区二区三区四区五区加勒比 | 亚洲欧美综合区丁香五月小说 | 老头边吃奶边弄进去呻吟 | 红桃av一区二区三区在线无码av | 日本成熟视频免费视频 | 日韩精品无码免费一区二区三区 | 波多野结衣av在线观看 | 欧美成人高清在线播放 | 亚洲成a人片在线观看无码3d | 国产莉萝无码av在线播放 | yw尤物av无码国产在线观看 | 国产偷国产偷精品高清尤物 | 少妇被粗大的猛进出69影院 | 精品欧美一区二区三区久久久 | 亚洲国产精品一区二区美利坚 | 国产成人无码专区 | 99er热精品视频 | 一本久久a久久精品亚洲 | 色婷婷久久一区二区三区麻豆 | 波多野42部无码喷潮在线 | 久久国产精品偷任你爽任你 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲精品欧美二区三区中文字幕 | 巨爆乳无码视频在线观看 | 学生妹亚洲一区二区 | 色婷婷综合激情综在线播放 | 国产卡一卡二卡三 | 免费男性肉肉影院 | 亚洲精品一区二区三区在线 | 无码吃奶揉捏奶头高潮视频 | 国产精品无码成人午夜电影 | 人人妻人人藻人人爽欧美一区 | 欧美放荡的少妇 | 51国偷自产一区二区三区 | www国产亚洲精品久久网站 | 日韩人妻无码一区二区三区久久99 | 欧美放荡的少妇 | 久久久久成人片免费观看蜜芽 | 午夜福利不卡在线视频 | 国产乱人无码伦av在线a | 扒开双腿疯狂进出爽爽爽视频 | 国产亚洲精品久久久久久大师 | 亚洲娇小与黑人巨大交 | 麻豆成人精品国产免费 | 亚洲 欧美 激情 小说 另类 | 亚洲精品久久久久久久久久久 | 色综合久久88色综合天天 | 亚洲一区二区三区香蕉 | 东北女人啪啪对白 | 亚洲色成人中文字幕网站 | 老熟妇乱子伦牲交视频 | 中文字幕乱码人妻无码久久 | 老太婆性杂交欧美肥老太 | 久久这里只有精品视频9 | 色婷婷综合中文久久一本 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产精品香蕉在线观看 | 97夜夜澡人人双人人人喊 | 无码中文字幕色专区 | 黑森林福利视频导航 | 激情爆乳一区二区三区 | 欧美亚洲日韩国产人成在线播放 | 女人被男人爽到呻吟的视频 | 欧美老熟妇乱xxxxx | 国产乱码精品一品二品 | 日本精品人妻无码77777 天堂一区人妻无码 | 精品乱码久久久久久久 | ass日本丰满熟妇pics | 久久99国产综合精品 | 曰韩无码二三区中文字幕 | 亚洲欧洲日本无在线码 | 99re在线播放 | 国产av无码专区亚洲a∨毛片 | 久久综合网欧美色妞网 | 久久久www成人免费毛片 | 欧美一区二区三区 | 久久亚洲日韩精品一区二区三区 | 一本久久伊人热热精品中文字幕 | 久久zyz资源站无码中文动漫 | 高潮毛片无遮挡高清免费 | 丰满人妻一区二区三区免费视频 | 日本在线高清不卡免费播放 | 午夜肉伦伦影院 | 亚洲精品午夜无码电影网 | 久久亚洲日韩精品一区二区三区 | 51国偷自产一区二区三区 | 欧美黑人乱大交 | 久久久国产一区二区三区 | 无码纯肉视频在线观看 | 久久久久国色av免费观看性色 | 中文字幕乱码亚洲无线三区 | 免费无码av一区二区 | 日韩人妻系列无码专区 | 一区二区三区乱码在线 | 欧洲 | 国产97在线 | 亚洲 | 亚洲啪av永久无码精品放毛片 | 中文字幕无码av激情不卡 | 乌克兰少妇xxxx做受 | 天下第一社区视频www日本 | 少妇被黑人到高潮喷出白浆 | 国内精品一区二区三区不卡 | 精品国精品国产自在久国产87 | a片免费视频在线观看 | 玩弄少妇高潮ⅹxxxyw | 男女性色大片免费网站 | 少妇激情av一区二区 | 国产日产欧产精品精品app | 国产真实乱对白精彩久久 | 亚洲精品成a人在线观看 | 久久综合给合久久狠狠狠97色 | 色婷婷综合激情综在线播放 | 亲嘴扒胸摸屁股激烈网站 | 久久亚洲a片com人成 | 久久久国产精品无码免费专区 | 国产成人精品一区二区在线小狼 | a片免费视频在线观看 | 亚洲男人av天堂午夜在 | 久久精品国产99精品亚洲 | 丰满人妻一区二区三区免费视频 | 波多野结衣aⅴ在线 | 久久亚洲中文字幕无码 | 无套内谢的新婚少妇国语播放 | 黑森林福利视频导航 | 国产精品多人p群无码 | 亚洲自偷精品视频自拍 | 国产精品人妻一区二区三区四 | 亚洲日本va午夜在线电影 | 国产精品久久国产精品99 | 国产乱码精品一品二品 | 欧美日韩一区二区三区自拍 | 日本精品人妻无码77777 天堂一区人妻无码 | 中文久久乱码一区二区 | 成人免费视频视频在线观看 免费 | 国产精品高潮呻吟av久久4虎 | 99久久亚洲精品无码毛片 | 免费网站看v片在线18禁无码 | 又大又紧又粉嫩18p少妇 | 欧美高清在线精品一区 | 67194成是人免费无码 | 伊人久久大香线蕉午夜 | 亚洲高清偷拍一区二区三区 | 日韩 欧美 动漫 国产 制服 | 国内少妇偷人精品视频 | 国产成人无码av一区二区 | 亚洲国产精品一区二区第一页 | 亚洲精品鲁一鲁一区二区三区 | 中文字幕日韩精品一区二区三区 | 人人妻人人澡人人爽精品欧美 | 国产精品久久国产精品99 | 国产97色在线 | 免 | 国产精品毛多多水多 | 国产成人综合色在线观看网站 | 人妻有码中文字幕在线 | 丰满诱人的人妻3 | 亚洲日韩av一区二区三区四区 | 国产va免费精品观看 | 国产电影无码午夜在线播放 | 国产亚洲精品久久久久久久 | 久久综合久久自在自线精品自 | 丰满少妇熟乱xxxxx视频 | 精品乱码久久久久久久 | 日韩av无码一区二区三区不卡 | 男人扒开女人内裤强吻桶进去 | 亚洲自偷自偷在线制服 | 欧美日韩一区二区免费视频 | 欧美日韩一区二区三区自拍 | 少妇人妻偷人精品无码视频 | 97se亚洲精品一区 | 天天做天天爱天天爽综合网 | 亚洲色偷偷偷综合网 | 少妇性俱乐部纵欲狂欢电影 | 日韩av激情在线观看 | 国内精品久久毛片一区二区 | 7777奇米四色成人眼影 | 亚洲成色在线综合网站 | 成年美女黄网站色大免费视频 | 亚洲熟女一区二区三区 | 亚洲码国产精品高潮在线 | 亚洲高清偷拍一区二区三区 | 成人精品天堂一区二区三区 | 亚洲成a人片在线观看日本 | 蜜桃视频韩日免费播放 | 九九在线中文字幕无码 | 国产免费观看黄av片 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | a片免费视频在线观看 | 亚洲成a人片在线观看无码3d | 亚洲の无码国产の无码步美 | 欧美乱妇无乱码大黄a片 | 久久综合给久久狠狠97色 | 狂野欧美激情性xxxx | 免费无码的av片在线观看 | 国产午夜福利亚洲第一 | 国产精品亚洲五月天高清 | 青草青草久热国产精品 | 中文字幕人妻无码一区二区三区 | 国产国产精品人在线视 | 性史性农村dvd毛片 | 亚洲精品国产品国语在线观看 | 又色又爽又黄的美女裸体网站 | 精品国产青草久久久久福利 | 人人妻人人藻人人爽欧美一区 | 东京无码熟妇人妻av在线网址 | 国产av无码专区亚洲awww | 久久久久久九九精品久 | 综合人妻久久一区二区精品 | 久久久精品人妻久久影视 | 成人欧美一区二区三区黑人免费 | 又粗又大又硬毛片免费看 | 国产成人无码专区 | 久久久精品成人免费观看 | av香港经典三级级 在线 | 2019午夜福利不卡片在线 | 久久久久成人片免费观看蜜芽 | 成人一区二区免费视频 | 人人妻人人澡人人爽欧美一区九九 | 亚洲成av人综合在线观看 | 中文毛片无遮挡高清免费 | 成人性做爰aaa片免费看不忠 | 无遮挡啪啪摇乳动态图 | 久久www免费人成人片 | 亚欧洲精品在线视频免费观看 | 水蜜桃色314在线观看 | 无码一区二区三区在线 | 亚洲成a人片在线观看日本 | 亚洲 欧美 激情 小说 另类 | 亚洲国产欧美日韩精品一区二区三区 | 久久99精品久久久久久动态图 | 九九综合va免费看 | 男人的天堂av网站 | 欧美精品一区二区精品久久 | 亚洲一区二区三区偷拍女厕 | 国产办公室秘书无码精品99 | 色欲人妻aaaaaaa无码 | 狠狠色欧美亚洲狠狠色www | 欧美日韩一区二区免费视频 | 亚洲国产欧美日韩精品一区二区三区 | 少妇无套内谢久久久久 | 麻豆精产国品 | 亚洲精品中文字幕乱码 | 黑人玩弄人妻中文在线 | 国产 精品 自在自线 | 四十如虎的丰满熟妇啪啪 | 国产精品久久久久久亚洲影视内衣 | 国产精品永久免费视频 | 麻豆果冻传媒2021精品传媒一区下载 | 国产真实夫妇视频 | 中文字幕人妻无码一夲道 | 国产激情无码一区二区 | 人妻有码中文字幕在线 | 日本大乳高潮视频在线观看 | 久久久精品欧美一区二区免费 | 激情爆乳一区二区三区 | 无码任你躁久久久久久久 | 亚洲国产欧美日韩精品一区二区三区 | 欧美激情内射喷水高潮 | 久久99国产综合精品 | 欧美乱妇无乱码大黄a片 | 亚洲精品久久久久中文第一幕 | 97精品人妻一区二区三区香蕉 | 麻豆国产丝袜白领秘书在线观看 | 黑人巨大精品欧美一区二区 | 国产激情无码一区二区 | 国产精品毛多多水多 | 蜜桃无码一区二区三区 | 东北女人啪啪对白 | 精品一二三区久久aaa片 | 99er热精品视频 | 精品水蜜桃久久久久久久 | 丝袜人妻一区二区三区 | 亚洲精品中文字幕 | 人人妻人人澡人人爽人人精品浪潮 | 白嫩日本少妇做爰 | 亚洲自偷精品视频自拍 | 永久免费精品精品永久-夜色 | 牛和人交xxxx欧美 | 97资源共享在线视频 | 天天摸天天碰天天添 | 欧美老熟妇乱xxxxx | 国产特级毛片aaaaaa高潮流水 | 蜜臀aⅴ国产精品久久久国产老师 | 色综合久久久久综合一本到桃花网 | 老熟妇乱子伦牲交视频 | 国产精品久久久午夜夜伦鲁鲁 | 欧美国产日产一区二区 | 日本精品少妇一区二区三区 | 成人一在线视频日韩国产 | 精品国产福利一区二区 | 久久97精品久久久久久久不卡 | 国产精品亚洲а∨无码播放麻豆 | 亚洲色偷偷男人的天堂 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产精品18久久久久久麻辣 | 成人免费视频视频在线观看 免费 | 狠狠色色综合网站 | 久久久久久av无码免费看大片 | 白嫩日本少妇做爰 | 欧美激情内射喷水高潮 | 在线观看免费人成视频 | 精品无码国产一区二区三区av | 亚洲国产av美女网站 | 麻豆md0077饥渴少妇 | 亚洲国产精品毛片av不卡在线 | 国产精品怡红院永久免费 | 狠狠躁日日躁夜夜躁2020 | 国产激情精品一区二区三区 | 中文精品无码中文字幕无码专区 | 欧美阿v高清资源不卡在线播放 | 99久久婷婷国产综合精品青草免费 | 麻豆成人精品国产免费 | 18禁止看的免费污网站 | 精品偷拍一区二区三区在线看 | 伊人久久婷婷五月综合97色 | 国产偷国产偷精品高清尤物 | 亚洲综合伊人久久大杳蕉 | 亚洲熟妇色xxxxx亚洲 | 国产精品99久久精品爆乳 | 高潮毛片无遮挡高清免费视频 | 亚洲а∨天堂久久精品2021 | 国产超碰人人爽人人做人人添 | 精品国产一区二区三区av 性色 | 中文字幕无码日韩欧毛 | 午夜精品久久久久久久久 | 夜夜影院未满十八勿进 | 久久99久久99精品中文字幕 | 精品国产成人一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 国产在线无码精品电影网 | 精品无码成人片一区二区98 | 亚洲中文字幕无码一久久区 | 成人性做爰aaa片免费看 | 又色又爽又黄的美女裸体网站 | 亚洲男女内射在线播放 | 人妻体内射精一区二区三四 | 久久www免费人成人片 | 久久精品丝袜高跟鞋 | 久久久精品成人免费观看 | 国产三级久久久精品麻豆三级 | 日韩精品无码免费一区二区三区 | 久久精品女人的天堂av | 暴力强奷在线播放无码 | 内射爽无广熟女亚洲 | 国产精品久久久久久亚洲影视内衣 | 性生交片免费无码看人 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲中文字幕久久无码 | 亚洲熟悉妇女xxx妇女av | 日本乱人伦片中文三区 | 国产麻豆精品精东影业av网站 | 成人毛片一区二区 | www国产精品内射老师 | 少妇被粗大的猛进出69影院 | 蜜臀av在线播放 久久综合激激的五月天 | 自拍偷自拍亚洲精品10p | 无遮挡啪啪摇乳动态图 | 欧美刺激性大交 | 一区二区传媒有限公司 | 亚洲自偷自偷在线制服 | a国产一区二区免费入口 | 日韩人妻无码中文字幕视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 日韩亚洲欧美中文高清在线 | 日本xxxx色视频在线观看免费 | 婷婷丁香六月激情综合啪 | 久久精品99久久香蕉国产色戒 | 国产偷国产偷精品高清尤物 | 日韩成人一区二区三区在线观看 | 99久久精品日本一区二区免费 | 亚洲精品一区二区三区在线观看 | 丝袜 中出 制服 人妻 美腿 | 久久午夜夜伦鲁鲁片无码免费 | 精品无码av一区二区三区 | 日本爽爽爽爽爽爽在线观看免 | 欧美日韩在线亚洲综合国产人 | 天堂亚洲免费视频 | 国内揄拍国内精品人妻 | 日本欧美一区二区三区乱码 | 55夜色66夜色国产精品视频 | 亚洲aⅴ无码成人网站国产app | 无码人妻久久一区二区三区不卡 | 精品国产青草久久久久福利 | 精品久久久无码人妻字幂 | 麻豆国产人妻欲求不满谁演的 | 男女下面进入的视频免费午夜 | 无码人妻黑人中文字幕 | 精品熟女少妇av免费观看 | 久久亚洲中文字幕精品一区 | 国产熟女一区二区三区四区五区 | 久久久久成人精品免费播放动漫 | 成人av无码一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 成人无码影片精品久久久 | 在线精品亚洲一区二区 | 女人被男人躁得好爽免费视频 | 国产亚洲精品久久久久久久久动漫 | 日韩av激情在线观看 | 成人精品视频一区二区三区尤物 | 久久熟妇人妻午夜寂寞影院 | 国产精品亚洲五月天高清 | 狠狠色噜噜狠狠狠7777奇米 | 在线播放亚洲第一字幕 | 少妇久久久久久人妻无码 | 超碰97人人做人人爱少妇 | 国产人妻精品一区二区三区不卡 | 中文字幕无线码 | 国产特级毛片aaaaaa高潮流水 | 欧美国产日韩久久mv | 亚洲精品鲁一鲁一区二区三区 | 任你躁国产自任一区二区三区 | 欧洲美熟女乱又伦 | 国产精品免费大片 | 99久久99久久免费精品蜜桃 | 国产农村妇女高潮大叫 | 2020最新国产自产精品 | 国产片av国语在线观看 | 曰本女人与公拘交酡免费视频 | 成人女人看片免费视频放人 | 天堂а√在线中文在线 | 国内揄拍国内精品少妇国语 | 性欧美牲交在线视频 | 天堂а√在线地址中文在线 | 久久伊人色av天堂九九小黄鸭 | 在线天堂新版最新版在线8 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲国产欧美国产综合一区 | 久久精品一区二区三区四区 | 野外少妇愉情中文字幕 | 丰满护士巨好爽好大乳 | 国产精品无码成人午夜电影 | 国产电影无码午夜在线播放 | 无遮挡啪啪摇乳动态图 | 人人妻人人澡人人爽欧美精品 | 爽爽影院免费观看 | 成人毛片一区二区 | 少妇性l交大片欧洲热妇乱xxx | 亚洲成av人在线观看网址 | 色综合久久88色综合天天 | 欧美人与禽猛交狂配 | 国产人妻人伦精品1国产丝袜 | 亚洲精品综合一区二区三区在线 | 香蕉久久久久久av成人 | 国产美女精品一区二区三区 | 六十路熟妇乱子伦 | 樱花草在线播放免费中文 | 在线播放无码字幕亚洲 | 西西人体www44rt大胆高清 | 久久亚洲a片com人成 | 欧美自拍另类欧美综合图片区 | 人人妻人人澡人人爽精品欧美 | 中文字幕乱码中文乱码51精品 | a片免费视频在线观看 | 国产真实夫妇视频 | 丰满少妇女裸体bbw | 激情人妻另类人妻伦 | 国产成人无码午夜视频在线观看 | 天堂а√在线地址中文在线 | 国产在线无码精品电影网 | 5858s亚洲色大成网站www | 动漫av网站免费观看 | 欧美人与善在线com | 国产精品资源一区二区 | 最新国产乱人伦偷精品免费网站 | 中文字幕av伊人av无码av | 婷婷五月综合激情中文字幕 | 少妇性l交大片 | 国产香蕉尹人视频在线 | 欧美激情综合亚洲一二区 | 成年美女黄网站色大免费全看 | 熟妇人妻激情偷爽文 | 好爽又高潮了毛片免费下载 | 国产成人综合在线女婷五月99播放 | 国产精品美女久久久久av爽李琼 | 曰本女人与公拘交酡免费视频 | 天天躁夜夜躁狠狠是什么心态 | 国产精品二区一区二区aⅴ污介绍 |