KVM İmajını Host Makineye Bağlama

By samed, 28 December, 2013

KVM ile sanallaştırdığınız makinelerinizin diskini makineyi açmadan düzenlemek isteyebilirsiniz. Bu senaryo örneğin sanallaştırma servislerinizi otomasyona bağlamak istediğiniz durumlarda veya yanlış düzenlemelerden dolayı sanal makinenizin açılmaması durumlarında sizi kurtaracaktır.

Not: Bu dokümanda yer alan uygulamalar Centos 6.4 64Bit üzerinde gerçekleştirilmiştir. Sanal makinelerin yönetimi Virt-Manager ve libvirt servisi ile gerçekleştirilmiştir.

Normal bir diski bağlama
Sanal makinelerinizin imajları varsayılan olarak /var/lib/libvirt/images yolu altında yer alır.

İmaj'ın yolu: /var/lib/libvirt/images/centos6.4-64bit-baseimg.img
Aşağıda anlatılan işlemlerin gerçekleştirilmesi için root haklarına ihtiyaç vardır.

  1. İmajın loopback aygıtına bağlanması
    İmaj dosyamızı öncelikle sisteme bir disk -blockdevice- olarak göstermemiz gerekli. Bu işlemi aşağıdaki komut ile gerçekleştirebiliriz.

    losetup /dev/loop0 /var/lib/libvirt/images/centos6.4-64bit-baseimg.img
  2. Diskin bölümlendirmesinin haritalanması
    Diskimiz birden fazla disk bölümünden -partition- oluşuyor olabilir. Bu durumda diskin partition-table'ının okunarak ona göre bölümlerin başlangıç ve bitiş noktalarını işaret edecek şekilde disk bölümlerini haritalamamız -mapping- gerekir.

    [root@host ~]# kpartx -av /dev/loop0
    add map loop0p1 (253:0): 0 1024000 linear /dev/loop0 2048
    add map loop0p2 (253:1): 0 82860032 linear /dev/loop0 1026048

    Yukarıda komutun çıktısından da gördüğümüz gibi disk iki bölümden oluşuyor. Bu bölümler /dev/mapper altında loop0p1 ve loop0p2 şeklinde gözlemlenebilir.

  3. Diskin bölümünün bağlanması
    Bu işlemde tahmin edeceğiniz gibi mount komutu ile gerçekleştiriliyor.

    mount /dev/mapper/loop0p1 /mnt/part1
  4. Diskin sistemden çözülmesi
    Diski bağladık, gerekli değişiklikleri yaptık, şimdi sıra diski sistemden ayırmaya. Öncelikle mount ettiğimiz disk bölümünü sistemden ayırıyoruz.

    umount /dev/mapper/loop0p1

    Sonra haritaladığımız disk bölümlerini çözüyoruz.

    kpartx -dv /dev/loop0

    Son olarak da loop0 aygıtına bağlamış olduğumuz diskimizi çözüyoruz ve bitiyor.

    losetup -d /dev/loop0

Olaki benim gibi bir hata yapıp sanal makinenizin diskine lvm kurduysanız ne olacak? O zaman lvm'in kurulu olduğu disk bölümünü bağlamak istediğinizde bir hata ile karşılaşacaksınız.

LVM Bölümü Bağlama
LVM kurulu bir disk bölümünü ile çalışmak için yukarıda anlatıldığı gibi disk bölümlerini haritaladıktan sonra aşağıdaki işlemleri yapmanız gerekli.

  1. VolumeGroup'ları bulma

    vgscan
  2. Bulunan VolumeGroup'ları listeleme

    [root@host ~]# lvscan
    inactive          '/dev/VolGroup/lv_root' [37.54 GiB] inherit
    inactive          '/dev/VolGroup/lv_swap' [1.97 GiB] inherit

    Çıktıdan da görüldüğü gibi yukarıda listelenmiş olan VolumeGroup'lar inactive durumdadır, yani devre dışıdır.

  3. VolumeGroup'ları aktif etme

    [root@host ~]# vgchange -ay VolGroup
    2 logical volume(s) in volume group "VolGroup" now active

    Artık VolumeGroup'umuz da aktif oldu ve LVM kurulu olan disk bölümümüzü de haritalamış olduk.

    [root@host ~]# ll /dev/VolGroup/
    total 0
    lrwxrwxrwx 1 root root 7 Dec 28 18:16 lv_root -> ../dm-2
    lrwxrwxrwx 1 root root 7 Dec 28 18:16 lv_swap -> ../dm-3
  4. LVM bölümlerin bağlanması
    LVM bölümlerimizi haritaladığımıza göre artık onları bağlayabiliriz, takibi yine mount komutu ile,

    mount /dev/VolGroup/lv_root /mnt
  5. Diskin çözülmesi

    [root@host ~]# umount /mnt
    [root@host ~]# vgchange -an VolGroup
      0 logical volume(s) in volume group "VolGroup" now active
    [root@host ~]# kpartx -dv /dev/loop0
    del devmap : loop0p2
    del devmap : loop0p1
    [root@host ~]# losetup -d /dev/loop0