顯示具有 kvm 標籤的文章。 顯示所有文章
顯示具有 kvm 標籤的文章。 顯示所有文章

2011年9月9日 星期五

直接操作 KVM 虛擬硬碟檔 (撰寫程式)

可自行撰寫程式, 方便直接操作 KVM 虛擬硬碟檔, 程式操作如下 :

1. 執行 mntvm.sh 程式, 掛載 GW100.vmdk 虛擬硬碟檔, 此虛擬硬碟檔會被掛載到 /tmp/GW100.vmdk 這目錄

$ sudo ./mntvm.sh -m GW100.vmdk

掛載 GW100.vmdk 成功

2.檢視 虛擬硬碟檔 內容

$ ll /tmp/GW100.vmdk/
總計 32
drwxr-xr-x 5 root root 4096 2011-08-20 17:33 ./
drwxrwxrwt 13 root root 4096 2011-09-09 15:29 ../
drwxr-xr-x 3 root root 4096 2011-08-19 12:03 boot/
drwx------ 2 root root 16384 2011-08-19 12:03 lost+found/
drwxrwxr-x 3 xman staff 4096 2011-08-19 14:04 tce/

3. 懈載 虛擬硬碟檔

$ sudo ./mntvm.sh -u GW100.vmdk

懈載 GW100.vmdk 成功

mntvm.sh 程式
#!/bin/bash
#
# mntvm.sh (V 1.0)
# Date : 2011/08/29
#
# Copyright (C) 2010 "Sung-Ling Chen"  <kvm99.98@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/Licenses/>.
#
#####################################################################

# 執行前檢查
#---------------------------------------------------------------
[ "$USER" != "root" ] && echo "需要 root 權限" && exit 1

[ "$#" != 2 ] && echo 'mntvm [--mount|-m|--umount|-u] vm' && exit 1
cmd=$1
[ ${cmd%%[a-zA-Z]*} == '--' ] && cmd='\-\-'${cmd##*-}
[ ${cmd%%[a-zA-Z]*} == '-' ] && cmd='\-'${cmd##*-}

echo "--mount,-m,--umount,-u" | grep "$cmd" &>/dev/null
[ "$?" != "0" ] && echo "mntvm [--mount|-m|--umount|-u] vm" && exit 1

vmdk=$2

case  "$1" in
      '--mount' | '-m' )
          if [ -f /var/lib/libvirt/images/$vmdk ]; then
             [ -d /tmp/$vmdk ] && echo "$vmdk 已掛載" && exit 1
             echo -ne "\n掛載 $vmdk "
             kvm-nbd -c /dev/nbd0 /var/lib/libvirt/images/$vmdk &>/dev/null
             if [ "$?" == 0 ]; then
                sleep 2

                [ -d /tmp/$vmdk ] && rm -r /tmp/$vmdk
                mkdir /tmp/$vmdk

                mount /dev/nbd0p1 /tmp/$vmdk
                [ "$?" == 0 ] && echo -e "成功\n"
              fi
          else
             echo "找不到 /var/lib/libvirt/images/$vmdk 檔案"
             exit 1
          fi
            ;;
      '--umount' | '-u' )
          if [ -d /tmp/$vmdk ]; then
             umount /tmp/$vmdk
             [ "$?" == 0 ] && rm -r /tmp/$vmdk

             kvm-nbd -d /dev/"nbd0" &>/dev/null
             [ "$?" == 0 ] && echo -e "\n懈載 $vmdk 成功\n"
          else
             echo "找不到懈載 $vmdk 目錄"
             exit 1
          fi
           ;;
esac

echo ""
exit 0

直接操作 KVM 虛擬硬碟檔 (手動操作)

你可以在沒啟動虛擬電腦的狀態下, 直接掛載虛擬硬碟檔 (*.qcow2, *.vmdk,...), 進行系統修改, 操作步驟如下 :

1. 將 VMware 虛擬硬碟檔 (*.vmdk) 掛載至 /dev/nbd0 區塊裝置, 命令如下 : 

