我有一个通过 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) 在LUKS
/ dm-crypt
/ cryptsetup
FAQ页面说:
2.15 我可以调整 dm-crypt 或 LUKS 分区的大小吗?
是的,您可以,因为 dm-crypt 和 LUKS 都不存储分区大小。
我一头雾水:
如果没有存储大小信息,什么是“调整大小”?
如何在加密卷的打开/关闭过程中记住“调整大小”?
我想列出与逻辑卷关联的所有物理卷。
我知道lvdisplay
,pvscan
,pvdisplay -m
可以做的工作。但我不想使用这些命令。有没有其他方法可以在不使用 lvm2 包命令的情况下做到这一点?
关于比较主要和次要设备数量的任何想法?
我无法再安装我的加密设备。
错误是:
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,如果我没记错的话)。
什么可能导致错误?
软件:
可以使用--readonly
或-r
选项调用 cryptsetup ,这将设置只读映射:
cryptsetup --readonly luksOpen /dev/sdb1 sdb1
Run Code Online (Sandbox Code Playgroud)
以只读方式打开设备后,我可以稍后将其重新映射为读写吗?显然,我的意思是将它映射为读写而不先关闭它,然后再打开它。我可以重新映射它而不必再次输入密码吗?
如果这是不可能的,这只是 cryptsetup 不支持这一点,还是有一些更基本的层面?
在关于 Device Mapper 的 Red Hat 文档中,它写道:
“设备映射器的应用程序接口是 ioctl 系统调用。”
到目前为止,我知道ioctl被发送到/dev/mapper/control
(对于大多数发行版),但似乎我需要深入研究dmsetup、 libdevmapper 或类似的源代码,以了解 ioctl 实际如何工作以及如何使用它们。
是否有任何书籍、讲座或文档对这个主题进行了扩展?我是否陷入了解析复杂源代码的困境?我使用 libdevmapper 而不是 ioctl 系统调用更好吗?ioctl 的手册页过于笼统,在这种情况下没有多大用处。
我继承了一个 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
echo 3 > /proc/sys/vm/drop_caches
sync ; sync
(旧习难改 :)fsfreeze -f /export
dd if=/dev/mapper/my-lvol of=/dev/null status=progress
运行dd
直至完成。我承认这是有效的,因为我没有通过冻结的文件系统进行访问,但这让我想知道当我假设我的 Azure 磁盘不变时,LVM 是否仍然可以在低级别上执行操作。
dmsetup suspend
echo 3 > /proc/sys/vm/drop_caches
sync ; sync …
通常,块设备驱动程序会报告设备的正确大小,并且可以实际使用所有“可用”块。因此,文件系统事先知道它可以向此类设备写入多少内容。
但在某些特殊情况下,例如使用dm-thin
或dm-vdo
设备时,这种说法是错误的。如果这种块设备的ENOSPC
底层存储(上层 FS 对此一无所知)已满,那么它们随时可能返回错误。
因此,我的问题是,在这种情况下会发生什么:EXT4 文件系统已挂载r/w
,处于async
模式(默认),并且正在执行大量写入。磁盘缓存(脏内存)也会参与其中,此时如果用户运行sync
命令,就会有大量数据需要写入。
但突然间,该 EXT4 文件系统的底层块设备开始拒绝任何写入,因为“没有剩余空间”。文件系统的行为是什么?
它会打印错误并进入r/o
中止所有写入并可能导致数据丢失的模式吗?如果没有,它是否会等待空间,定期重试写入并拒绝新写入?在这种情况下,如果其他进程尝试分配大量 RAM,巨大的磁盘缓存会发生什么情况?(在 Linux 上,脏内存被认为是可用的,不是吗?)。
考虑到最坏的情况,如果磁盘缓存在错误发生时占用了大部分 RAM ENOSPC
(因为管理员设置得vm.dirty_ratio
太高),内核会崩溃或锁定吗?或者它只会使所有想要分配内存的进程等待/挂起?最后,不同文件系统的行为是否有所不同?
提前致谢。
假设我以这种方式挂载了一个磁盘:
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) 有没有办法告诉,给定一个 LUKS 块设备的路径,并且不知道密码,设备是否已经打开(解密)?
知道解密设备的路径怎么样?
device-mapper ×10
linux ×6
dm-crypt ×3
lvm ×3
block-device ×2
cryptsetup ×2
filesystems ×2
ioctl ×2
luks ×2
azure ×1
backup ×1
encryption ×1
ext4 ×1
external-hdd ×1
hard-disk ×1
hdparm ×1
system-calls ×1
usb-drive ×1
vfs ×1
volume ×1