艾瑞克的 Hexo 空間

筆記-從 Linux上的 KVM 虛擬平台 的 image 檔案直接轉換到 proxmox convert KVM .img to proxmox

KVm Side

一行指令,可以解決,如果 ssh 會通的話 (待驗證)

update:
指令確定可行,但還是要注意那個 img 檔案的權限問題

ssh [email protected] “dd if=vm.img | gzip -1 -“ | dd of=/dev/pve/vm-100-disk-1

shutdown kvm 機器

virsh list 找出目前現有在運行的虛擬機

1
2
3
4
5
6
7
[email protected]:~$ virsh list
Id Name State
----------------------------------
1 nms_server running
2 redmine01 running
3 ldap02 running
4 mediawiki01 running

dumpxml 看看系統設定,主要是看磁碟的位置
找 disk 看底下的 path

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<domain type='kvm' id='4'>
<name>mediawiki01</name>
<uuid>bfcad2d5-14c4-01b2-1b9f-908210169d4d</uuid>
<memory>400000</memory>
<currentMemory>400000</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/images/mediawiki01.img'/>
<target dev='hda' bus='ide'/>
<alias name='ide0-0-0'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
<controller type='ide' index='0'>
<alias name='ide0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:11:23:ad'/>
<source bridge='br0'/>
<target dev='vnet3'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<domain type='kvm' id='4'>
<name>mediawiki01</name>
<uuid>bfcad2d5-14c4-01b2-1b9f-908210169d4d</uuid>
<memory>400000</memory>
<currentMemory>400000</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/images/mediawiki01.img'/>
<target dev='hda' bus='ide'/>
<alias name='ide0-0-0'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
<controller type='ide' index='0'>
<alias name='ide0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:11:23:ad'/>
<source bridge='br0'/>
<target dev='vnet3'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

shutdown

1
virsh shutdown mediawiki01

delete

1
2
virsh destroy VM_NAME
virsh undefine VM_NAME

接下來不需要 DUMP 可以直接把檔案傳出去
不過一開始會遇到沒有權限的問題
要把/var/lib/libvirt/images/mediawiki01.img的權限改成 a+r才可以

1
2
#先傳回本機,因為這兩台kvm/Proxmox 沒辦法直接對連
scp -pr /var/lib/libvirt/images/mediawiki01.img changch@192.168.11.34:/tmp

On Proxmox Node

建立一台新機器,磁碟格式選 raw disk ,大小隨便
create new vm using raw disk

建立完成之後,登入 Proxmox Node的console
找到這顆磁碟的路徑
找路徑的方法可以看WEB界面,或者到console看conf
找到路徑之後,就把剛剛做出來的 image檔案傳過來

把舊的 vm-vmid-disk-1.raw給砍掉
然後把剛剛傳到本機的映像檔改成 vm-vmid-disk-1.raw

再傳到proxmox上,放到剛剛磁碟的路徑裡
接著去WEB界面開機,或者直接 qm start 也可以
理論上來說,這樣就完成轉換了!

還算滿簡單的!

update:
轉過去的機器,預設都是在本機的磁碟空間內,所以轉過去之後,建議去作一次move disk(記得選擇delete source disk),把磁碟移到 shared storage上,才有snapshot/migrate的功能。
不做move disk ,用 backup/restore的方式也可以。

update:
在把img檔案抓回來之前,建議先去做 virsh dumpxml vm_name > vm_name.xml 這個指令
然後看一下裡面的硬碟用的是什麼控制器
今天轉完第一台,跟著做第二台,結果開不起來
測了很久才發現第二台用的居然是 ide controller , WTF !
如果是這樣子,那在proxmox建立VM時,控制器就要跟著選IDE
接下來的步驟就一樣

不過我在想我操作第二台轉入會失敗的原因,不知道是不是因為第一次轉這台的時候,我是改用第一段那個指令來轉
第二次轉的時候,我就乖乖先用scp 抓回本機,再從本機上傳到proxmox
找時間再來驗證看看..

avatar

  1. 1. KVm Side
    1. 1.1. shutdown kvm 機器
  • On Proxmox Node