如何在较小的磁盘上还原较大卷的 LVM 快照?

mer*_*lin 3 ubuntu backup lvm restore

我正在尝试在本地 Ubuntu 20.04 (Focal Fossa) 服务器上备份/恢复 LVM 卷。生产服务器的 LV 为 500 GB,但到目前为止只使用了 19 GB。

本地开发服务器有 24 GB 可用空间,我打算在其中从生产中恢复 19 GB。我-L 24G在做 LVM 快照时确实将其用作参数。该过程无法恢复并显示消息:“设备上没有剩余空间”:

生产服务器:

sudo lvcreate -s /dev/vg0/test -n backup_test -L 24G
sudo dd if=/dev/vg0/backup_test  | lz4 > test_lvm.ddimg.lz4

1048576000+0 records in
1048576000+0 records out
536870912000 bytes (537 GB, 500 GiB) copied, 967.79 s, 555 MB/s

sudo lvdisplay /dev/vg0/backup_test
  --- Logical volume ---
  LV Path                /dev/vg0/backup_test
  LV Name                backup_test
  VG Name                vg0
  LV UUID                IsGBmM-VM7C-2sO4-VrC1-kHKg-EzcR-4Hej44
  LV Write Access        read/write
  LV Creation host, time leo, 2021-07-04 12:45:45 +0200
  LV snapshot status     active destination for m360
  LV Status              available
  # open                 0
  LV Size                500.00 GiB
  Current LE             128000
  COW-table size         24.00 GiB
  COW-table LE           6144
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:10
Run Code Online (Sandbox Code Playgroud)

本地测试服务器:

sudo lvcreate -n restore -L 24.5G data
sudo mkfs.ext4 /dev/data/restore
sudo lz4 -d test_lvm.ddimg.lz4 | sudo dd of=/dev/data/restore

Warning : using stdout as default output. Do not rely on this behavior: use explicit `-c` instead !
dd: writing to '/dev/data/restore': No space left on device
51380225+0 records in
51380224+0 records out
26306674688 bytes (26 GB, 24 GiB) copied, 1181.48 s, 22.3 MB/s
Run Code Online (Sandbox Code Playgroud)

有没有办法在小于 500 GB 的磁盘上还原仅包含 19 GB 的 500 GB 卷?

Jas*_*wen 5

您尝试还原的数据大小为 500 GB,无法放入大小为 24 GB 的逻辑卷中。您可以更有选择性地选择要传输的内容,也可以为目标卷组分配更多空间。

听起来您正在备份的逻辑卷上的数据只有 19 GB。有几种方法可以传输该数据。

如果你只关心数据而不关心文件系统,你可以mkfs.ext4在目标上创建一个新的文件系统(通过左右),并使用操作文件而不是块设备的工具,如 rsync(1) 或 tar(1)。

或者,您可以使用fsarchiver(8),它可以备份文件系统,然后将其恢复到较小的设备。

最后,您可以使用 resize2fs(8) 和 lvreduce(8) 缩小要备份的块设备的大小。然后,您可以备份那个较小的卷,并在新服务器上恢复到类似大小的卷。