Monthly Archives: June 2017

Hoe verhuis je een Xen instantie naar een andere server?

Om een Xen instantie naar een andere server te verhuizen welke niet in het cluster zit en/of van dezelfde storage gebruik maakt doe je het volgende:

  1. Kijk naar de omvang van het Logical Volume:
    [root@oudeserver ~]# lvdisplay
    
     --- Logical volume ---
      LV Name                /dev/VG_oudeserver/virtual_img
      VG Name                VG_oudeserver
      LV Write Access        read/write
      LV Status              available
      # open                 0
      LV Size                26.00 GB
      Current LE             832
      Segments               2
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:4

    Zoals je ziet is het Logical Volume 26 GB.

  2. Maak op de nieuwe server een Logical Volume aan die iets groter is (bijvoorbeeld 27 GB)
    [root@nieuweserver ~]# lvcreate -L 27G -n virtual_img  VG_nieuweserver
    
  3. Kopieer de inhoud van het Logical Volume over van de oude naar de nieuwe server:
    [root@oudeserver ~]# dd if=/dev/VG_oudeserver/virtual_img | gzip -1 - | ssh root@nieuweserver 'gzip -d | dd of=/dev/VG_nieuweserver/virtual_img'
  4. Kopieer het configuratie bestand van de oude naar de nieuwe server
    [root@oudeserver /]# scp /etc/xen/virtual.cfg root@nieuweserver:/etc/xen/
  5. Pas op de nieuwe server de configuratie aan en zorg ervoor dat de ‘disk’ overeenkomt met je nieuwe Logical Volume:
    disk = ['phy:/dev/VG_nieuweserver/virtual_img,hda,w','phy:/dev/VG_nieuweserver/virtual_swap,hdb,w']
    
  6. Starten maar!
    [root@nieuweserver /]# xm create /etc/xen/virtual.cfg 
    

     

Mount LVM guest schijven op een hypervisor met LVM

Proxmox maakt gebruikt van LVM, als je dus een guest aanmaakt krijgt deze netjes zijn eigen logical volume.
Als je vervolgens een OS installeert en je geeft aan LVM te gebruiken, heb je dus LVM binnen LVM.

Als je vervolgens partities van je guest wil mounten op je hypervisor om bijvoorbeeld een fsck uit te voeren, doe je het volgende:

root@hypervisor:~# lvdisplay 

--- Logical volume ---
  LV Path                /dev/pve/vm-100-disk-1
  LV Name                vm-100-disk-1
  VG Name                pve
  LV UUID                b6iKwA-iE9n-rfI4-bFU3-Kyrl-wixM-1BZb4e
  LV Write Access        read/write
  LV Creation host, time hypervisor, 2017-05-15 13:00:19 +0200
  LV Pool name           data
  LV Status              available
  # open                 1
  LV Size                60.00 GiB
  Mapped size            90.73%
  Current LE             15360
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           251:6

Het gaat dus om: /dev/pve/vm-100-disk-1

root@hypervisor:~# ls -alh /dev/pve/vm-100-disk-1 
lrwxrwxrwx 1 root root 7 Jun 16 11:43 /dev/pve/vm-100-disk-1 -> ../dm-6
root@hypervisor:~# fdisk -l /dev/dm-6

Disk /dev/dm-6: 60 GiB, 64424509440 bytes, 125829120 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 131072 bytes / 262144 bytes
Disklabel type: dos
Disk identifier: 0x134f441b

Device      Boot   Start       End   Sectors  Size Id Type
/dev/dm-6p1 *       2048    999423    997376  487M 83 Linux
/dev/dm-6p2      1001470 125827071 124825602 59.5G  5 Extended
/dev/dm-6p5      1001472 125827071 124825600 59.5G 8e Linux LVM

Je ziet dat er 3 partities zijn, deze kun je mappen met kpartx:

root@hypervisor:~# kpartx -av /dev/mapper/pve-vm--100--disk--1 
add map pve-vm--100--disk--1p1 (251:10): 0 997376 linear /dev/mapper/pve-vm--100--disk--1 2048
add map pve-vm--100--disk--1p2 (251:11): 0 2 linear /dev/mapper/pve-vm--100--disk--1 1001470
add map pve-vm--100--disk--1p5 : 0 124825600 linear /dev/mapper/pve-vm--100--disk--1 1001472

Kijk met lvscan welke logical volumes er nu zijn:

root@hypervisor:/dev/mapper# lvscan
  inactive          '/dev/guest-vg/root' [55.51 GiB] inherit
  inactive          '/dev/guest-vg/swap_1' [4.00 GiB] inherit

Activeer de volume group:

root@hyervisor:/dev/mapper# vgchange -a y guest-vg
  2 logical volume(s) in volume group "guest-vg" now active
root@hypervisor:/dev/mapper# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/guest-vg/root
  LV Name                root
  VG Name                guest-vg
  LV UUID                d0kREf-4oEy-HkP1-0eif-EJGw-3wOr-aeDBJG
  LV Write Access        read/write
  LV Creation host, time guest, 2017-05-15 13:08:25 +0200
  LV Status              available
  # open                 0
  LV Size                55.51 GiB
  Current LE             14211
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           251:13

Nu kun je doen wat je wil, in mijn geval een e2fsck :)

root@hypervisor:~# e2fsck /dev/guest-vg/root
e2fsck 1.42.12 (29-Aug-2014)
/dev/guest-vg/root: recovering journal
/dev/guest-vg/root contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (13275876, counted=9402797).
Fix<y>? yes
Free inodes count wrong (3522133, counted=1037469).
Fix<y>? yes

/dev/guest-vg/root: ***** FILE SYSTEM WAS MODIFIED *****
/dev/guest-vg/root: 2600851/3638320 files (0.0% non-contiguous), 5149267/14552064 blocks

Als je klaar bent maak je de volume group weer inactief:

root@hypervisor:~# vgchange -a n guest-vg

En wis je de mapping weer:

root@hypervisor:~# kpartx -dv /dev/mapper/pve-vm--100--disk--1 
del devmap : pve-vm--100--disk--1p5
del devmap : pve-vm--100--disk--1p2
del devmap : pve-vm--100--disk--1p1