(学习总结)鸟哥基础篇第三版:第八章

由於分割表所在區塊僅有64 bytes容量,因此最多僅能有四組記錄區,每組記錄區記錄了該區段的啟始與結束的磁柱號碼。若將硬碟以長條形來看,然後將磁柱以直條圖來看,那麼那64 bytes的記錄區段有點像底下的圖示:(这里是把每个磁柱当成一个数字,也就是一个竖条,然后将这些磁柱合成在一起,形成的这个磁盘分割表。)


圖2.2.2、磁碟分割表的作用示意圖

第八章、Linux 磁碟與檔案系統管理

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

·          對磁碟進行分割,以建立可用的 partition ;

·          對該 partition 進行格式化( format ),以建立系統可用的 filesystem;

·          若想要仔細一點,則可對剛剛建立好的 filesystem 進行檢驗;

·          在 Linux 系統上,需要建立掛載點 ( 亦即是目錄 ),並將他掛載上來;


8.3.1 磁碟分割: fdisk

[root@www ~]# fdisk [-l] 裝置名稱

選項與參數:

-l  :輸出後面接的裝置所有的 partition 內容。若僅有 fdisk -l 時,

      則系統將會把整個系統內能夠搜尋到的裝置的 partition 均列出來。

這個 fdisk 只有 root 才能執行,此外,請注意,使用的『裝置檔名』請不要加上數字,因為 partition 是針對『整個硬碟裝置』而不是某個 partition 呢!所以執行『 fdisk/dev/hdc1 』就會發生錯誤啦!

1.      操作環境的說明

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

2.      注意事項:

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

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


8.3.2 磁碟格式化: mkfs, mke2fs

分割完畢後自然就是要進行檔案系統的格式化囉!格式化的指令非常的簡單,那就是『make filesystem, mkfs』這個指令啦!這個指令其實是個綜合的指令,他會去呼叫正確的檔案系統格式化工具軟體!

1.      mkfs

[root@www ~]# mkfs [-t 檔案系統格式] 裝置檔名

選項與參數:

-t  :可以接檔案系統格式,例如 ext3, ext2, vfat 等(系統有支援才會生效)

[root@www ~]# mkfs -t ext3 /dev/hdc6

vfat 可以用在 Windows/Linux 共用的 USB 隨身碟囉。

[root@www ~]# mkfs[tab][tab]

mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat

# 按下兩個[tab],會發現 mkfs 支援的檔案格式如上所示!可以格式化 vfat 喔!

mkfs会使用预设值来个格式化硬盘,如果想指定值,可以使用Ext2/Ext3 的公用程式,亦即 mke2fs 這個指令囉!

2.      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 檔案系統。

[root@www ~]# mke2fs -j -L"vbird_logical" -b 2048 -i 8192 /dev/hdc6


8.3.3    磁碟檢驗: fsck, badblocks

1.      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 檢查檔案系統後,若出現問題時,有問題的資料會被放置到這個目錄中喔!所以理論上這個目錄不應該會有任何資料,若系統自動產生資料在裡面,那...你就得特別注意你的檔案系統囉!

2.      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 裝置檔名』在進行格式化的時候處理磁碟表面的讀取測試,因此目前大多不使用這個指令囉!


8.3.4 磁碟掛載與卸載: mount,umount

[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 async

      remount:      重新掛載,這在系統出錯,或重新更新參數時,很有用!

 

範例二:觀察目前『已掛載』的檔案系統,包含各檔案系統的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 』這樣,你會解釋上述表格中的最後一行輸出結果了嗎?自己解釋一下先。^_^。


8.3.5 磁碟參數修訂: mknod,e2label, tune2fs, hdparm

1.        e2label

你就不可以隨意修改 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        <==改過來啦!

.....底下省略.....

2.        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 。

8.6 檔案系統的特殊觀察與操作

8.6.1 boot sector 與 superblock 的關係

在過去非常多的文章都寫到開機管理程式是安裝到 superblock 內的,但是我們由官方的 How to 文件知道,是將可安裝開機資訊的 bootsector (開機磁區) 獨立出來,並非放置到 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

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

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 ,所以整個檔案系統,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-2

  Reserved GDT blocks at 3-258

  Block bitmap at 259 (+258), Inode bitmap at 260 (+259)

  Inode table at 261-511 (+260)

  511 free blocks, 1991 free inodes, 2 directories

  Free blocks: 5619-6129

  Free 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-1

  Reserved GDT blocks at 2-626

  Block bitmap at 627 (+627), Inode bitmap at 628 (+628)

  Inode table at 629-1641 (+629)

  0 free blocks, 32405 free inodes, 2 directories

  Free 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 這樣比較好!


8.6.3 利用 GNU 的 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  Flags

 1      32.3kB  107MB   107MB   primary   ext3         boot

 2      107MB   10.6GB  10.5GB  primary   ext3

 3      10.6GB  15.8GB  5240MB  primary   ext3

 4      15.8GB  41.2GB  25.3GB  extended

 5      15.8GB  16.9GB  1045MB  logical   linux-swap

 6      16.9GB  18.9GB  2056MB  logical   ext3

 7      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 之意。

範例二:建立一個約為 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 這個程式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值