磁盤掛載與卸載 mount
磁盤掛載與卸載
磁盤分區完之後需要格式化,格式化之後需要掛載磁盤。
格式化後的磁盤恰是是一個塊設備文件,類型為b。
(擴展:LINUX中的七種文件類型
d. 目錄文件。
l. 符號鏈接(指向另一個文件,類似於瘟下的快捷方式)。
s. 套接字文件。
b . 塊設備文件,二進制文件。
c. 字符設備文件。
p. 命名管道文件。
- . 普通文件,或更準確地說,不屬於以上幾種類型的文件)
在掛載某個分區前需要先建立一個掛載點,這個掛載點是以目錄的形式出現的。一旦把某個分區掛載到了這個掛載點(目錄)下,那麽再往這個目錄寫數據時,則會寫到該分區中。需要註意!
在掛載該分區前,掛載點(目錄)下必須是個空目錄。其實目錄不為空並不影響所掛載分區的使用。但是一旦掛載上了,那麽該目錄下以前的東西就看不到了。只有卸載掉該分區後才能看到。
命令:mount
單一文件系統不應該被重復掛載在不同的掛載點中
單一目錄不應該重復掛載多個文件系統
作為掛載點的目錄理論上應該都是空目錄
語法:mount [-t vfstype] [-o options] device dir
1.-t vfstype 指定文件系統的類型,通常不必指定。
2.-o options 主要用來描述設備或檔案的掛接方式。
3.device 要掛接(mount)的設備。
4.dir設備在系統上的掛接點(mount point)。
選項:
-a:依照配置文件/etc/fstab 的數據將所有未掛載的磁盤都掛載上來
-l:單純輸入mount會顯示目前掛在信息,加上-l 可增列LABEL名稱
-t:可加上文件系統種類來指定欲掛載的類型
-n:在默認情況下,系統會將實際掛載的情況實時寫人/etc/mtab中,以利其他系統運行,但在某些情況下欲避免問題,會刻意不寫入,此時就要加-n選項。
-L:系統除了可以利用設備文件名之外,還可以利用文件系統的卷標名稱來進行掛載
-o:後面可以接一些掛載時額外加上的參數:
常用的選項有:-a、-t、-o.
如果不加任何選項,直接運行mount命令,會顯示如下信息:
[[email protected] ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
mount命令可以查看當前系統已經掛載的所有分區,以及分區文件系統的類型,掛載點和一些選項等信息。所以如果想知道某個分區的文件系統類型直接用該命令查看即可。
例:
建一個空目錄,然後在目錄裏建一個空白文檔。
[[email protected] ~]# mkdir /newdir
[[email protected] ~]# touch /newdir/newfile.txt
[[email protected] ~]# ls /newdir/newfile.txt
/newdir/newfile.txt
然後把格式化的 /dev/sdb5掛載到 /newdir上。
mount: wrong fs type, bad option, bad superblock on /dev/sdb5,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
不能完成掛載,根據以上掛載錯誤的提示:
[[email protected] ~]# dmesg |tail
Adding 2097144k swap on /dev/sda2. Priority:-1 extents:1 across:2097144k
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
ip6_tables: (C) 2000-2006 Netfilter Core Team
nf_conntrack version 0.5.0 (16100 buckets, 64400 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
eth0: link up
eth0: no IPv6 routers present
EXT4-fs (sdb5): bad block size 8192
EXT4-fs (sdb5): bad block size 8192
可以看到,我的/dev/sdb5指定的塊值8192不合法,所以只能重新格式化磁盤。
[[email protected] ~]# mke2fs -t ext4 -L TEST /dev/sdb5
使用默認塊值即可。繼續掛載sdb5。
[[email protected] ~]# mount /dev/sdb5 /newdir/
[[email protected] ~]# ls /newdir/
lost+found
[[email protected] ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% boot
/dev/sdb5 989M 18M 921M 2% /newdir
把/dev/sdb5掛載到/newdir後,原來在/neddir下的newfile.txt被覆蓋了,通過df -h可以看到剛才掛載的分區,我們也可以使用LABEL的方式掛載分區:
[[email protected] ~]# umount /newdir/
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
[[email protected] ~]# mount LABEL=TEST /newdir
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
/dev/sdb5 989M 18M 921M 2% /newdir
日常運維工作中會遇到這樣的情況,一臺服務器上新裝了兩塊磁盤,磁盤a(在服務器上顯示為sdc)和磁盤b(在服務器上顯示為sdd)。又一次把這兩塊磁盤都拔掉了,然後再重新插上,重啟機器,結果磁盤編號調換了。a變成了sdd,b變化才能了sdc(這是應為把磁盤差錯了卡槽)。
通過上面的學習,掛載磁盤是通過/dev/hdb1這樣的分區名字來掛載的,如果先前加入到了/etc/fstab中,結果系統啟動後則會掛載錯分區。
如何避免這種情況發生?這就要用到UUID,可以通過blkid命令獲取各分區的UUID:
blkid命令 獲取文件系統類型、UUID
在Linux下可以使用blkid命令對查詢設備上所采用文件系統類型進行查詢。blkid主要用來對系統的塊設備(包括交換分區)所使用的文件系統類型、LABEL、UUID等信息進行查詢。
[[email protected] ~]# blkid
/dev/sda1: UUID="37d8fe31-1cd8-4179-9aaa-1ee58284891d" TYPE="ext4"
/dev/sda2: UUID="1ac357d6-a735-468f-ba6c-1eabad6aa0f2" TYPE="swap"
/dev/sda3: UUID="51a8587e-7445-4ea8-85ef-bad6a1336748" TYPE="ext4"
/dev/sdb5: LABEL="TEST" UUID="b45f5443-75e4-4994-8743-4ba7fb25311e" TYPE="ext4"
這樣可以獲得全部磁盤分區的UUID,如果格式化的時候指定了LABLE則該命令也會顯示LABEL值,甚至連文件系統類型也會顯示。當然這個命令後面也可以指定哪個分區:
[[email protected] ~]# blkid /dev/sdb5
/dev/sdb5: LABEL="TEST" UUID="b45f5443-75e4-4994-8743-4ba7fb25311e" TYPE="ext4"
獲得UUID之後的使用方法:
[[email protected] ~]# umount /newdir
[[email protected] ~]# mount UUID="b45f5443-75e4-4994-8743-4ba7fb25311e" /newdir
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
/dev/sdb5 989M 18M 921M 2% /newdir
也可以把下面這行寫到/etc/fstab中
UUID=b45f5443-75e4-4994-8743-4ba7fb25311e /newdir ext4 defa ults 00
如果想讓某個分區開機後就自動掛載,有兩個辦法可以實現:在/etc/fstab中添加一行。如上例中那行;把掛載命令寫到/etc/re.d/rc.local文件中去,我會經常把想要開機啟動的命令加到這個文件中。系統啟動後會執行這個文件中的命令,所以只要想開機後運行什麽命令統統寫入到這個文件下面,直接放到最後面即可,把掛載的命令放在文件最後一行:
[[email protected] ~]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
[[email protected] ~]# vi /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
mount UUID="b45f5443-75e4-4994-8743-4ba7fb25311e" /newdir
~
按esc退出,輸入:wq,保存退出即可
以上兩種方法任選其一。
建議掛載磁盤分區的時候盡量使用UUID或者LABEL這兩種方法。
命令:umount
選項:-l,(非常有用,遇到不能卸載的情況用-l)
在上面的例子中,多次用到這個命令。
umount後面可以跟掛載點,也可以跟分區名(/dev/hdb1).
但是不可以跟LABEL和UUID。
[[email protected] ~]# umount /dev/sdb5
[[email protected] ~]# mount UUID="b45f5443-75e4-4994-8743-4ba7fb25311e" /newdir
[[email protected] ~]# umount /newdir
[[email protected] ~]# mount UUID="b45f5443-75e4-4994-8743-4ba7fb25311e" /newdir
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
本文出自 “12350027” 博客,謝絕轉載!
磁盤掛載與卸載 mount