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 默认值为rwsuiddevexecautonouserasync
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。
  • 第二列:挂载点(必须是目录)。
  • 第三列:文件系统类型。
  • 第四列:挂载参数,如 defaultsrwronoauto 等。这里的默认值等于 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