最近在作xen上虛擬機的遷移,說實話這個問題已經困擾小編我好久好久了,每次都是以失敗了結。今天,就在激動人心的今天終因而遷移成功了,不過最後又發現了一個小問題,最後再說。今天就寫下這篇博客以此記念並記錄當時的操做。linux
之前一直都是本身遇到問題,在網上百度,谷歌查找滿天飛的資料,最後發現也沒幾篇文章可以對得上號,不少問題其實你們都應該遇到過,最後確定也解決了,不過你們都習慣了搭便車,曬出本身最後怎麼解決的卻沒幾個,不是忘記就是過高興了。但願今天的這篇文章,可以給之後遇到一樣問題的你一點幫助。vim
廢話就很少說了,直接上操做,總結吧。centos
1、實驗環境服務器
先說明一下,網上不少遷移的教程都是用三臺xen主機作的,一臺作共享存儲器能夠是nfs也能夠是isis,其它兩臺分別是源主機和目的主機。我這邊的話由 於種種緣由只安裝了兩臺機器,這次實驗是基於兩臺電腦來作的。主機A既是nfs服務器也是xen源主機,主機B是xen目的主機,環境以下:架構
2、遷移前的準備dom
1.首先,必須保證你全部實驗的機器的體系架構同樣(操做系統徹底一致,版本,位數什麼的),xen版本同樣,必須一致,重中之重,小編在這裏可栽了很多跟頭。ssh
2.下載一個迷你,小型的系統鏡像,centos也好,WinXP也好,主要用於一下子安裝domain客戶虛擬機用函數
3.確保源主機和目的主機都有足夠的空間。oop
4.確保兩臺機器之間可以ping通。測試
tips:若是ping的時候ping不通,請檢查一下,網線是否插好,IP地址是否在同一網段,還有防火牆是否關閉,每臺機器的網線是否插在正確的網口(小編以前的臺式機有兩個網口,插在了亮紅燈的上面,一直ping不一樣,後來換在發螢黃色的網口上,就ping通了)。
5.安裝nfs服務
sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
安裝好後修改vim /etc/exports文件,添加 /share *(rw,sync,no_root_squash)
注意這裏的/share 目錄就是一會要拿來作共享存儲的目錄。咱們必須在源主機和目的主機都創建這個相同的目錄,mkdir /share
啓動nfs服務,service nfs-kernel-server start ,而後利用mount命令進行掛載測試便可。
mount -t nfs IP地址:要掛在的路徑 本機路徑,舉個例子 mount -t nfs 169.254.9.88:/share /share這樣我就能在我本機的/share的目錄下訪問169.254.9.88主機上的/share目錄了
6.安裝SSH服務
利用xl migrate domainid 目的主機IP地址,其實這裏是利用SSH鏈接的,因此咱們要配置ssh。
sudo apt-get install openssh-client
sudo apt-get install openssh-server
啓動ssh服務 /etc/init.d/shh start
生成密鑰對 ssh-keygen -t rsa
發送公鑰 ssh-copy-id -i id-rsa.pub root@對方IP地址,出現提示直接yes便可,一切沒問題會讓你輸入對方目的機器的root用戶的密碼,若是不知道密碼能夠利用sudo passwd root 來修改root用戶的密碼(目的主機上操做)。
tips: root@IP地址,默認鏈接root用戶,固然也能夠換成其餘用戶如songmin@ip地址,這樣就會提示你輸入songmin用戶的密碼,或者你直接 ssh-copy-id -i id-rsa.pub ip地址,這樣是默認鏈接root用戶的。
一切操做完成後,就可使用ssh ip地址去遠程鏈接對方目的主機了,注意這裏是默認鏈接root用戶,若是出現錯誤多是你的網線沒插,或者輸入密碼錯誤,又或者是root用戶默認不容許遠程的登陸。若是是第三個緣由,請修改目標主機的vim /etc/ssh/sshd_config文件將PermitRootLogin without-password 這裏改成PermitRootLogin yes保存退出後重啓ssh服務/etc/init.d/ssh restart 便可生效。
3、遷移步驟
1.建立一個創建在共享存儲上的虛擬機域
安裝Apache(http)服務,具體的操做請網上自行查閱,篇幅過小不夠寫,安裝好後,我將/var/www做爲了根目錄。
2.建立存放domainU的文件cd /share 在/share目錄下進行
dd if=/dev/zero of=cen.img oflag=direct seek=102399 bs=1M count=1 這裏建立了100G
3.將下載好的iso鏡像複製到/share 目錄,我用的是centos-6.3.iso
4. 創建iso目錄,mkdir /var/www/iso
掛載目錄 mount -o loop /share/xx.iso /var/www/iso
將vmlinuz,initrd.img解壓 cp /var/www/iso/isolinux/{vmlinuz,initrd.img} /share
5.編寫配置文件
先將工做目錄切換到xen下,cd /etc/xen
而後vim cen.cfg,寫入如下配置信息
注意,我這裏的配置文件是安裝好以後的了,請你們把kernel和ramdisk前面的註釋符去掉,將bootloader那一行前面前面加上註釋。而後保存退出。
而後 xl create -c cen.cfg 安裝便可。一路根據提示就好了,不清楚能夠參考網址:
http://luochen2015.blog.51cto.com/9772274/1751540
建立好以後,xl list 看一下,剛建立的虛擬機是否在運行。
6.在目標主機上掛載共享目錄
mount -t nfs 169.154.12.45:/share /share
7.進行遷移
xl migrate cen 169.254.12.125
出現下圖,說明沒什麼問題啦。
而後在目的主機上 xl list 發現多了一個虛擬機,而源主機上已經找不到剛纔遷移的虛擬機了。
四.總結
我以前遇到不少問題,形成我沒有遷移成功在這裏詳細總結一下。
1.virtual-manager不支持xen的遷移
一開始作實驗實驗的時候,我是利用virtual-manager這個圖形化界面建立虛擬機的。它支持xen和KVM+qemu兩種鏈接方式。在上面建立好虛擬機右鍵,你會發現有一個遷移的選項,但並不能點擊。這是由於你沒有在virt-manager鏈接其餘主機,因此不能遷移,鏈接也是用的ssh,配好ssh以後,就能夠鏈接其餘的xen主機啦。
當我點擊遷移時,報錯是這樣說的,鏈接驅動器不支持這個功能。但kvm是能夠遷移得,截圖以下:
2.遷移時虛擬域配置文件沒有,或者格式不正確。
經過virt-manager建立的xen虛擬機的配置文件位於/var/lib/xen下,通常運行時纔會有個對應的xml格式配置文件。而經過virt-manager建立的kvm+qemu虛擬機的配置文件放在/etc/libvirt/qemu下。
一開始我還不知到用xl create 配置文件來建立虛擬機,就只有用virt-manager來建立。
因而我就直接用xl migrate IP地址開始遷移,報錯提示說缺少配置文件。
而後我又 xl migrate -C IP地址,仍是報錯,說的是配置文件的格式不被識別。
後來我發現這樣是不行的,因而就放棄了用virt-manager建立虛擬機,也所以開始了漫長的建立虛擬機之路。
3.沒有配置SSH
4.建立的虛擬機不對
我嘗試使用virt-install,virsh,virt-manager,xen-tools, xl create等建立虛擬機。後來在不斷的嘗試中我發現使用virt-install和virtual-manager建立是同樣的,遷移時會不識別配置文件。而xen-tool建立的虛擬機也沒有成功建好。最後在不斷的試驗中終於利用xl create建立好了虛擬機
5.不會寫用 xl create 建立虛擬機的配置文件
一開始我並不知道這個配置文件怎麼寫,也嘗試將xml格式的轉化過來,不過最後都失敗了,後來查閱了一些資料,慢慢研究才終於懂得了配置文件怎麼寫。
6.存放虛擬機的文件沒有共享或目的主機不存在這個文件
當虛擬機成功建好,ssh配置好,配置文件也沒有錯以後,我再一次進行遷移實驗。最終結果仍然是失敗。提示:xx.img no sunch file or direction
決絕辦法就是cp 複製到目標主機,這樣的結果就是太慢了,耗時,耗力。
拷過去以後,再次遷移又報錯說 :message to long ,思考了半天應該是沒有用共享存儲的問題,而要遷移的虛擬機也應該創建在共享存儲上。
7.看源碼沒突破
遇到上述的那個問題的時候,師兄建議我去分析源碼,因而我就分析了好長一段時間的源碼,大概1個周,不過最後我也沒有分析出個因此然,而後也不知道問題在哪兒,浪費了很長一段時間。
能夠參考http://blog.csdn.net/bearox/article/details/69388926,我還評論交了很久。
雖然源碼使用C語言+Python寫的,但我以爲看起來仍是有點費力,畢竟一開始我都不知道從哪一個文件哪一個函數開始是遷移相關的代碼,也不知道函數中莫名出現的變量是從哪兒來的。畢竟要看懂別人的思想和套路仍是要花時間琢磨。
途中還遇到一個:qemu signature :internal error 這個問題我不知道是爲何,後來直接從新作了一邊實驗,就沒出現這個問題而是其餘問題了。
8.系統體系架構問題
通過一段時間分析源代碼無果以後,咱們導師就讓師兄指導我作一下實驗。因而我又放棄分析源碼,開始從頭作一遍實驗。
這一次出現的問題是mmap faild
和師兄一塊兒檢查討論了很久,後來發現本身兩臺機子的操做系統爲數居然不一致,一個是32位,一個是64位。這樣遷移確定是有影響的。因而就決定從新裝一遍環境。裝成同樣的以後,就成功遷移了。
9.最後還有一個很奇怪的現象,就是成功遷移過去的虛擬機,在目的主機上運行一段時間後,居然莫名奇妙的就消失了,xl list 就沒有對應顯示運行的信息了,如今還不知道是怎麼回事。