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