$ sudo kvm-nbd --connect=/dev/nbd0 ./NS88.vmdk 
 
2. 檢視虛擬硬碟檔內部資訊 (檔案系統, 分割區)
 
$ sudo fdisk /dev/nbd0

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/nbd0: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

所用裝置 Boot      Start         End      Blocks   Id  System
/dev/nbd0p1   *           1         522     4192933+  83  Linux

3. 將 /dev/nbd0p1 裝置掛載至指定目錄
由前一步驟的資訊中,  可以得知存在 /dev/nbd0p1 這裝置, 其內容為 Linux 檔案系統, 掛載命令如下 :

$ sudo mkdir /tmp/mydisk
$ sudo mount /dev/nbd0p1 /tmp/mydisk


4. 檢視虛擬硬碟檔內部的檔案系統

$ ll /tmp/mydisk
總計 32
drwxr-xr-x  5 root root   4096 2011-08-20 17:33 ./
drwxr-xr-x 23 root root   4096 2011-07-16 19:18 ../
drwxr-xr-x  3 root root   4096 2011-08-19 12:03 boot/
drwx------  2 root root  16384 2011-08-19 12:03 lost+found/
drwxrwxr-x  3 xman staff  4096 2011-08-19 14:04 tce/

5. 卸載 /dev/nbd0 裝置


$ sudo umount /tmp/mydisk
$ sudo kvm-nbd -d /dev/nbd0
/dev/nbd0 disconnected 

2011年6月26日 星期日

Linux KVM - 建立 Windows 遠端桌面系統

在公司內部建置虛擬系統平台,除了運用在大部分的應用服務平台之外,另外一個重點,就是為前端的使用者,提供一個可工作的作業平台,簡單來說,就是提供一個 可遠端連線作業的桌面系統,如 Windows 桌面或是 Linux 桌面 ,以強化前端使用者電腦的功能,例如,可以讓前端使用者,連線到虛擬電腦上來使用 ERP 系統,不需要額外再對前端電腦進行套件安裝或另外設定,而這樣的作法,可以完完全全的將個人電腦系統與公司資訊應用系統給區分開來,除了減少 IT人員的負擔外,最重要的,就是可以強化公司內部資源的安全性,這樣的概念, 就是所謂的〝桌面雲〞。

一般傳統公司的作法,大多是一位使用者就配置一台個人電腦,且不同時期採購的電腦,硬體規格與作業系統,也往往都會有所差異,加上使用者不好的使用習慣,Client 端的電腦就常常都會出狀況,令 MIS 或系統管理員在硬體或系統軟體維護上的困擾,而〝桌面雲〞的概念,就是要打破一般個人電腦軟硬體上的差異與維護上的困擾,利用虛擬系統平台與桌面雲,為不同的使用者提供合適的遠端作業環境,如一般行政人員與程式開發人員,其對於硬體與應用軟體的需求就有所差異,善用虛擬電腦,就可以為不同的使用者,預先打造合適的虛擬電腦與系統環境,讓使用者可以透過遠端桌面連線的方式,登入到虛擬電腦內來作業,這樣的方式有以下的優點:
  • 前端使用者的電腦,基本條件只要可以上網就可以,不需要太高檔的硬體設備,可以減少採購上的支出

  • 由虛擬系統平台控管的虛擬電腦,可以隨時產生新的虛擬電腦,來應對不同的應用服務與作業需求,也可以針對虛擬電腦進行備份、監控與維護,減輕系統管理員的負擔,並提高管理效能
除了特殊需求之外,大部分的使用者,所使用的個人電腦作業系統都是 Windows ,而一般要遠端連線到 Windows 作業系統之內,有兩種遠端桌面的連線方式,一種是 Windows 自定的遠端連線模式,RDP,而另一種遠端連線的選擇,則是 VNC 遠端桌面連線。


RDP 遠端桌面連線

