歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux磁盤和文件系統管理(3)_磁盤掛載 卸載

Linux磁盤和文件系統管理(3)_磁盤掛載 卸載

日期:2017/3/1 12:25:16   编辑:關於Linux
磁盤的掛載與卸載 掛載:將系統額外的文件系統通過根下的目錄與根文件系統建立起關聯關系,將該目錄成為進入新磁盤分區(即文件系統)的入口操作。 卸載:解除此關聯關系的過程。 掛載點 mount point:設備掛載的目錄 注意:掛載點在掛載後,其目錄下的原有文件和目錄將會暫時隱藏,等新分區卸載後,原有文件和目錄會再次顯示出來。所以建議 掛載點使用空目錄。 掛載 mount: mount [-l] 通過讀取/etc/mtab文件來顯示當前系統所有已經掛載的設備 [root@localhost test]# mount proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) /dev/sda3 on / type ext4 (rw,relatime,seclabel,data=ordered) /dev/sda2 on /usr type ext4 (rw,relatime,seclabel,data=ordered) ....省略... debugfs on /sys/kernel/debug type debugfs (rw,relatime) /dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered) /dev/sda5 on /home type ext4 (rw,relatime,seclabel,data=ordered) mount -a: 按照配置文件/etc/fstab的數據掛載所有沒有掛載的磁盤 mount [-fnrsvw] [-t vfstype] [-o options] device mount_point device :要掛載的設備 1 設備文件: /dev/sdb5 2 卷標: -L ‘label’ 3 uuid: -U ‘uuid’ 4 偽文件系統 5 文件路徑:綁定掛載 mount_point :掛載點 建議空目錄 選項: -l:顯示當前掛載信息時,增加Label列的顯示 -n:不寫入/etc/mtab,默認情況下,將實際掛載情況實時寫入/etc/mtab中 此時,如果想查看掛載的所有文件系統:cat /proc/mounts -t:指定將要掛載的文件系統類型 -L : 通過指定卷標label掛載 -r:以只讀方式掛載 -a:掛載在/etc/fstab中的所有文件系統 -f : 跳過系統掛載,試運行 -B:綁定一個目錄到另外一個目錄上 -o options 主要用來描述設備或檔案的掛接方式。 參數:   loop:用來把一個文件當成硬盤分區掛接上系統   ro:采用只讀方式掛接設備   rw:采用讀寫方式掛接設備   iocharset:指定訪問文件系統所用字符集 async:文件系統使用異步寫入 sync:文件系統使用同步寫入 auto,noauto:允許分區被使用mount -a 自動掛載 dev,nodev:是否允許此分區上創建設備文件 suid,nosuid:是否允許此分區上有suid/sgid的文件格式 user,nouser:是否允許在此分區下任何用戶執行mount defaults:默認值rw, suid, dev, exec, auto, nouser, and async. remount:重新掛載,多在系統出錯時,或更新參數時使用 示例
#按指定卷標掛載 -L 
[root@localhost ~]# mount -L 'mytest' /mnt/test1
[root@localhost ~]# mount | grep '/dev/sdb.'
30:/dev/sdb1 on /root/test_mount/test1 type ext4 (rw,relatime,seclabel,data=ordered)

#只讀方式掛載分區
[root@localhost ~]# mount -r /dev/sdb5  /mnt/test2
[root@localhost ~]# mount | grep '/dev/sdb.'
30:/dev/sdb1 on /root/test_mount/test1 type ext4 (rw,relatime,seclabel,data=ordered)
31:/dev/sdb5 on /root/test_mount/test2 type ext4 (ro,relatime,seclabel,data=ordered)

[root@localhost ~]# df
Filesystem 1K-blocksUsed Available Use% Mounted on
....省略...
/dev/sdb1  9993202564927944   1% /mnt/test1
/dev/sdb5  499656 784462176   1% /mnt/test2


#將/home目錄掛載到/mnt/test3下面
[root@localhost mnt]# mount -B /home/  /mnt/test3/
[root@localhost mnt]# ll /home/ /mnt/test3/
/home/:
total 32
drwx------. 2 hadoophadoop 4096 Sep  9 08:04 hadoop
drwx------. 2 root  root  16384 Aug 20 06:12 lost+found
drwx------. 2 roger roger  4096 Aug 20 06:34 roger
drwx------. 3 test1 test1  4096 Sep  7 04:28 test1
drwx------. 2 testuser1 testuser1  4096 Sep 13 18:03 testuser1

/mnt/test3/:
total 32
drwx------. 2 hadoophadoop 4096 Sep  9 08:04 hadoop
drwx------. 2 root  root  16384 Aug 20 06:12 lost+found
drwx------. 2 roger roger  4096 Aug 20 06:34 roger
drwx------. 3 test1 test1  4096 Sep  7 04:28 test1
drwx------. 2 testuser1 testuser1  4096 Sep 13 18:03 testuser1

