磁盘挂载
1 命令简介
查看磁盘会用到一些命令mount、blkid、lsblk、fdisk等
- lsblk:适合快速查看块设备及层级关系
- blksid:获取设备详细的文件系统信息
- fdisk:检查和管理分区的详细信息,主要支持 MBR
- parted:更全面的分区管理工具,支持 MBR 和 GPT
- findmnt:查看和筛选当前挂载的设备
2 查看挂载点
- 列出挂载点
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 组
- 查看磁盘分区
① 使用
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 进行挂载是标准做法
3 检查是否挂载
root@kwephis8419858:/data# mount | grep "^/dev"
/dev/vda2 on / type ext4 (rw,relatime)
当前只挂载了/dev/vda2,接下来挂载vg1-lv1
4 挂载磁盘
- 在当前会话挂载
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
- 永久挂载
# 确认磁盘类型
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: 出错时以只读方式重新挂载
5 命令行工具
磁盘挂载会利用到不少工具,下面简单记录工具使用时的问题。
5.1 mount
查看 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