目录

磁盘挂载

系列 - 磁盘管理与扩容

查看磁盘会用到一些命令mountblkidlsblkfdisk

  1. lsblk:适合快速查看块设备及层级关系
  2. blksid:获取设备详细的文件系统信息
  3. fdisk:检查和管理分区的详细信息,主要支持 MBR
  4. parted:更全面的分区管理工具,支持 MBR 和 GPT
  5. findmnt:查看和筛选当前挂载的设备
  1. 列出挂载点
root@kwephis8419858:/data# lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda       252:0    0   40G  0 disk
├─vda1    252:1    0    1M  0 part
└─vda2    252:2    0   40G  0 part /
vdb       252:16   0  200G  0 disk
└─vg1-lv1 253:0    0  200G  0 lvm

观察MOUNTPOINT列,发现vg1-lv1挂载点列为空,说明该设备没有被挂载。 我们来分解一下TYPE列:

  • disk: 代表物理磁盘设备。例如 vda 和 vdb 是物理磁盘的名称
  • part: 代表磁盘上的分区。例如 vda1 和 vda2 是物理磁盘 vda 上的分区
  • lvm: 代表逻辑卷管理器(LVM)中的逻辑卷。vg1-lv1 是一个逻辑卷,属于 LVM 组
  1. 查看磁盘分区 ① 使用blkid查看
root@kwephis8419858:/data# blkid
/dev/vda2: UUID="e7d143cf-fda3-4390-9f7b-1bb60775683c" TYPE="ext4" PARTUUID="e1009dfc-0902-47fc-bbee-cc40f2d8f7af"
/dev/mapper/vg1-lv1: UUID="bc404085-157e-4dde-b525-614c9e365c28" TYPE="ext4"

② 使用fdisk查看

root@kwephis8419858:/data# 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: gpt
Disk identifier: E345B17F-170D-4782-89B3-B7AD96730D7F
>
Device     Start      End  Sectors Size Type
/dev/vda1   2048     4095     2048   1M BIOS boot
/dev/vda2   4096 83886046 83881951  40G Linux filesystem
>
>
Disk /dev/vdb: 200 GiB, 214748364800 bytes, 419430400 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/mapper/vg1-lv1: 199.102 GiB, 214744170496 bytes, 419422208 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

③ 若确认使用LVM,则使用lvdisplay命令

root@kwephis8419858:/data# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                8vV7rs-vosU-4k1c-LVg9-ZuyZ-Sr84-ftj2yG
  LV Write Access        read/write
  LV Creation host, time kwephis8419858, 2023-06-09 11:31:49 +0800
  LV Status              available
  # open                 1
  LV Size                <200.00 GiB
  Current LE             51199
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

观察上述结果,发现映射路径为 /dev/vg1/lv1 和 /dev/mapper/vg1-lv1,其中 /dev/mapper/vg1-lv1 是逻辑卷的映射路径,而 /dev/vg1/lv1 是逻辑卷的实际设备路径。实际上,这两个路径指向相同的逻辑卷,使用 /dev/vg1/lv1 进行挂载是标准做法

root@kwephis8419858:/data# mount | grep "^/dev"
/dev/vda2 on / type ext4 (rw,relatime)

当前只挂载了/dev/vda2,接下来挂载vg1-lv1

  1. 在当前会话挂载
root@kwephis8419858:/data# mount /dev/mapper/vg1-lv1 /data
root@kwephis8419858:/data# df -h
Filesystem           Size  Used Avail Use% Mounted on
...
/dev/mapper/vg1-lv1  196G  150G   37G  81% /data
  1. 永久挂载
# 确认磁盘类型
root@kwephis8419858:/data# blkid /dev/mapper/vg1-lv1
/dev/mapper/vg1-lv1: UUID="bc404085-157e-4dde-b525-614c9e365c28" TYPE="ext4"
root@kwephis8419858:/data# echo "/dev/mapper/vg1-lv1  /data  ext4 defaults 0 0" | tee -a /etc/fstab
/dev/mapper/vg1-lv1  /data  ext4 defaults 0 0
# 测试挂载
root@kwephis8419858:/data# mount -a

配置文件/etc/fstab中的列关系为

<file system> <mount point>   <type>  <options>       <dump>  <pass>

针对<options> <dump> <pass>三个配置选项进行讲解: 1)options:当前配置的defaults是一个挂载选项的集合,代表了一组预定义的、常用的挂载选项如下:

  • rw: 读写挂载。
  • suid: 允许设置用户ID位。
  • dev: 允许设备文件的解释。
  • exec: 允许执行文件。
  • auto: 自动挂载。
  • nouser: 不允许普通用户挂载。
  • async: 异步I/O。

2)dump: 这是备份工具 dump 的选项。如果设置为 0,则 dump 不会备份这个文件系统。设置为 1 表示备份工具会备份此文件系统 3)pass: 这是文件系统检查顺序的选项。0 表示在启动时不进行文件系统检查。1 通常用于根文件系统,2 用于其他文件系统,表示在启动时文件系统检查的顺序

options 还有一些常见的配置项,例如

  • ro: 只读挂载
  • rw: 读写挂载
  • noatime: 不更新访问时间
  • nodiratime: 不更新目录访问时间
  • async: 异步I/O
  • errors=remount-ro: 出错时以只读方式重新挂载

磁盘挂载会利用到不少工具,下面简单记录工具使用时的问题。

查看 mount 命令时,发现有挂载点如下:

/dev/loop0 on /mnt type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)

这里使用了环回设备挂载,如:

sudo mount -o loop example.iso /mnt

使用 -o loop 参数时,mount 命令会显式地请求内核创建一个循环设备(如 /dev/loop0),并将 ISO 文件映射到这个循环设备上。

那么当不使用上述参数,

example.iso on /mnt type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)

不使用参数时,简单挂载,可以确定知道挂载文件,而使用 loop 参数时不显示具体文件。

那么可以使用命令 sudo losetup -a 查看:

/dev/loop0: 0 /var/imageko/imagesdkFs

这样就能获取循环设备挂载的具体文件。

当需要撤销挂载,但挂载设备出现 Resource Busy 时,通过 fuser -m /path/to 命令,查看到 pid。也可以直接 -k 杀死该进程。

sudo mount -o loop,rw example.iso /mnt