umount:卸載命令 umount [-fn] DEVICE DEVICE 設備文件名 umount [-fn] MOUNT_POINT MOUNT_POINT 掛載點 參數: -f:強制卸載 -n:不更新/etc/mtab的情況下卸載 示例:
#設備名稱卸載
[root@localhost ~]# umount /dev/sdb1

#因為掛載的是目錄,所以只能同過掛載點卸載
[root@localhost ~]# umount /mnt/test3/
卸載時遇到設備被占用 [root@localhost ~]# umount /dev/sdb1 umount: /mnt/test3: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) 查看正在訪問指定掛載點的進程:
 # fuser -v MOUNT_POINT

[root@localhost ~]# fuser -v /mnt/test3/
USER PID ACCESS COMMAND
/mnt/test3:   root kernel mount /mnt/test3
root3356 ..c.. bash

終止所有正在訪問指定的掛載點的進程:
  # fuser -km MOUNT_POINT

[root@localhost ~]# fuser -km /mnt/test3/
/mnt/test3:3356c

#成功卸載
[root@localhost ~]# umount /dev/sdb1

補充說明: fuser命令:顯示所有正在使用著指定的file, file system 或者 sockets的進程信息 fuser [-fuv] [-a|-s] [-4|-6] [-c|-m|-n space] [ -k [-i] [-M] [-w] [-SIGNAL] ] 文件名/文件系統/sockets 參數: -k,--kill:殺死正在訪問的文件的進程 -i:交互模式 殺死進程前進行確認 -m:後面接的那個文件名會主動上提到該文件系統的最頂層,對umount不成功很有效 -u :進程號後圓括號中顯示進程擁有者 -v:輸出進程詳細信息 默認情況下,每個進程號後面都跟隨一個字母,該字母指示進程如何使用文件。 c 文件作為當前目錄 e 文件作為程序的可執行對象 r 文件作為根目錄 m 文件作為mmap文件或共享庫 示例:
[root@localhost ~]# fuser /mnt/
/mnt:   3427c
[root@localhost ~]# fuser -u /mnt/
/mnt:   3427c(root)
[root@localhost ~]# fuser -v /mnt/
USER PID ACCESS COMMAND
/mnt:  root3427 ..c.. bash
[root@localhost ~]# fuser -ki /mnt/
/mnt:   3427c
Kill process 3427 ? (y/N) n

掛載相關配置文件: /etc/fstab (file system table) 記錄是系統准備裝載文件系統,用來設置 開機掛載
[root@localhost ~]# cat /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Thu Aug 20 06:13:01 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=8306bbdb-4c6b-4975-8596-c3721eeb6998  /ext4defaults 1 1
UUID=4bfd1d98-b114-4685-84a0-d44130fb3128  /bootext4defaults 1 2
UUID=86be1f1b-e7b0-4d86-a743-7cc99ba332ec  /homeext4defaults 1 2
UUID=cc4474b4-402e-4e99-9b04-f55327d94faa  /usr ext4defaults 1 2
UUID=f885b330-d561-454f-90d2-259c4a81a5f9  swap swapdefaults 0 0

/etc/fstab文件中每一行定義一個文件系統 每行有6個字段: 要掛載的設備或偽文件系統掛載點文件系統類型掛載選項轉儲頻率自檢次序 要掛載的設備 設備名/dev/sda5, UUID=, Label=, 偽文件系統名 掛載點: 目錄 文件系統類型: ext2/ext3/ext4, xfs... 掛載選項: defaults,rw/ro, nouser,async/sync, auto/noauto... 轉儲頻率: 0代表不做備份 1代表每天進行dump操作 2代表不定期進行dump操作 自檢次序:fsck檢驗扇區 0表示不自檢 1表示最早自檢 2 優先級比1低 示例:
#編輯 /etc/fstab
[root@localhost ~]# vim /etc/fstab 
   /dev/sdb1 /mnt/test3  ext4defaults 0 0

# 掛載   
[root@localhost ~]# mount -a

#查看
[root@localhost ~]# df
Filesystem 1K-blocksUsed Available Use% Mounted on
/dev/sda3 9947976  554736   8864856   6% /
devtmpfs   4930160493016   0% /dev
.....
/dev/sdb1  9993202564927944   1% /mnt/test3

/etc/mtab文件: 記錄當前系統已經裝載的文件系統,包括操作系統建立的虛擬文件等;
[root@localhost ~]# cat /etc/mtab
rootfs / rootfs rw 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=493016k,nr_inodes=123254,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs rw,seclabel,nosuid,nodev,noexec,mode=755 0 0
....

當 mount 掛載分區、umount 卸載分區,都會實時更新 mtab,mtab 總是保持著當前系統中已掛載的分區信息,fdisk、df 這類程序,必須要讀取 mtab 文件,才能獲得當前系統中的分區掛載情況。還可以通過讀取/proc/mount也可以來獲取當前掛載信息。
Copyright © Linux教程網 All Rights Reserved