Linux 挂载和卸载设备操作
常用设备名
设备在 Linux 系统中显示为文件,常见设备以及设备在系统中文件名如下:
| 设备 | 设备在系统内的文件名 |
|---|---|
| IDE 硬盘 | /dev/hd[a-d] |
| SCSI/SATA/USB 硬盘 | /dev/sd[a-p] |
| U 盘 | /dev/sd[a-p] |
| 软驱 | /dev/fd[0-7] |
| 打印机 | 25 针:/dev/lp[0-2] USB:/dev/usb/lp[0-15] |
| 鼠标 | USB:/dev/usb/mouse[0-15] PS2:/dev/psaux |
| 当前 CD/DVD ROM | /dev/cdrom |
| 当前鼠标 | /dev/mouse |
| 磁带机 | IDE:/dev/ht0 SCSI:/dev/st0 |
挂载点
在 Linux 中,挂载是将一个目录作为进入点,将磁盘分区的数据放置在该目录下,进入该目录等同于读取该分区中的内容。进入点的目录被称为挂载点,也就是虚拟目录中用于分配额外存储设备的目录。
例如,磁盘 1 挂载到根目录/,磁盘 2 挂载到/ext333目录,则/ext333目录下的文件最上层目录是/ext333,而不是/:
[root@101c7 ext333]$ ls -lid /ext333/
2 drwxr-xr-x. 3 root root 4096 Sep 9 15:37 /ext333/
ext文件系统最顶层目录的 inode 一般为 2 号,而xfs文件系统最顶层目录的 inode 一般为 128 号。由于同一个文件系统中某个 inode 只会对应一个文件,因此可以通过 inode 号码来确认不同文件名是否为相同文件。
挂载设备
硬盘格式化后需要挂载在目录中才能访问,磁盘挂载前需要注意以下事项:
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中。
- 单一目录不应该重复挂载多个文件系统。
- 作为挂载点的目录理论上应该都是空目录。
如果用于挂载的目录不为空,则挂载文件系统后,原目录下的内容将暂时无法访问。
mount命令可用选项如下:
| 选项 | 说明 |
|---|---|
-a |
依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来 |
-l |
显示 Label 名称 |
-t |
加上文件系统类型来指定欲挂载的类型 |
-n |
默认系统会将实时挂载的情况实时写入/etc/mtab中。-n可以取消写入 |
-L |
利用文件系统的卷标名来挂载 |
-o |
后面接一些挂载时额外加上的参数,比如账号、密码、权限等 |
-o后接的可挂载参数如下:
| 参数 | 说明 |
|---|---|
ro/rw |
挂载为只读或可读写 |
async/sync |
修改默认写入方式同步或异步,默认异步 |
auto/noauto |
允许此分区被以mount -a自动挂载 |
dev/nodev |
是否允许分区上可创建设备文件,dev为允许 |
suid/nosuid |
是否允许含有 suid/sgid 的文件格式 |
exec/noexec |
是否允许拥有可执行文件 |
user/nouser |
是否允许此分区让任何用户执行mount,一般只有root可用mount |
defaults |
默认值为rw,suid,dev,exec,auto,nouser,async |
remount |
重新挂载,重新更新参数时可以重新挂载 |
例如将/dev/sdb4挂载到/root/sdb4m文件夹上:
[root@101c7 ~]$ mount /dev/sdb4 /root/sdb4m/
[root@101c7 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 1038336 190536 847800 19% /boot
tmpfs 386128 0 386128 0% /run/user/0
/dev/sdb4 92580 332 87128 1% /root/sdb4m
查看挂载情况:
[root@101c7 ~]$ mount -l | grep sdb
/dev/sdb4 on /root/sdb4m type ext3 (rw,relatime,seclabel,data=ordered) [boss]
重新挂载
如果进入维护模式,根目录以只读状态挂载的,可以使用重挂载功能将其挂载成可读写:
[root@101c7 ~]$ mount -o remount,rw,auto /
卸载设备
有些设备例如 CD 光驱,必须卸载了才能退出来。可以使用umount来卸载设备。
使用-f参数强制卸载,例如卸载硬盘sdb4:
[root@101c7 ~]$ umount -f /root/sdb4m/
如果加入-f卸载不掉还可以使用-l参数试试。
开机挂载
开机配置文件/etc/fstab实际上将挂载记录到/etc/mtab与/proc/mounts这两个文件中。
系统挂载的限制如下:
- 根目录
/必须挂载,并且必须先于其他挂载点进行挂载。 - 挂载点必须为已存在的目录。
- 每个挂载点在同一时间内,只能挂载一次。
- 每个分区在同一时间内,只能挂载一次。
- 若要进行卸载,必须先将工作目录移到挂载点之外。
查看 /etc/fstab 文件:
[root@101c7 ~]$ cat /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
^ ^ ^ ^ ^ ^
设备名 挂载点 文件系统 挂载参数 备份 扫描
以第一条为例从左到右分别为:
- 第一列:需要挂载的设备名、Label 或 UUID。
- 第二列:挂载点(必须是目录)。
- 第三列:文件系统类型。
- 第四列:挂载参数,如
defaults、rw、ro、noauto等。这里的默认值等于mount -o default时用的值。 - 第五列:是否需要使用 dump 命令备份,
0代表不需要备份,1表示每天需要备份。 - 第六列:用
fsck检查文件系统顺序,0表示不需要检查,1代表在根文件系统/之前检查,2代表在其他文件系统之后检查。
其实/etc/fstab(file system table)就是将我们利用mount命令挂载时所用到的参数写入到了文件。
例如,要在 /dev/sdb4 开机自动挂载到 /root/sdb4m 目录下,可以在 /etc/fstab 中添加一行:
[root@101c7 ~]$ vi /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb4 /root/sdb4m ext3 defaults 0 0
然后用 mount -a 命令更新挂载状态:
[root@101c7 ~]$ mount -a ; df | grep sdb
/dev/sdb4 92580 332 87128 1% /root/sdb4m
可以看到硬盘已经挂载成功了。当系统重启时,/dev/sdb4 就会自动挂载到 /root/sdb4m 目录下了。
特殊设备挂载
意思为直接挂载存在硬盘中的镜像文件。也可以挂载大文件,作为虚拟磁盘使用。
例如挂载/root/TinyCore-current.iso到/mnt/tinycore_iso:
[root@101c7 ~]$ mount -o loop /root/TinyCore-current.iso /mnt/tinycore_iso/
mount: /dev/loop0 is write-protected, mounting read-only
[root@101c7 ~]$ df | grep loop
/dev/loop0 20348 20348 0 100% /mnt/tinycore_iso
在 CentOS 7 中可以省略-o loop参数。
挂载内存盘
所谓内存盘就是将一部分内存当作文件系统挂载起来,不过关机或卸载里面的资料会完全丢失。
在挂载时使用-t ramfs none参数:
[root@server1 ~]$ mount -t ramfs none /root/ram
[root@server1 ~]$ df -ha
Filesystem Size Used Avail Use% Mounted on
none 0 0 0 - /root/ram