标签: device-mapper

为什么驱动器的大小有两个不同的值,以及如何将它们与设备映射器和 LVM 协调?

我有一个通过 USB 连接的 1 TB 驱动器。它包含一个填充整个设备的 LVM物理卷(没有任何分区表)。当我尝试使用整个 PV扩展逻辑卷时设备映射器开始抱怨 LVM 在 PV 上分配的部分大于设备。来自设备映射器的错误消息(如 所示dmesg)报告大小为1953320367 [dm] 扇区:

device-mapper: table: 254:0: sdf too small for target: start=1821353984, len=132169728, dev_size=1953320367
Run Code Online (Sandbox Code Playgroud)

但是 LVM 创建了一个具有 238467 个物理范围的 PV ,即1953521664 [lvm] 个扇区(大约多 100 MB):

$ pvdisplay /dev/sdf
  --- Physical volume ---
  PV Name               /dev/sdf
  VG Name               apu-vg1
  PV Size               931.51 GiB / not usable 1.71 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              238467 …
Run Code Online (Sandbox Code Playgroud)

linux lvm hard-disk device-mapper hdparm

14
推荐指数
1
解决办法
2327
查看次数

如果 LUKS 不存储分区大小,`cryptsetup resize` 会做什么?

LUKS/ dm-crypt/ cryptsetup FAQ页面说:

2.15 我可以调整 dm-crypt 或 LUKS 分区的大小吗?

是的,您可以,因为 dm-crypt 和 LUKS 都不存储分区大小。

我一头雾水:

  1. 如果没有存储大小信息,什么是“调整大小”?

  2. 如何在加密卷的打开/关闭过程中记住“调整大小”?

dm-crypt luks cryptsetup volume device-mapper

12
推荐指数
1
解决办法
7126
查看次数

在不使用 lvm2 包命令的情况下列出与逻辑卷关联的设备

我想列出与逻辑卷关联的所有物理卷。

我知道lvdisplaypvscanpvdisplay -m可以做的工作。但我不想使用这些命令。有没有其他方法可以在不使用 lvm2 包命令的情况下做到这一点?

关于比较主要和次要设备数量的任何想法?

linux lvm device-mapper

6
推荐指数
2
解决办法
3万
查看次数

GNU/Linux:“设备映射器:创建 ioctl 失败”“设备或资源繁忙”

我无法再安装我的加密设备。

错误是:

device mapper: create ioctl failed 
device or resource busy
Run Code Online (Sandbox Code Playgroud)

两个不同的程序访问 TrueCrypt 加密设备时都会出现此错误:TrueCrypt 和 Tc-play。

在这种情况下,建议删除/dev/mapper/truecrypt*目录,或查找阻塞设备的进程。但是,没有/dev/mapper/truecrypt*目录,并且不lsof返回任何内容。

一个 TrueCrypt 设备需要整个 HDD。根据fdisk,这个分区是用 HPFS/NTFS 格式化的。

另一个 TrueCrypt 设备位于 上的分区上/dev/sda。根据fdisk,这个分区是“Linux”(ext3 或 ext4,如果我没记错的话)。

什么可能导致错误?

软件:

  • Debian GNU/Linux 6

linux device-mapper ioctl

6
推荐指数
1
解决办法
6151
查看次数

将只读 LUKS 分区重新映射为读写

可以使用--readonly-r选项调用 cryptsetup ,这将设置只读映射:

cryptsetup --readonly luksOpen /dev/sdb1 sdb1
Run Code Online (Sandbox Code Playgroud)

以只读方式打开设备后,我可以稍后将其重新映射为读写吗?显然,我的意思是将它映射为读写而不先关闭它,然后再打开它。我可以重新映射它而不必再次输入密码吗?

如果这是不可能的,这只是 cryptsetup 不支持这一点,还是有一些更基本的层面?

dm-crypt cryptsetup device-mapper disk-encryption

6
推荐指数
1
解决办法
4132
查看次数

有关设备映射器 ioctl 的文档?

关于 Device Mapper 的 Red Hat 文档中,它写道:

“设备映射器的应用程序接口是 ioctl 系统调用。”

到目前为止,我知道ioctl被发送到/dev/mapper/control(对于大多数发行版),但似乎我需要深入研究dmsetup、 libdevmapper 或类似的源代码,以了解 ioctl 实际如何工作以及如何使用它们。

是否有任何书籍、讲座或文档对这个主题进行了扩展?我是否陷入了解析复杂源代码的困境?我使用 libdevmapper 而不是 ioctl 系统调用更好吗?ioctl 的手册页过于笼统,在这种情况下没有多大用处。

linux system-calls dm-crypt device-mapper ioctl

6
推荐指数
0
解决办法
1333
查看次数

如何保证LVM2 LV在原始块级别的临时不变性?

我继承了一个 Azure VM (Ubuntu 20.04),它有一个 7 磁盘 VG,完全被格式化为 ext4 的 RAID5 LV 占用。