RDP 遠端桌面連線,是微軟自定的遠端桌面連線模式,只能利用在連線到遠端 Windows 作業系統之內,不過,對遠端桌面連線對象是 Windows 作業系統來說,卻也是最簡單,也是效能較好的一種遠端桌面連線模式。

Linux KVM 要執行 RDP 遠端桌面連線,依照網路連線方式的不同,有兩種方式:


第一、Bridge 連線模式(外部網路)

基本上,只要符合以下條件,幾乎都可以連線到遠端的 Windows 系統之內:
  • 開啟虛擬電腦詳細資訊頁面,選擇〝NIC....〞的網路卡設定選項,在右方資訊頁面上,確認網路連線方式為〝Bridge:


  • 開啟遠端 Windows 作業系統內允許遠端桌面連線的選項


  • 遠端 Windows 電腦擁有可直接連線的 IP 位址(也就是指 Bridge ,且若外網要連線,則此 Windows 電腦也必須是外網可以直接辨識與連線的 IP ,如實體 IP,若在內網不同網段之上,除了要可以連線到此電腦之外,還需要開啟特定的連接埠)

  • 不同網對要連線時,必須開啟特定的連接埠(預設是 3389

設定完成,就可以利用微軟的遠端桌面程式:



或是 Ubuntu Desktop 的遠端桌面連線程式(應用程式網際網路終端伺服器客戶端):



輸入適當的資訊(虛擬電腦 IP、登入帳號與密碼),就可以遠端開啟虛擬電腦內的 Windows 桌面系統了。一般來說外部網路,只要虛擬電腦擁有實體 IP ,在 Windows 遠端桌面的連線上,幾乎是沒有任何問題的,而內部網路,則需要與網管人員溝通與協商,除了開放連接埠之外,也需要將網路安全性列入考量,以提供安全的連線環境。


第二、KVM 網路

就資訊安全的角度來說,若只是為了降低網路連線設定上的難度,而把公司應用資訊系統放到外部網路上,實在是非常危險的一件事,所以應該放置在公司內部網路,才能有效管控資訊安全。

不過,若在 Linux KVM 的虛擬電腦之內,架設公司的應用服務系統,要以 RDP 的方式,遠端連線到虛擬電腦之內作業,現階段來說,沒辦法在 virt-manager 之內,以直接設定的方式,開啟實體電腦與虛擬電腦之間連接埠(3389 port)的連線,而必須利用以下的方式,來達到 RDP 遠端桌面連線:
  • 啟動虛擬電腦,開啟遠端 Windows 作業系統內允許遠端桌面連線的選項,啟用完成,將虛擬電腦關機

  • 利用以下指令,啟動虛擬電腦,並連接實體電腦與虛擬電腦間 3389 port 的連接(port redirection):

    $ kvm -m 512 -hda winxp.img -redir tcp:3389::3389 &

    備註1VMware 的虛擬系統平台,已具備了 port redirection 的功能


VNC 遠端桌面連線

RDP 的遠端桌面連線方式,對 Windows 作業系統來說,是連線效能較佳的選擇,除此之外,另一種遠端連線桌面,則是 VNC 的遠端桌面連線,與 RDP 連線模式一樣,也是需要針對此連線服務開啟特定的連接埠(預設是由 5900 開始)。

不過,即使需要用到 VNC 遠端桌面連線,卻不需要在虛擬電腦之內,再額外安裝 VNC Server 端的軟體,原因是因為 libvirt 本身就為虛擬電腦提供了 VNC 的連線模式,且 virt-manager 就是利用 VNC 的連線方式,來管理與運作虛擬電腦,設定就在於虛擬電腦的詳細資訊頁面之內:



這也就表示,在 virt-manager 內開啟的虛擬電腦的視窗,其實就是 VNC 遠端桌面連線。

不過, virt-managet 內部的 VNC 連線模式,預設只能本機連線(127.0.0.1),所以其他外部的電腦,則無法利用 VNC 遠端桌面連線,來登入 Linix KVM 之內的任一台虛擬電腦,若需樣開放外部電腦可以連線,則必須修改 VNC 原本的設定值。

設定前,需要先將虛擬電腦關機,而關機後,再開啟詳細系統資訊頁面,將原本的〝顯示 VNC〞整個刪除:



刪除後,要來新增一組新的 VNC 連線,按下下方的「Add Hardware」後,會跳出新增硬體的設定頁面,並點選「Graphics」,而右方的設定頁面,將「Type」欄位的選項,選為 〝 VNC〞,並勾選「Address」的選項,將「Automatically allocated」的選項取消,在這邊為了就是要為虛擬電腦紙定一組連接埠(Port:



按下「完成(F)」,就完成了 VNC 的設定,這時在資訊頁面就可看到 VNC 遠端桌面連線已經可以接受任何 IP 的連線了:



找一台 Ubuntu Desktop 系統來測試,開啟遠端桌面檢視器(應用程式網際網路遠端桌面檢視器):



按下「連線」,就會開啟連線設定視窗,只要在「通訊協定(P)」選擇〝 VNC〞,並在「主機(H)」欄位內填入虛擬電腦的 IP 與連接埠之後,按下「連線(O)」,就可以連線到虛擬電腦的 Windows 作業系統之內了:

2011年5月14日 星期六

將 Amazon 雲搬回家的開源碼專案 - OpenStack

OpenStack 是由 美國太空總署 和 Rackspace (2005 年開始) 合作研發的雲端運算‎平台,以 Apache 授權方式釋出。OpenStack 主要是以 IaaS 服務模式運作,讓任何人都可以自行建立和提供雲端運算服務。

現時已表示支持 OpenStack 雲端技術的大型廠商包括:AMD, Intel 和 戴爾 等。微軟在 2010 年 10 月表示支持 OpenStack 與 Windows Server 2008 R2 的整合。Ubuntu 在 11.04 版本加入 OpenStack。

2011 年 2 月,思科公司正式加入 OpenStack 雲端技術,重點研製 OpenStack 的網絡服務。 2011 年 4 月,思科提議新的 Network as a Service(NaaS)服務模式。

OpenStack 是以 Python 程式語言編寫, 整合 Tornado 網頁伺服器、Nebula 運算平台.OpenStack 運作使用 Twisted 框架. 並遵循 Open Virtualization Format、AMQP、SQLAlchemy 等標準

虛擬平台支援包括:KVM、Xen、VirtualBox、VMware、Hyper-V

OpenStack 官方網址 : http://www.openstack.org/

2011年2月24日 星期四

KVM 與 Android x86 開源碼專案

Android-x86 開源碼專案是由國內開源碼前輩 黃志偉先生 所成立, 此專案的目地是將 Android 系統運作在許多 x86 平台(小筆電, 桌上電腦, 平板電腦), 甚至還可在 Linux KVM 及 VirtualBox 虛擬平台中執行. Android-x86 可使沒有 Android 手機的開發人員, 一樣可研究 Android 系統, 可真造福許多人

在 KVM 系統執行, 需作以下三項調整 :

1. 虛擬網卡需選擇 pcnet
2. 顯示系統需選擇 vmvga
3. 在 Android 系統中, 螢幕逾時需設為 30 分鐘, 否則會造成 QEMU 當機


阿偉的個人天地

2011年2月22日 星期二

認識 Libvirt

libvirt is:

  • A toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes).
  • Free software available under the GNU Lesser General Public License.
  • A long term stable C API
  • A set of bindings for common languages
  • A CIM provider for the DMTF virtualization schema
  • A QMF agent for the AMQP/QPid messaging system

libvirt supports:

libvirt provides:

  • Remote management using TLS encryption and x509 certificates
  • Remote management authenticating with Kerberos and SASL
  • Local access control using PolicyKit
  • Zero-conf discovery using Avahi multicast-DNS
  • Management of virtual machines, virtual networks and storage
  • Portable client API for Linux, Solaris and Windows