使用卷组外部的奶牛数据创建 lvm 卷多个线性设备的设备映射器快照

使用卷组外部的奶牛数据创建 lvm 卷多个线性设备的设备映射器快照

我需要做一个在记忆中正在运行的已挂载根文件系统的快照。

文件系统本身位于 lvm 设备上,但 VG 中没有可用空间,无法扩展它。但是我有足够的 RAM,我只需要快照来制作备份,并且可能回滚到它。我不在乎服务器是否重新启动并“回滚”到快照。我使用的是设备映射器而不是 lvm2,因为我没有找到使用 lvm 制作它的方法。所以在 DM 术语中,我需要制作一个快照原点并在其上制作一个快照。

我为奶牛数据创建了一个内存块设备(在 tmpfs 上的文件循环顶部线性)并且它可以工作。

我的问题是我的 root fs 设备是两个线性设备,而不是一个:

root: 0 57000000 linear 8:48 2048
root: 57000000 160000000 linear 8:48 73869312
cow: 0 20971520 linear 7:2 0

(root不是这个vg中唯一的LV,cow是我的内存设备)

我在网上找到了很多关于这样做的文章,例如: https://wiki.gentoo.org/wiki/Device-mapper#Snapshot 但是,我没有找到正确的语法来在两个或多个线性设备之上创建快照源。

当我这样做时: dmsetup table root| sed 's~linear.*~snapshot-origin /dev/mapper/root~g'| dmsetup create snapshot-origin 我在 dmesg 中收到“命令失败”:

[ 2957.073592] device-mapper: table: 254:1: snapshot-origin: Cannot get target device
[ 2957.073595] device-mapper: ioctl: error adding target to table

当我对单个线性设备使用相同的方法时,一切都很好。

更新:
我在相同的配置上做了一个 lvm 快照,但在 vg 中有一些空间来看看 lvm 如何处理这个问题。确实如此,但我仍然不明白我如何手动执行此操作(使用我自己的牛设备)。

初始设置:

Root: 0 57090048 linear 8:48 2048
Root: 57090048 160571392 linear 8:48 73869312

这就是 lvm 在 上所做的事情lvcreate -s -L10G。所以这就是我想手动创建的:

Root--snap: 0 217661440 snapshot 254:1 254:4 P 8
Root-real: 0 57090048 linear 8:0 2048
Root-real: 57090048 160571392 linear 8:0 73869312
Root: 0 217661440 snapshot-origin 254:1
Root--snap-cow: 0 8388608 linear 8:0 57092096

据我从 dm 文档和各种文章中了解到,应该首先将原始设备标记为快照源:

dmsetup -vvv create so --table '0 217661440 snapshot-origin /dev/mapper/Root'            
dm version   OF   [16384] (*1)
Udev cookie 0xd4d3634 (semid 12746752) created
Udev cookie 0xd4d3634 (semid 12746752) incremented to 1
Udev cookie 0xd4d3634 (semid 12746752) incremented to 2
Udev cookie 0xd4d3634 (semid 12746752) assigned to CREATE task(0) with flags DISABLE_LIBRARY_FALLBACK         (0x20)
dm create so  OF   [16384] (*1)
dm reload so  OF   [16384] (*1)
<backtrace>
Udev cookie 0xd4d3634 (semid 12746752) decremented to 1
Udev cookie 0xd4d3634 (semid 12746752) incremented to 2
Udev cookie 0xd4d3634 (semid 12746752) assigned to REMOVE task(2) with flags DISABLE_LIBRARY_FALLBACK         (0x20)
dm remove so  OF   [16384] (*1)
Udev cookie 0xd4d3634 (semid 12746752) decremented to 1
Udev cookie 0xd4d3634 (semid 12746752) waiting for zero
Udev cookie 0xd4d3634 (semid 12746752) destroyed
Command failed

更新2:

open("/dev/mapper/control", O_RDWR)     = 3
/...cut.../
write(1, "dm create ECS-LVRoot  OF   [1638"..., 40dm create ECS-LVRoot  OF   [16384] (*1)
) = 40
ioctl(3, DM_DEV_CREATE, 0x7f66e826f350) = -1 EBUSY (Device or resource busy)
write(1, "<backtrace>\n", 12<backtrace>
)           = 12
write(2, "Command failed\n", 15Command failed
)        = 15

相关内容