Xen: Xen Opensource에서 Xen Cloud Platform으로 LVM 기반 시스템 마이그레이션

Xen: Xen Opensource에서 Xen Cloud Platform으로 LVM 기반 시스템 마이그레이션

Xen 오픈 소스 호스트에서 실행되는 여러 LVM 기반 가상 머신이 있습니다. 우리의 경우 "LVM 기반"은 루트 파티션을 위한 LVM 볼륨이 하나 있고 스왑 파티션을 위한 또 다른 볼륨이 있음을 의미합니다. VM의 커널과 initrd는 Xen 호스트의 파일로 이러한 볼륨 외부에 있습니다. 이러한 가상 머신은 Debian xen-tools 제품군의 일부인 xen-create-image를 사용하여 생성됩니다.

우리는 이러한 VM을 XCP 호스트로 마이그레이션하려고 하며 이를 수행하는 스크립트를 찾았습니다(http://www.xen.org/files/xva/xva.py). 하지만 이 스크립트는 구성 파일에 나열된 디스크가 "가상 디스크"라고 가정합니다. 즉, 자체 파티션 테이블과 기타 항목이 있습니다. 분명히 그렇지 않으며 작동하지 않습니다.

무엇을 하라고 권하고 싶나요? 집에서 만드는 방법이 있나요? 결국 이전 VM의 대용량 tar 파일로 새 VM을 덮어써서 VM을 마이그레이션해야 할 수도 있지만 이것이 최후의 수단이기를 바랍니다.

kpartx와 반대되는 방법을 사용하여 이 스크립트에서 예상하는 것과 같은 디스크를 생성할 수 있을 것이라고 생각했습니다. 즉, 가상 디스크를 각 파티션의 장치로 분할하는 대신 여러 파티션(또는 우리의 경우 LVM 볼륨)으로 함께 묶어 가상 디스크로 분할합니다. 디스크. 그러나 나는 그런 것을 모른다.

미리 감사드립니다!

답변1

이것이 우리가 그것을 행한 방법이다:

가상 머신의 이름이 "anansi"라고 가정해 보겠습니다. (저는 현재 Neil Gaiman의 책을 읽고 있습니다. 어떤 책인지 추측해 보겠습니다 :-)). 이는 두 개의 LVM 볼륨인 /dev/vg0/anansi-root(루트 파일 시스템, 5GB) 및 /dev/vg0/anansi-swap(512MB)에 설치됩니다.

먼저 가상 하드 디스크에 대한 새 LVM 볼륨을 생성합니다.

lvcreate -n anansiVHD -L 6GB vg0

그런 다음 cfdisk를 사용하여 여기에 두 개의 파티션을 만듭니다.

cfdisk /dev/vg0/anansiVHD

그런 다음 kpartx를 사용하여 가상 디스크 내의 파티션을 표시합니다.

kpartx -av /dev/vg0/anansiVHD

우리는 그것들을 포맷했습니다(이 경우 원래 가상 머신이 가지고 있던 ext3을 사용했습니다). LVM이 새 장치에 대해 모르기 때문에 /dev/vg0에 새 장치가 표시되지 않습니다. 다음과 같이 액세스하려면 /dev/mapper/whatever를 사용해야 합니다.

mkfs.ext3 /dev/mapper/vg0-anansiVHD1
mkswap /dev/mapper/vg0-anansiVHD2

그런 다음 루트 파티션을 마운트합니다.

mkdir /tmp/anansiVHD_root
mount /dev/mapper/vg0-anansiVHD1 /tmp/anansiVHD_root

마이그레이션하려는 VM이 ​​실행되는 동안 스냅샷을 사용하여 해당 내용을 복사합니다.

lvcreate -s -n anansi-snap -L 2G /dev/vg0/anansi-root
mkdir /tmp/anansi-snap
mount /dev/vg0/anansi-snap /tmp/anansi-snap
cd /tmp/anansi-snap
tar c . | (cd /tmp/anansiVHD_root ; tar xv)

우리는 다음을 청소합니다:

umount /tmp/anansiVHD_root
umount /tmp/anansi-snap
lvremove -f /dev/vg0/anansi-snap
kpartx -d /dev/vg0/anansiVHD

가상 디스크에 대한 변경 사항을 반영하려면 가상 머신의 구성 파일("anansi.cfg")을 변경해야 했습니다. 이는 다음 줄을 변경하는 것을 의미합니다.

disk    = [ 'phy:/dev/vg0/anansi-root,xvda1,w', 'phy:/dev/vg0/anansi-swap,xvda2,w' ]

이와 관련하여:

disk    = [ 'phy:/dev/vg0/anansiVHD,xvda,w' ]

그런 다음 이전에 링크된 스크립트를 사용하여 머신을 마이그레이션합니다.

xva.py -c anansi.cfg -s <the IP of our XCP host> --username=root --password=<root password>

그런 다음 스크립트의 지침에 따라 VM을 XCP 호스트로 부팅하는 데 사용되는 커널과 initrd를 복사해야 합니다. 마지막 단계는 XCP 호스트에 SSH를 통해 연결하고 해당 VM의 부트로더를 변경하는 것입니다. 그렇지 않은 경우 XCP는 pygrub을 사용하려고 시도하며 이를 위해서는 가상 하드 디스크 내부에 커널과 initrd가 필요하므로 작동하지 않습니다.

그래서 우리는 이렇게 했습니다:

xe vm-param-set PV-bootloader="" uuid=0ab93325-bdb3-e5c9-e7ab-2173b612b02c

"xe vm-list"에서 새 가상 머신의 uuid를 얻었습니다.

답변2

vi /tmp/tmpmigrateVHD_root/boot/grub/grub.conf:

  • root=/dev/sda1 console=tty0 --> root=/dev/xvda1 console=xvc0

/tmp/tmpmigrateVHD_root/etc/fstab:

  • /dev/sda1 --> /dev/xvda1
  • /dev/sda2 --> /dev/xvda2

vi /tmp/tmpmigrateVHD_root/etc/inittab: (역순으로 주석 처리)

  • 공동:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
  • #1:2345:respawn:/sbin/mingetty tty1
  • #2:2345:respawn:/sbin/mingetty tty2
  • #3:2345:respawn:/sbin/mingetty tty3
  • #4:2345:respawn:/sbin/mingetty tty4
  • #5:2345:respawn:/sbin/mingetty tty5
  • #6:2345:respawn:/sbin/mingetty tty6

관련 정보