1. 程式人生 > >Linux學習之CentOS(十二)------磁盤的分區、格式化、掛載(轉)

Linux學習之CentOS(十二)------磁盤的分區、格式化、掛載(轉)

為什麽 特定 fst gid ber back charset linux 系統 網絡文件系統

磁盤分區、格式化、掛載
磁盤分區
新增分區
查詢分區
刪除分區
磁盤格式化
mkfs
mke2fs
磁盤掛載與卸載
mount
umount

磁盤的分區、格式化、掛載

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

  1. 對磁盤進行分區,以創建可用的 partition ;
  2. 對該 partition 進行格式化( format ),以創建系統可用的 filesystem;
  3. 在 Linux 系統上,需要創建掛載點 ( 亦即是目錄 ),並將他掛載上來;

磁盤分區: 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):     <==等待你的輸入!
Command (m for help): m   <== 輸入 m 後,就會看到底下這些命令介紹
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==刪除一個partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一個partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上顯示分區表
   q   quit without saving changes   <==不儲存離開fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition‘s system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==將剛剛的動作寫入分區表
   x   extra functionality (experts only)
技術分享圖片

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

新增磁盤分區

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

開始新增,我們先新增一個 Primary 的分區槽,且指定為 4 號看看

技術分享圖片
[root@www ~]# fdisk /dev/hdc
Command (m for help): n
Command action            <==因為是全新磁盤,因此只會問extended/primary而已
   e   extended
   p   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): 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/hdc4               1          63      506016   83  Linux
# 註意!只有 4 號! 1 ~ 3 保留下來了!
技術分享圖片

繼續新增一個,這次我們新增 Extended 的分區槽好了

技術分享圖片
Command (m for help): n
Command action
   e   extended
   p   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): 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              64        5005    39696615    5  Extended
/dev/hdc4               1          63      506016   83  Linux
# 如上所示,所有的磁柱都在 /dev/hdc1 裏面啰!
技術分享圖片

這次我們隨便新增一個 2GB 的分區槽看看

技術分享圖片
Command (m for help): n
Command action
   l   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 action
   l   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): +2048M

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              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 就能夠離開啰~
技術分享圖片

一般來說創建分區槽的形式會有底下的數種狀況:

  • 1-4 號尚有剩余,且系統未有 extended:
  • 此時會出現讓你挑選 Primary / Extended 的項目,且你可以指定 1~4 號間的號碼;
  • 1-4 號尚有剩余,且系統有 extended:
  • 此時會出現讓你挑選 Primary / Logical 的項目;若選擇 p 則你還需要指定 1~4 號間的號碼; 若選擇 l(L的小寫) 則不需要配置號碼,因為系統會自動指定邏輯分區槽的文件名號碼;
  • 1-4 沒有剩余,且系統有 extended:
  • 此時不會讓你挑選分區槽類型,直接會進入 logical 的分區槽形式。

查看分區表信息

技術分享圖片
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 之內;

查詢系統內的所有 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 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

Disk /dev/sda: 8313 MB, 8313110528 bytes
59 heads, 58 sectors/track, 4744 cylinders
Units = cylinders of 3422 * 512 = 1752064 bytes

   Device 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 才對!

刪除磁盤分區

刪除磁盤分區,應該怎麽做?

  1. fdisk /dev/hdc :先進入 fdisk 畫面;
  2. p :先看一下分區槽的信息,假設要殺掉 /dev/hdc1;
  3. d :這個時候會要你選擇一個 partition ,就選 1 啰!
  4. w (or) q :按 w 可儲存到磁盤數據表中,並離開 fdisk ;當然啰, 如果你反悔了,呵呵,直接按下 q 就可以取消剛剛的刪除動作了!
技術分享圖片
# 練習一: 先進入 fdisk 的畫面當中去!
[root@www ~]# fdisk /dev/hdc

# 練習二: 先看看整個分區表的情況是如何
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

# 練習三: 按下 d 給他刪除吧!
Command (m for help): d
Partition number (1-5): 4

Command (m for help): d
Partition number (1-4): 3

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/hdc5 是由 /dev/hdc4 所衍生出來的邏輯分區槽,因此 /dev/hdc4 被刪除,
# /dev/hdc5 就自動不見了!最終就會剩下兩個分區槽而已喔!

Command (m for help): q
# 鳥哥這裏僅是做一個練習而已,所以,按下 q 就能夠離開啰~
技術分享圖片

磁盤格式化

分區完畢後自然就是要進行文件系統的格式化啰!格式化的命令非常的簡單,那就是『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, 294912

Writing inode tables: done
Creating journal (8192 blocks): done <==有日誌記錄
Writing superblocks and filesystem accounting information: done

This 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, 802816

Writing 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....』不但容易記憶,而且就非常好用啰!

磁盤掛載與卸載

mount

掛載點目錄是進入磁盤分區槽(其實是文件系統啦!)的入口就是了。不過要進行掛載前,你最好先確定幾件事:

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

尤其是上述的後兩點!如果你要用來掛載的目錄裏面並不是空的,那麽掛載了文件系統之後,原目錄下的東西就會暫時的消失。 舉個例子來說,假設你的 /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 async
      remount:      重新掛載,這在系統出錯,或重新升級參數時,很有用!
技術分享圖片

用默認的方式,將剛剛創建的 /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 』

掛載 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』比較正確喔!

重新掛載根目錄

整個目錄樹最重要的地方就是根目錄了,所以根目錄根本就不能夠被卸除的!問題是,如果你的掛載參數要改變, 或者是根目錄出現『只讀』狀態時,如何重新掛載呢?最可能的處理方式就是重新啟動 (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 的意思喔!

使用 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
技術分享圖片

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 。

轉自http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_3.php

Linux學習之CentOS(十二)------磁盤的分區、格式化、掛載(轉)