linux筆記--磁盤基礎管理

linux新加一塊磁盤,我們要使用的話一般要經過3步:

分區、格式化、掛載

對於一個系統管理者( 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
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): 1First cylinder (64-5005, default 64): <=[enter]
Using default value 64Last 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 bytes255 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): 2No 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 64Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048M

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 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 bytes255 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 bytes59 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 bytes255 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): 4Command (m for help): d
Partition number (1-4): 3Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 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=0Maximum filesystem blocks=51589939216 block groups32768 blocks per group, 32768 fragments per group15712 inodes per group
Superblock backups stored on blocks:        32768, 98304, 163840, 229376, 294912Writing inode tables: doneCreating journal (8192 blocks): done <==有日誌記錄
Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 34 mounts or180 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 blocks50202 blocks (5.00%) reserved for the super user
First data block=0Maximum filesystem blocks=53791948862 block groups16384 blocks per group, 16384 fragments per group4064 inodes per group
Superblock backups stored on blocks:        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816Writing inode tables: doneCreating journal (16384 blocks): doneWriting 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 ~]# dfFilesystem           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 ~]# dfFilesystem           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/home2 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/cdromumount: /media/cdrom: device is busyumount: /media/cdrom: device is busy

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



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

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