0%

ubuntu | 挂载问题

挂载是 linux 非常重要的一个操作。


挂载介绍


Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。

因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。

纠正一个误区,并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。

举个例子,我们想通过命令行访问某个 U 盘中的数据,下图所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。

上图中可以看到,目前 U 盘Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。

接下来,我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果下图所示。

可以看到,U 盘文件系统已经成为 Linux 文件系统目录的一部分,此时访问 /sdb-u/ 就等同于访问 U 盘

前面讲过,根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。

总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。

我们用

df -h

来查看挂载的情况

下面这一幅图是我电脑上的机器图

我们可以看到,这台机器的 / 挂载在 /dev/sda4 上,只有 202 G,而其中 /data 挂载在 /dev/sdb1/ 上有3.6T,所以,我们的文件或者数据可以放在/data 中,代码放在 /home

我们使用

sudo du -sh /home/*

来查看各个 user 的使用情况。


挂载命令


Linux mount命令

将 /dev/hda1 挂在 /mnt 之下。

mount /dev/hda1 /mnt

将 /dev/hda1 用唯读模式挂在 /mnt 之下。

mount -o ro /dev/hda1 /mnt

挂载外接硬盘


ubuntu

首先,我们先决定挂在哪个硬盘,比如说我想把 /dev/sda5 挂载到 /data 上。

如果,在命令行中,执行

mount /dev/sda5 /data

确实可以,但,这个只是临时挂载,重启后就没了,想要永久挂载就需要修改 /etc/fstab

首先,我们要获得那个硬盘的 UUID

sudo blkid /dev/sda5

我的出现

/dev/sda5: LABEL="linuxd" UUID="807E27A67E279446" TYPE="ntfs" PARTUUID="5392f597-05"

然后我们修改 /etc/fstab

参数意义

/dev/device mountpoint type rules dump order
设备名称 挂载点 分区类型 挂载选项 dump选项 fsck选项
  1. 设备名称可以通过sudo blkid可以查看自己的UUID

  2. 挂载点可以通过 df -h可以查看当前的情况,但是你自己想挂载的位置要自己创建好。

  3. 分区类型指的是你这个磁盘的文件系统

  4. defaults的意义是在于按照大多数文件系统的缺省值设置挂载定义,即系统的默认定义(对于大多数文件系统的处理方式),其 实除了defaults还有auto就是开机自动挂载,noauto就是开机不自动挂载,nouser就是只有超级用户才挂载,user,所有用户都挂载

  5. dump 就是从不备份

  6. fsck的检查顺序,0为不检查,分区为1,其他分区从2开始,这里指的是检查的优先级

我填加的为

UUID=807E27A67E279446 /data ntfs defaults 0 0

centos

以下操作是 centos

MBR支持的磁盘最大容量为2 TBGPT最大支持的磁盘容量为18 EB,因此当您初始化容量大于2 TB的磁盘时,分区形式请采用GPT

首先看一下电脑的硬盘的分布情况

fdisk -l

输出为

Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd8a1407d

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 83884031 83881984  40G 83 Linux


Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

这里面有两个硬盘

Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors

一般来说,系统盘是 vda ,所有的 linux 系统服务器 vda 一定是系统盘,除非人为更换,然后 默认增加硬盘就是 vdb 再加一块 vdc ,以此类推。

这里面我们可以看到已经将系统盘 vda 进行了分区,分成了一个区 vda1 。只有分好区之后才能挂载,如果没有分好区,挂载是不成功的,比如,上面的 vdb 是没有分区的,如果

mount /dev/vdb /mnt

出现

mount: /mnt: wrong fs type, bad option, bad superblock on /dev/vdb, missing codepage or helper program, or other error.

所以,要进行分区。

使用 fdisk 新增数据盘,进入 fdisk 分区工具,开始对新增数据盘执行分区操作。

fdisk /dev/vdb

出现

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x5f473133.

Command (m for help): 

输入 n,按 Enter ,开始新建分区。

回显类似如下信息:

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended

表示磁盘有两种分区类型:

  • p 表示主分区。
  • e 表示扩展分区。

磁盘使用MBR分区形式,最多可以创建4个主分区,或者3个主分区加1个扩展分区,扩展分区不可以直接使用,需要划分成若干个逻辑分区才可以使用。
磁盘使用GPT分区形式时,没有主分区、扩展分区以及逻辑分区之分。

以创建一个主要分区为例,输入p,按Enter,开始创建一个主分区。
回显类似如下信息:

Select (default p): p
Partition number (1-4, default 1): 

Partition number表示主分区编号,可以选择1-4

以分区编号选择1为例,输入主分区编号1,按Enter

回显类似如下信息:

Partition number (1-4, default 1): 1
First sector (2048-209715199, default 2048): 

First sector表示起始磁柱值,可以选择2048-209715199,默认为2048

以选择默认起始磁柱值2048为例,按Enter

系统会自动提示分区可用空间的起始磁柱值和截止磁柱值,可以在该区间内自定义,或者使用默认值。起始磁柱值必须小于分区的截止磁柱值。

回显类似如下信息:

Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): 

以选择默认截止磁柱值209715199为例,按 Enter

系统会自动提示分区可用空间的起始磁柱值和截止磁柱值,可以在该区间内自定义,或者使用默认值。起始磁柱值必须小于分区的截止磁柱值。

出现

Created a new partition 1 of type 'Linux' and of size 100 GiB.

输入p,按Enter,查看新建分区的详细信息。

回显类似如下信息:

Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5f473133

Device     Boot Start       End   Sectors  Size Id Type
/dev/vdb1        2048 209715199 209713152  100G 83 Linux

表示新建分区 /dev/vdb1 的详细信息。

输入 w,按 Enter,将分区结果写入分区表中。

回显类似如下信息:

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

表示分区创建完成。

说明:
如果之前分区操作有误,请输入 q,则会退出fdisk分区工具,之前的分区结果将不会被保留。

这是如果执行

fdisk -l

出现

Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd8a1407d

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 83884031 83881984  40G 83 Linux


Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5f473133

Device     Boot Start       End   Sectors  Size Id Type
/dev/vdb1        2048 209715199 209713152  100G 83 Linux

可以看到 vdb 也被分出一个区了。

执行以下命令,将新的分区表变更同步至操作系统。

partprobe

执行以下命令,将新建分区文件系统设为系统所需格式。

mkfs -t 文件系统格式 /dev/vdb1

以设置文件系统为 ext4 为例:

mkfs -t ext4 /dev/vdb1

回显类似如下信息:

mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 26214144 4k blocks and 6553600 inodes
Filesystem UUID: e6306768-9228-4ba2-8b78-5bd5fe99b408
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done 

格式化需要等待一段时间,请观察系统运行状态,不要退出。

执行以下命令,新建挂载目录。

mkdir 挂载目录

以新建挂载目录 /mnt 为例:

mkdir /mnt

挂载命令

mount 磁盘分区 挂载目录

以挂载新建分区 /dev/vdb1/mnt 为例:

mount /dev/vdb1 /mnt

执行以下命令,查看挂载结果。

df -TH

输出

Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs   17G     0   17G   0% /dev
tmpfs          tmpfs     3.4G  8.5M  3.4G   1% /run
/dev/vda1      ext4       43G  5.3G   35G  14% /
tmpfs          tmpfs      17G     0   17G   0% /dev/shm
tmpfs          tmpfs     5.3M  4.1k  5.3M   1% /run/lock
tmpfs          tmpfs      17G     0   17G   0% /sys/fs/cgroup
tmpfs          tmpfs     3.4G     0  3.4G   0% /run/user/0
/dev/vdb1      ext4      106G   63M  100G   1% /mnt

表示新建分区 /dev/vdb1 已挂载至/mnt

云服务器重启后,挂载会失效。您可以修改 /etc/fstab文件,将新建磁盘分区设置为开机自动挂载。

设置开机自动挂载磁盘分区

设置云服务器系统启动时自动挂载磁盘分区,不能采用在 /etc/fstab 直接指定设备名(比如/dev/vdb1)的方法,因为云中设备的顺序编码在关闭或者开启云服务器过程中可能发生改变,例如/dev/vdb1可能会变成/dev/vdb2。推荐使用UUID来配置自动挂载磁盘分区。

说明:
UUID(universally unique identifier)是Linux系统为磁盘分区提供的唯一的标识字符串。

执行如下命令,查询磁盘分区的UUID

blkid 磁盘分区

以查询磁盘分区 /dev/vdb1UUID 为例:

blkid /dev/vdb1

回显类似如下信息:

[root@ecs-test-0001 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="0b3040e2-1367-4abb-841d-ddb0b92693df" TYPE="ext4"

表示 /dev/vdb1UUID

执行以下命令,使用VI编辑器打开 fstab文件。

vi /etc/fstab

i,进入编辑模式。

将光标移至文件末尾,按 Enter,添加如下内容。

UUID=0b3040e2-1367-4abb-841d-ddb0b92693df /mnt/sdc                ext4    defaults        0 2

以内容上仅为示例,具体请以实际情况为准,参数说明如下:

  • 第一列为UUID,此处填写查询到的磁盘分区的UUID
  • 第二列为磁盘分区的挂载目录,可以通过df -TH命令查询。
  • 第三列为磁盘分区的文件系统格式, 可以通过df -TH命令查询。
  • 第四列为磁盘分区的挂载选项,此处通常设置为defaults即可。
  • 第五列为Linux dump备份选项。
    • 0表示不使用Linux dump备份。现在通常不使用dump备份,此处设置为0即可。
    • 1表示使用Linux dump备份。
  • 第六列为fsck选项,即开机时是否使用fsck检查磁盘。
    • 0表示不检验。
    • 挂载点为(/)根目录的分区,此处必须填写1。根分区设置为1,其他分区只能从2开始,系统会按照数字从小到大依次检查下去。

ESC后,输入:wq,按Enter

保存设置并退出编辑器。

执行以下步骤,验证自动挂载功能。

执行如下命令,卸载已挂载的分区。

umount 磁盘分区

命令示例:

umount /dev/vdb1

执行如下命令,将 /etc/fstab 文件所有内容重新加载。

mount -a

执行如下命令,查询文件系统挂载信息。

mount | grep 挂载目录

命令示例:

mount | grep /mnt/sdc

回显类似如下信息,说明自动挂载功能生效:

root@ecs-test-0001 ~]# mount | grep /mnt/sdc
/dev/vdb1 on /mnt/sdc type ext4 (rw,relatime,data=ordered)
请我喝杯咖啡吧~