挂载

关于挂载

Linux的目录树

在Linux中,所有的数据都是以文件的形式来呈现的,比如比较有趣的就是/dev目录,在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录之内。通过这个目录下的某个文件,就等于读写某个设备. 在关于开机中提到了磁盘分区的一些基本概念,不同的分区在Linux系统中就对应着不同的设备文件名,比如

  • P1: /dev/sda1
  • P2:/dev/sda2
  • L1: /dev/sda5
  • L2: /dev/sda6

由于MBR分区方式最多可以有四个主分区,因此如果只划分了一个主分区,一个扩展分区,两个逻辑分区时,两个逻辑分区的设备号码要从5开始,前四个号码都是保留给主分区或扩展分区的. 对于第一块硬盘,它的命名为sda,第二块为sdb...以此类推. 设备文件名后的编号则代表着该块硬盘下的第几个分区. 可以看一下一个Ubuntu虚拟机上的情况,我在计算机上还插了一块U盘. 使用lsblk(list information about all available or the specified block devices)来查看一下系统的设备信息:

我的外接U盘就被命名为sdb1啦. 但是呢,虽然Linux系统检测到了sdb1,但是目前我们还无法访问它. sdb1只是一个设备文件,储存了设备的一些基本信息,它本身不包含任何设备内的目录结构. 因为Linux本身是一个以根目录/展开的目录树结构,所有的文件都是从根目录/衍生来的,而sdb1中本身子带的目录结构目前还不属于Linux根目录中的一员,我们无法通过根目录访问其内部文件. 现在的问题就是,如何结合目录树的架构与磁盘内的数据?挂载这个概念就由此而来了.

挂载

在Windows中,我们插入了一块硬盘,系统就会检测到一块F盘或者H盘,我们进入该盘符,就可以读取硬盘中的数据. 外接硬盘本身是不属于系统磁盘的一部分的,这种给外接硬盘分配一个系统的目录(盘符),让系统可以访问外接磁盘内部目录结构、数据的操作,就叫作挂载(mount). 系统存在一个目录结构,外接设备也存在一个目录结构,我们把外接设备挂接到系统的一个目录中,让其成为系统目录结构的一部分,我们可以访问它,就好像扩展模块一样.

在Windows中,这种挂载是系统自动进行的,在Linux中,我们需要用mount命令手动挂载Linux系统外的目录. 虚拟机中的共享文件夹也相当于一个外接目录,我们也需要手动挂载后,系统才能够检测到这个文件夹.

mount命令的标准用法为

1
mount -t type device dir

其中type参数为文件系统类型,在VirtualBox虚拟机中,虚拟机必须安装了VirtualBox的驱动才能够启用共享文件夹,此时的文件系统类型为VirtualBox提供的vboxsf. 比如在VirtualBox中,把E:/shen_folder设置为Win下的共享文件夹,在VirtualBox中将其命名为miaomiao,现在想把它挂载到~/wangwang这个目录下,只要执行

1
sudo mount -t vboxsf miaomiao wangwang

就可以啦. 对于外接U盘,现在想把它挂载到~/Udisk这个文件夹,也可以使用一样的方式:

1
sudo mount /dev/sdb1 ~/Udisk

Udisk和wangwang两个目录都变成了挂载点,此时我们可以访问其内部的数据啦,

在结束使用U盘后,我们可以结束挂载并安全关闭驱动器,就像在Windows中做得一样. 在图形界面中,我们可以直接安全移除驱动器. 或者手动执行

1
udisksctl unmount -b /dev/sdb1 && udisksctl power-off -b /dev/sdb1