LVMのLogical Volumeをコピーする

同じサイズのLVを作って、ddでまるごとコピー出来た。
毎度やるのは面倒だからスクリプト作った。
Volume Groupを超えて使える。
 

lvcopy.sh

#!/bin/bash

SRC_VG=$1
SRC_LV=$2
DST_VG=$3
DST_LV=$4

# check args
if [ -z "$SRC_VG" -o -z "$SRC_LV" -o -z "$DST_VG" ]; then
    echo usage: $0 SRC_VG SRC_LV DST_VG [DST_LV]
    exit 1
fi

# dst lv name
if [ -z "$DST_LV" ]; then
    DST_LV=$SRC_LV
fi

# check src vg
if [ `vgdisplay $SRC_VG 2>/dev/null | wc -l` -eq 0 ]; then
    echo SRC_VG is not found: $SRC_VG
    exit 1
fi

# check src lv
LV_SIZE=`lvdisplay /dev/$SRC_VG/$SRC_LV 2>/dev/null | grep 'LV Size' | awk '{print $3$4}'`
if [ -z "$LV_SIZE" ]; then
    echo SRC_LV is not found: /dev/$SRC_VG/$SRC_LV
    exit 1
fi

# check dst vg
if [ `vgdisplay $DST_VG 2>/dev/null | wc -l` -eq 0 ]; then
    echo DST_VG is not found: $DST_VG
    exit 1
fi

# check dst lv
if [ `lvdisplay /dev/$DST_VG/$DST_LV 2>/dev/null | wc -l` -ne 0 ]; then
    echo DST_LV is already exist: /dev/$DST_VG/$DST_LV
    exit 1
fi

# copy
lvcreate -L $LV_SIZE -n $DST_LV $DST_VG
dd if=/dev/$SRC_VG/$SRC_LV of=/dev/$DST_VG/$DST_LV bs=4M