Linux磁盘和文件系统管理(3)_磁盘挂载 卸载


磁盘的挂载与卸载
 
挂载:将系统额外的文件系统通过根下的目录与根文件系统建立起关联关系,将该目录成为进入新磁盘分区(即文件系统)的入口操作。
 
卸载:解除此关联关系的过程。
 
挂载点 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也可以来获取当前挂载信息。

相关内容