Linux-Disk-And-Dmsetup-1

磁盘占用 与 dmsetup

如果你在挂载磁盘的过程中遇到以下内容

1
/dev/sdb is apparently in use by the system; will not make a filesystem here!

dmsetup 命令 (在处理问题前,需要理解 dmsetup)

原文:https://blog.csdn.net/weixin_42425141/article/details/123517764

一、介绍

1
2
3
4
5
😊 Mapped Device 是一个逻辑抽象,可以理解成为内核向外提供的逻辑设备,它通过 Mapping Table 描述的映射关系和 Target Device 建立映射。Target device 表示的是 Mapped Device 所映射的物理空间段,对 Mapped Device 所表示逻辑设备来收,就是该逻辑设备映射到的一个物理设备。

😊 Mapping Table 里有 Mapped Device 逻辑的起始地址、范围、和表示在 Target Device 所在物理设备的地址偏移量以及 Target 类型等信息(注:这些地址和偏移量都是以磁盘的扇区为单位的,即 512 个字节大小,所以,当你看到 128 的时候,其实表示的是 128*512 = 64K)。

😊 DeviceMapper 中的逻辑设备 Mapped Device 不但可以映射一个或多个物理设备 Target Device,还可以映射另一个 Mapped Device,于是,就是构成了一个迭代或递归的情况,就像文件系统中的目录里除了文件还可以有目录,理论上可以无限嵌套下去。

二、dmsetup介绍

😊 其实 lvm 所管理的逻辑卷,是 dm 设备的软链接,而直接操作 dm 设备,我们就可以用 dmsetup。

三、dmsetup 命令语法格式

1
2
# command 常见的有 remove 、 ls 、status 等
# device_name: 可以是/dev/sd*,或者是物理卷的名称

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
显示当前 devicemapper 的信息

# 列出所有逻辑设备
demsetup ls

# 列出所有逻辑设备的状态信息
demsetup status

# 移除逻辑设备
desetup remove

# 显示设备依赖关系
dmsetup deps

五、案例

下面将演示一个 lv 程序无法处理的问题。必须使用 dmsetup 来处理

1
2
3
4
5
6
7
8
9
10
亲测有效处理办法
使用 lvremove 及 vgremove 均无法清理时,

# 查看,确定逻辑卷名
dmsetup info

# 查看,确定逻辑卷名
dmsetup ls

dmsetup remove <逻辑卷名>

故障复现及恢复

1、创建 lv 逻辑卷

1
2
3
4
5
6
7
8
[root@seed-84 ~]# vgcreate  vg-test /dev/sdb

Physical volume "/dev/sdb" successfully created.
Volume group "vg-test" successfully created

[root@seed-84 ~]# lvcreate -n vg-lv -l 100%FREE vg-test

Logical volume "vg-lv" created.

查看逻辑卷

1
2
LV    VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
vg-lv vg-test -wi-a----- <16.00g

2、查看 lvm 路径

1
2
3
[root@seed-84 ~]# ll /dev/mapper/vg--test-vg--lv

lrwxrwxrwx. 1 root root 7 May 27 11:51 /dev/mapper/vg--test-vg--lv -> ../dm-0

3、rm 删除 dm-0(这里为非正常删除,为了演示现象)

1
2
3
[root@seed-84 ~]# rm /dev/dm-0

rm: remove block special file '/dev/dm-0'? y

4、删除/dev/mapper/下的 vg-test 目录。

1
rm /dev/mapper/vg--test-vg--lv  -rf

5、使用 sgdisk 格式化磁盘信息

1
2
3
4
5
6
7
8
9
[root@seed-84 ~]# sgdisk  -z /dev/sdb

Creating new GPT entries.
GPT data structures destroyed! You may now partition the disk using fdisk or other utilities.

[root@seed-84 ~]# sgdisk -Z /dev/sdb

Creating new GPT entries.
GPT data structures destroyed! You may now partition the disk using fdisk or other utilities.

6、执行 wipefs -a 尝试擦该设备,却一直提示磁盘正在使用

1
2
3
[root@seed-84 ~]# wipefs -a /dev/sdb

wipefs: error: /dev/sdb: probing initialization failed: Device or resource busy

7、使用 dmsetup 查看 lv 卷,使用 dmsetup 移除该卷

1
2
3
4
5
6
7
[root@seed-84 ~]# dmsetup ls

vg--test-vg--lv (253:0)

[root@seed-84 ~]# dmset

up remove vg--test-vg--lv

8、再次执行

1
wipefs -a /dev/sdb

回到之前的硬盘被占用问题

如果要解决,那么就只需要执行下面的命令即可

1
2
3
4
5
6
7
8
9
10
11
# 查看是否被 dmsetup 使用中
dmsetup status

# 如果被 dmsetup 使用,请接触 dmsetup 的控制
dmsetup remove_all

# 格式化硬盘
mkfs -t ext4 -c /dev/sdb

# 挂载硬盘
mount /dev/sdb /logdata/
Contents
  1. 1. 磁盘占用 与 dmsetup
    1. 1.1. 如果你在挂载磁盘的过程中遇到以下内容
    2. 1.2. dmsetup 命令 (在处理问题前,需要理解 dmsetup)
      1. 1.2.1. 一、介绍
      2. 1.2.2. 二、dmsetup介绍
      3. 1.2.3. 三、dmsetup 命令语法格式
      4. 1.2.4. 五、案例
        1. 1.2.4.1. 故障复现及恢复
    3. 1.3. 回到之前的硬盘被占用问题
|