我需要进行备份,并希望使用 Azure 备份来为包含 VG 的 Azure 磁盘创建快照。

Azure 磁盘快照在时间点上不一致,因此出于文件系统完整性和 LVM 元数据的原因,我需要在备份运行时冻结存储。我的工作量可以忍受;我正在尝试找出使原始磁盘块暂时不可变的最佳方法。

fsfreeze- 我测试了冻结文件系统、拍摄快照、解冻,然后切换到快照。

在我有限的测试中,这工作正常,当“恢复”的磁盘换回时,我没有看到 LVM 带来任何可怕的情况,但我只能执行这么多测试,并且如果存在 1% 的边缘情况,我的磁盘元数据会丢失会不一致我可能找不到它。

我担心我将活动锁定在如此高的层:在活动时不会发生任何文件系统操作FIFREEZE ioctl,但这是否会阻止 LVM 执行任何类型的较低级别操作,例如元数据更新、RAID 相关活动?

然后我尝试了一下,感觉dmsetup suspend /dev/mapper/my-lvol这是一个更好的解决方案。

测试设置:

fsfreeze

  1. echo 3 > /proc/sys/vm/drop_caches
  2. sync ; sync(旧习难改 :)
  3. fsfreeze -f /export
  4. dd if=/dev/mapper/my-lvol of=/dev/null status=progress

运行dd直至完成。我承认这是有效的,因为我没有通过冻结的文件系统进行访问,但这让我想知道当我假设我的 Azure 磁盘不变时,LVM 是否仍然可以在低级别上执行操作。

dmsetup suspend

  1. echo 3 > /proc/sys/vm/drop_caches
  2. sync ; sync …

filesystems backup lvm device-mapper azure

6
推荐指数
0
解决办法
175
查看次数

EXT4 如何处理底层存储空间突然不足的情况?

通常,块设备驱动程序会报告设备的正确大小,并且可以实际使用所有“可用”块。因此,文件系统事先知道它可以向此类设备写入多少内容。
但在某些特殊情况下,例如使用dm-thindm-vdo设备时,这种说法是错误的。如果这种块设备的ENOSPC底层存储(上层 FS 对此一无所知)已满,那么它们随时可能返回错误。

因此,我的问题是,在这种情况下会发生什么:EXT4 文件系统已挂载r/w,处于async模式(默认),并且正在执行大量写入。磁盘缓存(脏内存)也会参与其中,此时如果用户运行sync命令,就会有大量数据需要写入。

但突然间,该 EXT4 文件系统的底层块设备开始拒绝任何写入,因为“没有剩余空间”。文件系统的行为是什么?
它会打印错误并进入r/o中止所有写入并可能导致数据丢失的模式吗?如果没有,它是否会等待空间,定期重试写入并拒绝新写入?在这种情况下,如果其他进程尝试分配大量 RAM,巨大的磁盘缓存会发生什么情况?(在 Linux 上,脏内存被认为是可用的,不是吗?)。
考虑到最坏的情况,如果磁盘缓存在错误发生时占用了大部分 RAM ENOSPC(因为管理员设置得vm.dirty_ratio太高),内核会崩溃或锁定吗?或者它只会使所有想要分配内存的进程等待/挂起?最后,不同文件系统的行为是否有所不同?
提前致谢。

linux filesystems ext4 block-device device-mapper

6
推荐指数
2
解决办法
1574
查看次数

如何在 Linux 中临时提取闪存驱动器或 HDD?

假设我以这种方式挂载了一个磁盘:

mount /dev/sdb /mnt/tmp
Run Code Online (Sandbox Code Playgroud)

我在这个文件系统上打开了一些文件,不想卸载它。但是我想暂时提取设备,然后再重新连接它。我希望对该文件系统的所有读取和写入仅在缓存中执行或挂起,直到我重新连接设备。

如果我想提前暂时分离,我会使用设备映射器:

# ls -lh /dev/sdb
brw-rw---- 1 root floppy 8, 16 Sep 12 17:38 /dev/sdb
# blockdev --getsize /dev/sdb
2211840
# dmsetup create sdb_detachable --table '0 2211840 linear 8:16 0'
# mount /dev/mapper/sdb_detachable /mnt/tmp
(start working with the filesystem)
(suddenly need to detach the device)
# dmsetup suspend sdb_detachable
# dmsetup load sdb_detachable --table '0 2211840 error'
# blockdev --flushbufs /dev/sdb
(eject the device)
(maybe even use the cached part of the filesystem)
(reattach the …
Run Code Online (Sandbox Code Playgroud)

linux external-hdd usb-drive vfs device-mapper

5
推荐指数
1
解决办法
290
查看次数

如何判断加密 (LUKS) 设备是否已打开?

有没有办法告诉,给定一个 LUKS 块设备的路径,并且不知道密码,设备是否已经打开(解密)?

知道解密设备的路径怎么样?

encryption block-device luks device-mapper

5
推荐指数
1
解决办法
5550
查看次数