1. 程式人生 > >Linux命令——mount

Linux命令——mount

前言

由於引入了LVM、RAID技術,導致OS時別到的磁碟已經不單純是事實意義上的物理磁碟(雖然OS認為他是物理盤)。傳統檔案系統與分割槽可以認為是1:1關係,但是現在一個分割槽可以有多個FS,一個FS也可以在多個分割槽。雖然問題變得複雜了,但是有一個根本問題自始至終都沒有改變,那就是掛載點(mount point),掛載點一定是目錄,該目錄為進入檔案系統的入口。對於掛載點的設定,最好按照如下要求做:

  • 單一檔案系統不應該被重複掛載在不同的掛載點(目錄)中;
  • 單一目錄不應該重複掛載多個檔案系統;
  • 要作為掛載點的目錄,理論上應該都是空目錄才是。(如果不是空目錄,新的檔案系統會隱藏就有資料。注意我用的關鍵詞是隱藏,並不是覆蓋,如果你取消掛載,原來的資料還在)

mount命令

-a :依照配置檔案 /etc/fstab 的資料將所有未掛載的磁碟都掛載上來

-t :指定欲掛載的型別。ext2, ext3, vfat, reiserfs, iso9660(光碟格式),nfs, cifs, smbfs(此三種為網路檔案系統型別)
-n :在預設的情況下,系統會將實際掛載的情況實時寫入 /etc/mtab 中,方便其他程式的執行。但在某些情況下(例如單人維護模式)為了避免問題,會刻意不寫入。此時就得要使用這個 -n 的選項了。
-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: 重新掛載,這在系統出錯,或重新升級引數時,很有用!

示例

mount /dev/hdc6 /mnt/hdc6 將/mnt/hdc6掛載到/dev/hdc6上

有的時候可以不用-t指定掛載的型別,因為Linux會自己推導。那他是怎麼做的呢?

由於檔案系統幾乎都有 superblock , Linux 可以通過分析 superblock,然後用自己的驅動程式(在/lib/modules/$(uname -r)/kernel/fs/目錄下)去測試掛載, 如果成功掛載,就立刻自動的使用該型別的檔案系統掛載。並不是所有型別的檔案系統都支援上述的掛載測試,支援的檔案系統型別寫在/etc/filesystems裡面。此外,還有一個檔案記錄Linux系統執行時已經載入了哪些檔案系統,即/proc/filesystems

重新掛載根目錄

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

將 / 重新掛載,並加入引數為 rw 與 auto
[[email protected] ~]# mount -o remount,rw,auto /
View Code

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

將某個目錄掛在到另一個目錄

看到這個功能時,第一印象就是這不是軟連線乾的活嗎? 事實上,有些程式可能不支援軟連線,這時候可以試試mount掛載目錄的辦法,注意這並不是在掛載檔案系統。這一用法需要使用--bind引數

將 /home 這個目錄暫時掛載到 /mnt/home 底下:
[[email protected] ~]# mkdir /mnt/home
[[email protected] ~]# mount --bind /home /mnt/home
[[email protected] ~]# 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

[[email protected] ~]# mount -l
/home on /mnt/home type none (rw,bind)
View Code

可以發現源、目標目錄指向同一個inode

umount

-f :強制卸除!可用在類似網路檔案系統 (NFS) 無法讀取到的情況下;

-n :不升級 /etc/mtab 情況下卸除。

[[email protected] ~]# umount /dev/hdc6      <==用裝置檔名來卸除
[[email protected] ~]# umount /media/cdrom   <==用掛載點來卸除
[[email protected] ~]# umount /mnt/flash     <==因為掛載點比較好記憶!
[[email protected] ~]# umount /dev/fd0       <==用裝置檔名較好記!
[[email protected] ~]# umount /mnt/home      <==一定要用掛載點!因為掛載的是目錄
View Code

device is busy報錯

有的時候解除安裝會提示“裝置正忙”錯誤

[[email protected] ~]# mount /dev/cdrom /media/cdrom
[[email protected] ~]# cd /media/cdrom
[[email protected] cdrom]# umount /media/cdrom
umount: /media/cdrom: device is busy
umount: /media/cdrom: device is busy
View Code

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