openstack項目【day24】:KVM部署
本節內容
- 虛擬化支持
- 軟件準備
- 檢查CPU虛擬化支持
- 安裝軟件包
- 激活並啟動libvirtd服務
- 網絡模式
- 配置橋接網絡
- 驗證網絡
- 嘗試連接Hypervisor
- 創建虛擬機
- 虛擬機操作
一、虛擬化支持
KVM虛擬化需要CPU的硬件輔助虛擬化的支持,用來加速,在本環境中為Intel的CPU,使用的Intel VT技術。(該功能在有些主機裏面可能需要去BIOS裏面開啟)
二、軟件準備
操作系統: CentOS 7.2
軟件包: CentOS自帶yum源
關閉防火墻
關閉SELinux:將 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改為 SELinux=disabled
開始安裝
三、 檢查CPU虛擬化支持
如果是用vmware workstation的虛擬機做kvm實驗的化,需要開啟嵌套虛擬化
1.在物理機BIOS設置裏開啟虛擬化功能
2.此時你的vm仍然不能開啟虛擬化,下列兩個
3.找到這臺虛擬機存在的目錄
4.打開該目錄找到.vmx結尾的文件,增加一行
apic.xapic.enabled = "FALSE"
5.關閉虛擬機,然後啟動,就可以勾選開啟虛擬化功能了
進入虛擬機後查看虛擬化支持:
# grep -E ‘svm|vmx‘ /proc/cpuinfo
vmx 為Intel的CPU指令集
svm 為AMD的CPU指令集
四、安裝軟件包
[[email protected]
[[email protected] 桌面]# lsmod |grep kvm
kvm_intel 138567 0
kvm 441119 1 kvm_intel
#以上輸出說明內核模塊加載成功,其中: kvm作為核心模塊,協同QEMU實現整個虛擬化環境的正常運行。 kvm_intel作為平臺(Intel)獨立模塊,激活KVM環境的CPU硬件虛擬化支持
kvm相關安裝包及其作用
qemu-kvm:主要的KVM程序包,該軟件包主要包含KVM內核模塊和基於KVM重構後的QEMU模擬器。KVM模塊作為整個虛擬化環境的核心工作在系統空間,負責CPU和內存的調度。QEMU作為模擬器工作在用戶空間,負責虛擬機I/O模擬。 qemu-img:主要用來QEMU磁盤鏡像的管理,如新建一塊磁盤鏡像給虛擬機。 libvirt:提供Hypervisor和虛擬機管理的API。 libvirt-client:KVM客戶端命令行管理工具virsh,負責虛擬機的啟動、停止和管理等。 libvirt-daemon:libvirtd守護進程,作為客戶端管理工具跟Hypervisor和虛擬機之間的橋梁。 libvirt-daemon-driver-xxx:從名字來看屬於libvirtd服務的驅動文件,作為libvirtd服務跟Hypervisor不同對象(如qemu模擬器,網絡,存儲等)間的接口。 libvirt-python:python的libvirt庫 python-virtinst:創建虛擬機所需要的命令行工具和程序庫 virt-install:創建和克隆虛擬機的命令行工具包。 virt-manager:圖形界面的KVM管理工具。 virt-top:虛擬機統計命令 virt-viewer:GUI連接程序,連接到已配置好的虛擬機 bridge-utils:網橋管理工具包,負責橋接網絡的創建、配置和管理等工作。
五、激活並啟動libvirtd服務
systemctl enable libvirtd systemctl start libvirtd
六、網絡模式
詳見http://blog.csdn.net/cooling88/article/details/52203998
NAT方式:
virbr0網橋相當於一個hub或交換機,eth0相當於路由器,virbr0-nic相當於交換機virbr0上的一個接口,這個接口連接一根網線到路由器eth0
Bridge的方式:
br0網橋相當於一個hub或交換機,eth0相當於相當於交換機br0上的一個接口,這個接口連接一根網線到物理網絡
嘗試著從下圖總找出上述所說
七、配置橋接網絡
默認情況下所有虛擬機只能夠在host內部互相通信,如果需要通過局域網訪問虛擬機,需要創建一個橋接網絡。
1.停止NetworkManager服務
# systemctl stop NetworkManager
該服務開啟的情況下直接去修改網卡的配置文件會造成信息的不匹配而導致網卡激活不了。
2.修改以太網卡配置文件
(修改前先備份)
# cd /etc/sysconfig/network-scripts # vi ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static ONBOOT=yes BRIDGE=br0 HWADDR=b8:ae:ed:7d:9d:11 NM_CONTROLLED=no
原有的以太網絡不需要配置IP地址,指定橋接的網卡設備(如br0)即可。
3.修改橋接網卡配置文件
# cd /etc/sysconfig/network-scripts # vi ifcfg-br0 TYPE=Bridge HWADDR=b8:ae:ed:7d:9d:11 BOOTPROTO=static DEVICE=br0 ONBOOT=yes IPADDR=192.168.2.10 NETMASK=255.255.255.0 GATEWAY=192.168.2.1 DNS1=202.103.24.68 NM_CONTROLLED=no
#橋接網卡的需要配置IP地址,當然也可以用DHCP。需要註意的是橋接網卡br0中DEVICE的名字一定要與以太網卡eno1中BRIDGE對應。
強調
1 #網卡配置文件中NM_CONTROLLED參數設置為no 2 3 #執行: 4 5 [[email protected] ~]# systemctl stop NetworkManager 6 [[email protected] ~]# systemctl disable NetworkManager
開啟主機IP地址轉發
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 # sysctl -p
重啟網絡服務
# systemctl restart network
ps:針對NAT網路須知
需要掌握iptables:
詳細規則參考:http://blog.csdn.net/yu_xiang/article/details/9218589
1 #源地址轉換:內部訪問外部 2 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66 3 iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE 4 5 #目標地址轉換:外部訪問內部 6 iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
八、 驗證網絡
# ip a eno1: mtu 1500 qdisc pfifo_fast master br0 state UP br0: mtu 1500 qdisc noqueue state UP inet 192.168.2.10/24 brd 192.168.2.255 scope global br0
截取了部分輸出,eno1和br0網卡都處於激活狀態,eno1橋接到br0,br0被分配了靜態IP地址。
九、嘗試連接Hypervisor
# virsh -c qemu:///system list # virsh list Id Name State ----------------------------------------
(由於沒有創建虛擬機,所以沒有條目顯示)
十、創建虛擬機
方法一:# virt-manager
針對這種方法,我們可以在服務端部署vncserver,然後用VNC Viewer來連接它的桌面,然後用圖形化去創建虛擬機
部署vncserver
#安裝X-Windows圖形界面 yum -y groupinstall "X Window System" yum -y install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts #設置默認啟動圖形界面 unlink /etc/systemd/system/default.target ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target reboot #安裝vnc服務 yum install tigervnc-server -y #配置vnc cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service vim /etc/systemd/system/vncserver@\:1.service #修改內容 #ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i" #PIDFile=/root/.vnc/%H%i.pid #重啟systemd systemctl daemon-reload #為root用戶設置密碼 vncpasswd systemctl enable vncserver@:1.service systemctl start vncserver@:1.service #添加防火墻規則,放行vncserver firewall-cmd --permanent --add-service vnc-server systemctl restart firewalld.service #客戶端連接 #打開vncviewer客戶端工具,然後訪問地址是:服務端ip:1
方法二:virt-install
1:粗糙版:執行完了,並不能立即安裝操作系統
#要有橋brctl add-br br0 #安裝選項可用virt-install --help查看,寫的非常清楚 virt-install --name guest1-centos7-64 --memory 1024 --arch x86_64 --vcpus 2 --os-variant=rhel7 --disk /var/lib/libvirt/images/guest1-centos7-64.img,device=disk,bus=virtio,size=20,sparse=true --network bridge=br0 --noautoconsole --location=/iso/CentOS-7.0-1406-x86_64-DVD.iso
註釋
virt-install \ #安裝選項可用virt-install --help查看 --name=guest1-centos7-64 \ #虛擬機名稱 --ram=1024 \ #內存大小以MB為單位 --arch=x86_64 \ #cpu架構 --vcpus=2 \ #虛擬機cpu的個數 --check-cpu \ #檢查確定vcpu是否超過物理cpu個數,超過則發出警告 --os-type=linux \ #要安裝的操作系統類型,例如linux,unix,windows --os-variant=centos7.2 \ #要安裝的操作系統版本 --disk path=/var/lib/libvirt/images/guest1-centos7-64.img,device=disk,bus=virtio,size=20,sparse=true \ #虛擬機所用的磁盤文件或鏡像文件,size以G為單位 #--diskpath=/data/new.img,format=qcow2,size=10,bus=virtio \ #後面會講到制作qcow2格式的鏡像 #--nonsparse --network bridge=br0 \ #指定網絡,采用網橋 --noautoconsole \ #不自動開啟控制臺 --location=http://example1.com/installation_tree/RHEL5.6-Serverx86_64/os \ #指定安裝操作系統給的鏡像位置 #--pxe \ #也可以是無人值守安裝 #--graphics #指定安裝通過哪種類型,可以是vnc,也可以沒有圖形,在這裏我們沒有使用圖形直接使用文本方式
2:改進版:在命令行直接文本的方式裝系統
必須先做如下操作:
#針對Centos7+kvm為了執行console功能,即在控制臺以文本的方式控制vm #在虛機裏運行 [[email protected] ~]# grubby --update-kernel=ALL --args="console=ttyS0" [[email protected] ~]# reboot
然後才可以在命令行安裝操作系統
virt-install --name test1 --memory 1024 --arch x86_64 --vcpus 2 --os-type linux --os-variant=rhel7 --disk /data/kvm/test02.qcow2,format=qcow2,size=10,bus=virtio --network bridge=virbr0 --location=/iso/CentOS-7.0-1406-x86_64-DVD.iso --graphics none --console pty,target_type=serial --extra-args ‘console=ttyS0,115200n8 serial‘
方法三 使用 qemu-img 和 qemu-kvm 命令行方式安裝
(1)創建一個空的qcow2格式的鏡像文件
qemu-img create -f qcow2 windows-master.qcow2 10G
(2)啟動一個虛機,將系統安裝盤掛到 cdrom,安裝操作系統
qemu-kvm -hda windows-master.qcow2 -m 512 -boot d -cdrom /home/user/isos/en_winxp_pro_with_sp2.iso
(3)現在你就擁有了一個帶操作系統的鏡像文件。你可以以它為模板創建新的鏡像文件。使用模板的好處是,它會被設置為只讀所以可以免於破壞。
qemu-img create -b windows-master.qcow2 -f qcow2 windows-clone.qcow2
(4)你可以在新的鏡像文件上啟動虛機了
qemu-kvm -hda windows-clone.qcow2 -m 400
十一、虛擬機操作
開關虛擬機
virsh start guest1-centos7-64 #開機 virsh shutdown guest1-centos7-64 #關機 virsh destroy guest1-centos7-64 #強制關閉電源 virsh list --all #查看虛擬機狀態
遠程管理虛擬機(qemu+ssh連接)
#在被管理的機器上 yum -y install virt-viewer export DISPLAY=被管理機IP:0.0 virt-virt-viewer -c qemu///system guest1-centos7-64 #本地管理虛擬機,獲取system權限,註意qemu後是三個/ #在管理機上 virt-viewer -c qemu+ssh:[email protected]/system guest1-centos7-64 #遠程linux通過virt-viewer+ssh管理虛擬機guest1-centos7-64
制作鏡像文件
參考 http://www.361way.com/kvm-qcow2-preallocation-metadata/3354.html 示例:qemu-img create -f qcow2 -opreallocation=metadata /data/test02.img 10G;
raw格式與qcow2格式的對比:
raw的優勢如下:
- 簡單,是轉為其他虛擬機格式的通用中間格式,並能夠到處到其他引進模擬器中去
- 在支持稀疏文件的系統上,根據實際使用量來占用空間,而非原先設定的最大值(比如設定最高20GB,而實際只使用3GB)
- 以後能夠改變空間的最大值(把最高值20GB提高到200GB,qcow2也可以,不過要轉換為raw)
- 能夠直接被宿主機掛載,不用開虛擬機即可在宿主機和vm之間進行數據傳輸(此時不能開機)
- 直接讀寫虛擬機硬盤裏的文件
qocw2性能更好:
- 即使在不支持稀疏的文件系統上,也可以獲得最小的空間
- 可以動態擴大,支持寫時復制
- AES加密
- zlib壓縮
- 支持多重虛擬機快照
- 然而raw的很多優勢,必須是在關機是才可以用,如直接掛載。而在生成環境不可能讓你這麽做。
- raw格式不能做快照,後面有說明,需要轉換為qcow2格式,如果要使用qcow2格式的虛擬磁盤,需要事先創建qcow2格式的虛擬磁盤。
1. 開始安裝kvm a. 檢查你的系統是否支持虛擬化 grep -Ei ‘vmx|svm‘ /proc/cpuinfo 如果有輸出內容,則支持,其中intelcpu支持會有vmx,amd cpu支持會有svm b. 通過yum安裝虛擬化的軟件包 yum install -y kvmvirt-* libvirt bridge-utils qemu-img 說明: kvm:軟件包中含有KVM內核模塊,它在默認linux內核中提供kvm管理程序 libvirts:安裝虛擬機管理工具,使用virsh等命令來管理和控制虛擬機。 bridge-utils:設置網絡網卡橋接。 virt-*:創建、克隆虛擬機命令,以及圖形化管理工具virt-manager qemu-img:安裝qemu組件,使用qemu命令來創建磁盤等。 c. 檢查kvm模塊是否加載 lsmod |grep kvm 正常應該是: kvm_intel 55496 3 kvm 337772 1 kvm_intel 如果沒有,需要執行 modprobe kvm-intel 還沒有就重啟一下試試 d. 配置網卡 cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-br0 分別編輯eth0和br0 ifcfg-eth0改成如下: DEVICE=eth0 HWADDR=00:0C:29:55:A7:0A TYPE=Ethernet UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none BRIDGE=br0 ifcfg-br0改成如下: DEVICE=br0 #HWADDR=00:0C:29:55:A7:0A TYPE=Bridge #UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.11.17 NETMASK=255.255.255.0 GATEWAY=192.168.11.1 DNS1=202.106.0.20 說明:我的虛擬機是橋接模式,所以設置br0的ip和我的真機同樣的網段,包括網關也是我路由器的ip,大家可以根據自己的環境去配置,目的是為了讓虛擬機可以上網。 /etc/init.d/network restart 查看網卡如下: br0 Linkencap:Ethernet HWaddr 00:0C:29:55:A7:0A inetaddr:192.168.11.17 Bcast:192.168.11.255 Mask:255.255.255.0 inet6addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link UPBROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RXpackets:141326 errors:0 dropped:0 overruns:0 frame:0 TXpackets:90931 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RXbytes:456024940 (434.8 MiB) TX bytes:10933593 (10.4 MiB) eth0 Linkencap:Ethernet HWaddr 00:0C:29:55:A7:0A inet6addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link UPBROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RXpackets:341978 errors:0 dropped:0 overruns:0 frame:0 TXpackets:90946 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RXbytes:468848861 (447.1 MiB) TX bytes:10934699 (10.4 MiB) lo Linkencap:Local Loopback inetaddr:127.0.0.1 Mask:255.0.0.0 inet6addr: ::1/128 Scope:Host UPLOOPBACK RUNNING MTU:65536 Metric:1 RXpackets:0 errors:0 dropped:0 overruns:0 frame:0 TXpackets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RXbytes:0 (0.0 b) TX bytes:0 (0.0 b) virbr0 Linkencap:Ethernet HWaddr 52:54:00:14:EF:D5 inetaddr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UPBROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RXpackets:0 errors:0 dropped:0 overruns:0 frame:0 TXpackets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RXbytes:0 (0.0 b) TX bytes:0 (0.0 b) e. 啟動或重啟libvirtd服務和messagebus 服務 /etc/init.d/libvirtd start /etc/init.d/messagebus restart 此時可以查看網絡接口列表 brctl show 結果如下: bridge name bridgeid STPenabled interfaces br0 8000.000c2955a70a no eth0 virbr0 8000.52540014efd5 yes virbr0-nic 2. 創建虛擬機 mkdir /data/ //創建一個存儲虛擬機虛擬磁盤的目錄,該目錄所在分區必須足夠大 virt-install --name aming1 --ram 512 --disk path=/data/aming1.img,size=30 --vcpus 1 --os-type linux --os-variant rhel6 --network bridge=br0 --graphics none --console pty,target_type=serial --location‘http://mirrors.163.com/centos/6.7/os/i386/‘ --extra-args ‘console=ttyS0,115200n8 serial‘ 說明: --name 指定虛擬機的名字 --ram 指定內存分配多少 --disk path 指定虛擬磁盤放到哪裏,size=30 指定磁盤大小為30G,這樣磁盤文件格式為raw,raw格式不能做快照,後面有說明,需要轉換為qcow2格式,如果要使用qcow2格式的虛擬磁盤,需要事先創建qcow2格式的虛擬磁盤。參考 http://www.361way.com/kvm-qcow2-preallocation-metadata/3354.html 示例:qemu-img create -f qcow2 -opreallocation=metadata /data/test02.img 10G; --diskpath=/data/test02.img,format=qcow2,size=10,bus=virtio --vcpus 指定分配cpu幾個 --os-type 指定系統類型為linux --os-variant 指定系統版本 --network 指定網絡類型 --graphics 指定安裝通過哪種類型,可以是vnc,也可以沒有圖形,在這裏我們沒有使用圖形直接使用文本方式 --console 指定控制臺類型 --location 指定安裝介質地址,可以是網絡地址,也可以是本地的一個絕對路徑,(--location ‘/mnt/‘, 其中/mnt/下就是我們掛載的光盤鏡像mount /dev/cdrom /mnt)如果是絕對路徑, 已有本地鏡像可以 virt-install --name test02 --ram 512 --diskpath=/data/kvm/test02.qcow2,format=qcow2,size=10,bus=virtio --vcpus 1 --os-type linux --os-variant rhel7 --network bridge=br0 --graphics none --console pty,target_type=serial --location ‘/data/CentOS.iso‘ --extra-args‘console=ttyS0,115200n8 serial‘ 會出現文本方式的安裝界面,選擇時區,安裝包的選擇(默認 Minial install)、root密碼設置,創建新用戶,以及網絡配置。在此沒看見有,註意設置一下DNS。 最後安裝完,reboot就進入剛剛創建的虛擬機了。要想退回到宿主機,ctrl ] 即可。 virsh list 可以列出當前的子機列表。 virsh start test01 啟動test01 virsh console test01 可以進入指定的子機 3. 克隆虛擬機 virt-clone --original test01 --name template--file /data/clone1.img 如果子機test01還未關機,則需要先關機,否則會報錯: ERROR 必須暫停或者關閉有要克隆設備的域。 關閉子機的方法是: virsh shutdown test01 說明:默認,我們沒有辦法在宿主機直接shutdown自己,我們需要借助於子機上的acpid服務才可以,這個服務說白了就是讓宿主機可以去調用子機的電源關閉的接口。所以,子機上需要安裝並啟動acpid服務。 先登錄子機: virsh console test01 登錄後,安裝acpid服務: yum install -y acpid 啟動: /etc/init.d/acpid start 按ctrl ] 退出來 此時再執行 virsh shutdowntest01 就可以啦。 克隆完後,virsh list all 就會發現clone1 這個子機,通過命令 virsh start clone1 可以開啟該子機。 4. virsh 常用操作 a. 開啟子機 virsh start test01 也可以在開啟的同時連上控制臺 virsh start test01 --console b. 關閉子機 virsh shutdown test01 (這個需要借助子機上的acpid服務) 另外一種方法是 virsh destroy test01 c. 讓子機隨宿主機開機自動啟動 virsh autostart test01 解除自動啟動 virsh autostart --disable test01 d. 列出子機 virsh list //只能列出啟動的子機 virsh list --all //可以把所有子機都列出來 e. 刪除子機 virsh destroy clone1 virsh undefine clone1 rm -f /data/clone1.img f. 掛起子機 virsh suspend test01 h. 恢復子機 virsh resume test01 5. 快照管理 a. 創建快照 virsh snapshot-create test01 會報錯: unsupported configuration: internal snapshot fordisk vda unsupported for storage type raw 這是因為raw格式的鏡像不能做快照,所以需要先轉換一下格式 b. 磁盤鏡像轉換格式 先查看當前子機磁盤鏡像格式 qemu-img info /data/test01.img 結果是: image: /data/test01.img file format: raw virtual size: 30G (32212254720 bytes) disk size: 1.6G 把raw格式轉換為qcow格式(其實是復制了一份): qemu-img convert -f raw -O qcow2 /data/test01.img/data/test01.qcow2 qemu-img info /data/test01.qcow2 //再次查看格式,結果如下 image: /data/test01.qcow2 file format: qcow2 virtual size: 30G (32212254720 bytes) disk size: 1.1G cluster_size: 65536 現在我們還需要編輯子機配置文件,讓它使用新格式的虛擬磁盤鏡像文件 virsh edit test01 //這樣就進入了該子機的配置文件(/etc/libvirt/qemu/test01.xml),跟用vim編輯這個文件一樣的用法 需要修改的地方是: <driver name=‘qemu‘type=‘raw‘ cache=‘none‘/> <sourcefile=‘/data/test01.img‘/> 改為: <driver name=‘qemu‘type=‘qcow2‘ cache=‘none‘/> <sourcefile=‘/data/test01.qcow2‘/> c. 繼續創建快照 virsh snapshot-create test01 //這次成功了,提示如下 Domain snapshot 1437248443 created 列出快照: virsh snapshot-list test01 查看當前子機的快照版本: virsh snapshot-current test01 test01子機的快照文件在 /var/lib/libvirt/qemu/snapshot/test01/ 目錄下 d. 恢復快照 首先需要關閉子機 virsh destroy test01 確認子機是否關閉 virsh domstate test01 關閉 vish snapshot-list test01 //結果是 名稱 Creation Time 狀態 ------------------------------------------------------------ 1437248443 2015-07-19 03:40:43 +0800 shutoff 1437248847 2015-07-19 03:47:27 +0800 running virsh snapshot-revert test01 1437248443 e. 刪除快照 virsh snapshot-delete test01 1437248847 6. 磁盤擴容 a. 對於raw格式的虛擬磁盤擴容 qemu-img info /data/kvm/test03.img //本身只有9G 1. image: /data/kvm/test03.img 2. file format: raw 3. virtual size: 9.0G (9663676416 bytes) 4. disk size: 1.1G qemu-img resize /data/kvm/test03.img +2G qemu-img info /data/kvm/test03.img //現在增加了2G 1. image: /data/kvm/test03.img 2. file format: raw 3. virtual size: 11G (11811160064 bytes) 4. disk size: 1.1G 5. virsh destroy test03 //關閉test03虛擬機 virsh start test03 //開啟test03虛擬機 virsh console test03 //進入虛擬機 fdisk -l 查看已經磁盤分區已經增加 [[email protected] ~]# fdisk -l 但是磁盤掛載的空間並沒有增加 [[email protected] ~]# df -h Filesystem Size Used Avail Use%Mounted on /dev/mapper/VolGroup-lv_root 6.5G 579M 5.6G 10% / tmpfs 250M 0 250M 0%/dev/shm /dev/vda1 477M 26M 427M 6% /boot 因為新增加的空間還沒有劃分使用。所以要繼續分區: [[email protected] ~]# fdisk /dev/vda 1. WARNING: DOS-compatible mode is deprecated.It‘s strongly recommended to 2. switch off the mode (command ‘c‘) and change display units to 3. sectors (command ‘u‘). 4. 5. Command (m for help): p 6. 7. Disk /dev/vda: 11.8 GB, 11811160064 bytes 8. 16 heads, 63 sectors/track, 22885 cylinders 9. Units = cylinders of 1008 * 512 = 516096bytes 10.Sector size(logical/physical): 512 bytes / 512 bytes 11.I/O size(minimum/optimal): 512 bytes / 512 bytes 12.Diskidentifier: 0x000099f3 13. 14. Device Boot Start End Blocks Id System 15./dev/vda1 * 3 1018 512000 83 Linux 16.Partition 1does not end on cylinder boundary. 17./dev/vda2 1018 <font color="#ff0000">16645</font> 7875584 8e Linux LVM 18.Partition 2does not end on cylinder boundary. 19. 20.Command (mfor help):<font color="#ff0000"> n</font> 21.Commandaction 22. e extended 23. p primary partition (1-4) 24.p 25.Partitionnumber (1-4): <font color="#ff0000">3</font> 26.Firstcylinder (1-22885, default 1): <fontcolor="#ff0000">16646</font> 27.Lastcylinder, +cylinders or +size{K,M,G} (16646-22885, default 22885): 28.Usingdefault value 22885 29. 30.Command (mfor help): p 31. 32.Disk/dev/vda: 11.8 GB, 11811160064 bytes 33.16 heads, 63sectors/track, 22885 cylinders 34.Units =cylinders of 1008 * 512 = 516096 bytes 35.Sector size(logical/physical): 512 bytes / 512 bytes 36.I/O size(minimum/optimal): 512 bytes / 512 bytes 37.Diskidentifier: 0x000099f3 38. 39. Device Boot Start End Blocks Id System 40./dev/vda1 * 3 1018 512000 83 Linux 41.Partition 1does not end on cylinder boundary. 42./dev/vda2 1018 16645 7875584 8e Linux LVM 43.Partition 2does not end on cylinder boundary. 44.<fontcolor="#ff0000">/dev/vda3 16646 22885 3144960 83 Linux</font> 45. 46.Command (mfor help): w 47.Thepartition table has been altered! 48. 49.Callingioctl() to re-read partition table. 50. 51.WARNING:Re-reading the partition table failed with error 16: Device or resource busy. 52.The kernelstill uses the old table. The new table will be used at 53.the nextreboot or after you run partprobe(8) or kpartx(8) 54.Syncingdisks. 然後再把這個/dev/vda3 加入到lvm裏面去: ls /dev/vda3 如果沒有這個分區,需要重啟一下。 [[email protected] ~]# pvcreate/dev/vda3 1. <spanstyle="line-height: 1.5; ">Physical volume "/dev/vda3" successfullycreated</span> [[email protected] ~]# pvs 1. PV VG Fmt Attr PSize PFree 2. /dev/vda2 <fontcolor="#ff0000"> VolGroup</font> lvm2a-- 7.51g 0 3. /dev/vda3 lvm2 --- 3.00g 3.00g [[email protected] ~]# vgextendVolGroup /dev/vda3 1. Volume group "VolGroup"successfully extended [[email protected] ~]# vgs 1. VG #PV #LV #SNAttr VSize <fontcolor="#ff0000">VFree</font> 2. VolGroup 2 2 0 wz--n- 10.50g <fontcolor="#ff0000">3.00g</font> [[email protected] ~]# lvs 1. LV VG Attr LSize PoolOrigin Data% Meta% Move Log Cpy%Sync Convert 2. lv_root VolGroup-wi-ao---- 6.71g 3. lv_swap VolGroup -wi-ao----816.00m [[email protected] ~]# lvextend -l +100%FREE /dev/VolGroup/lv_root 1. Size of logical volume VolGroup/lv_rootchanged from 6.71 GiB (1718 extents) to 9.71 GiB (2485 extents). 2. Logical volume lv_rootsuccessfully resized [[email protected] ~]# df -h 1. Filesystem Size Used Avail Use% Mounted on 2. /dev/mapper/VolGroup-lv_root 3. 6.5G 618M 5.6G 10% / 4. tmpfs 250M 0 250M 0% /dev/shm 5. /dev/vda1 477M 26M 427M 6% /boot [[email protected] ~]# resize2fs /dev/VolGroup/lv_root 1. resize2fs 1.41.12 (17-May-2010) 2. Filesystem at /dev/VolGroup/lv_root ismounted on /; on-line resizing required 3. old desc_blocks = 1, new_desc_blocks = 1 4. Performing an on-line resize of/dev/VolGroup/lv_root to 2544640 (4k) blocks. 5. The filesystem on /dev/VolGroup/lv_root isnow 2544640 blocks long. [[email protected] ~]# df -h 1. Filesystem Size Used Avail Use% Mounted on 2. /dev/mapper/VolGroup-lv_root 3. <fontcolor="#ff0000">9.5G </font>618M 8.4G 7% / 4. tmpfs 250M 0 250M 0% /dev/shm 5. /dev/vda1 477M 26M 427M 6% /boot 另外,如果是增加磁盤,思路是: 創建磁盤: qemu-img create -fraw /data/kvm/test03_2.img 5G 關閉虛擬機: virsh destroy test03 編輯配置文件: virsh edittest03 增加如下: 1. <disk type=‘file‘device=‘disk‘> 2. <driver name=‘qemu‘type=‘raw‘ cache=‘none‘/> 3. <source file=‘/data/kvm/test03_2.img‘/> 4. <target dev=‘vdb‘bus=‘virtio‘/> 5. </disk> 開啟虛擬機:virsh start test03 進入虛擬機:virsh console test03 分區: fdisk /dev/vdb 格式化(略) 掛載(略) 當然也可以按照上面的思路把 /dev/vdb1 加入到 lvm裏面去 b. qcow2格式 步驟基本上和raw一樣。如果提示 This image format doesnot support resize, 檢查一下你qemu-img create的時候,是否有加 preallocation=metadata 選項,如果有,就不能resize了。 7. 調整cpu和內存查看子機配置: virsh dominfo test02 virsh edit test02 修改: <memoryunit=‘KiB‘>524288</memory> <currentMemoryunit=‘KiB‘>524288</currentMemory> <vcpuplacement=‘static‘>1</vcpu> 為: <memoryunit=‘KiB‘>624288</memory> <currentMemoryunit=‘KiB‘>624288</currentMemory> <vcpuplacement=‘static‘>2</vcpu> 重啟虛擬機: virsh destroy test02 virsh start test02 8. 不重啟虛擬機在線增加網卡 virsh domiflist test02 查看test02子機的網卡列表 virsh attach-interface test02 --type bridge--source br0 //命令行增加一塊網卡 virsh dumpxml test02 >/etc/libvirsh/qemu/test02.xml //命令行增加的網卡只保存在內存中,重啟就失效,所以需要保存到配置文件中,其中/etc/libvirsh/qemu/test02.xml 為test02子機的配置文件 virsh console test02 //進入虛擬機後,執行 ifconfig -a 發現多了一個網卡 eth1 9. 虛擬機遷移 該方式要確保虛擬機是關機狀態。 virsh shutdown test02 virsh dumpxml test02 >/etc/libvirt/qemu/test03.xml // 如果是遠程機器,需要把該配置文件拷貝到遠程機器上 virsh domblklist test02 //查看test02子機的磁盤所在目錄 Target Source ------------------------------------------------ vda /data/add1.qcow2 rsync -av /data/add1.qcow2/data/test03.qcow2 //如果是遷移到遠程,則需要把該磁盤文件拷貝到遠程機器上 vi /etc/libvirt/qemu/test03.xm //因為是遷移到本機,配置文件用的是test02子機的配置,不改會有沖突,所以需要修改該文件,如果是遠程機器不用修改 修改domname: <name>test03</name> 修改uuid(隨便更改一下數字,位數不要變) <uuid>77bb10bd-3ad8-8899-958d-756063002969</uuid> 修改磁盤路徑: <disk type=‘file‘device=‘disk‘> <driver name=‘qemu‘type=‘raw‘ cache=‘none‘/> <source file=‘/data/test03.qcow2‘/> <target dev=‘vda‘bus=‘virtio‘/> <address type=‘pci‘domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x05‘ function=‘0x0‘/> </disk> virsh list --all //會發現新遷移的test03子機
openstack項目【day24】:KVM部署