克隆包含所有快照的 LVM2 精简池

克隆包含所有快照的 LVM2 精简池

需要将 400gb 池克隆到另一台机器上。这可行吗?首先,我收集有关现有池的数据:

[root@oktest-prod-db-2 ~]# lvdisplay --units B vg_oktestdb2/pool
  --- Logical volume ---
  LV Name                pool
  VG Name                vg_oktestdb2
  LV UUID                tPfUzG-bHW2-jepz-1Sf6-BSmw-jKz4-Tf6djR
  LV Write Access        read/write
  LV Creation host, time oktest-db-2, 2015-03-31 18:55:17 +0300
  LV Pool transaction ID 134
  LV Pool metadata       pool_tmeta
  LV Pool data           pool_tdata
  LV Pool chunk size     262144 B
  LV Zero new blocks     yes
  LV Status              available
  # open                 0
  LV Size                474031849472 B
  Allocated pool data    10.16%
  Allocated metadata     7.66%
  Current LE             113018
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

然后创建一个具有相同大小的新池:

[root@oktest-prod-db-1-new ~]# lvcreate -L 474031849472b -T vg_oktestdb1/pool --chunksize 256k
  Logical volume "lvol0" created
  Logical volume "pool" created

最后通过 ssh 复制它:

[root@oktest-prod-db-2 ~]# dd bs=128k if=/dev/mapper/vg_oktestdb2-pool | ssh root@oktest-prod-db-1-new 'dd bs=128k of=/dev/mapper/vg_oktestdb1-pool'

现在我只需要坐着等几个小时

更新:它当时确实有效。

答案1

不确定它是如何通过管道进入 SSH 会话的,但我习惯用 netcat 来做这件事

首先在目标服务器上启动一个监听的 netcat:

netcat -p 1237 -l | dd of=<destination lv path/name> obs=$((1024*1024)) ibs=8192

然后在源服务器上

dd ibs=$((1024*1024)) obs=8192 <source lv path/name>  | pv | netcat <ip of destination server> 1237

当然,您可以跳过“pv”部分,并将端口“1237”更改为可以通过防火墙的任何端口。

您也可以将其放入 gzip 中,但根据我的经验,这并不是很大的收获。

相关内容