做這個實驗,需要我們的cpu支持虛擬化,有的機器支持但是並未在bios開啓,這個需要事先開啓。
1. vmware安裝centos6.6 64位 (略)
其中有幾個注意的地方:
a. 內存給2g
b. 磁盤給50g, 或者再單獨分一個磁盤,用來存儲虛擬機文件
c. 最關鍵的一步,在創建虛擬機時,cpu是需要配置一下虛擬化的如圖
2. 安裝kvm前的準備工作
a. 清除iptables規則
service iptables stop; service iptables save
b. 關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
3. 開始安裝kvm
a. 檢查你的系統是否支持虛擬化
grep -Ei 'vmx|svm' /proc/cpuinfo
如果有輸出內容,則支持,其中intel cpu支持會有vmx,amd cpu支持會有svm
b. 通過yum安裝虛擬化的軟件包
yum install -y kvm virt-* 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 Link encap:Ethernet HWaddr 00:0C:29:55:A7:0A
inet addr:192.168.11.17 Bcast:192.168.11.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:141326 errors:0 dropped:0 overruns:0 frame:0
TX packets:90931 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:456024940 (434.8 MiB) TX bytes:10933593 (10.4 MiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:55:A7:0A
inet6 addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:341978 errors:0 dropped:0 overruns:0 frame:0
TX packets:90946 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468848861 (447.1 MiB) TX bytes:10934699 (10.4 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
virbr0 Link encap:Ethernet HWaddr 52:54:00:14:EF:D5
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes: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 bridge id STP enabled interfaces
br0 8000.000c2955a70a no eth0
virbr0 8000.52540014efd5 yes virbr0-nic
4. 創建虛擬機
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 -o preallocation=metadata /data/test02.img 7G; --disk path=/data/test02.img,format=qcow2,size=7,bus=virtio
--vcpus 指定分配cpu幾個
--os-type 指定系統類型爲linux
--os-variant 指定系統版本
--network 指定網絡類型
--graphics 指定安裝通過哪種類型,可以是vnc,也可以沒有圖形,在這裏我們沒有使用圖形直接使用文本方式
--console 指定控制檯類型
--location 指定安裝介質地址,可以是網絡地址,也可以是本地的一個絕對路徑,(--location '/mnt/', 其中/mnt/下就是我們掛載的光盤鏡像mount /dev/cdrom /mnt)如果是絕對路徑,那麼後面還需要指定一個安裝介質,比如NFS,假如虛擬機設置ip後,不能連外網,那麼就會提示讓我們選擇安裝途徑:
┌───┤ Installation Method ├───┐
│ │
│ What type of media contains │
│ the installation image? │
│ │
│ Local CD/DVD │
│ Hard drive │
│ NFS directory │
│ URL │
│ │
│ ┌────┐ ┌──────┐ │
│ │ OK │ │ Back │ │
│ └────┘ └──────┘ │
│ │
│ │
└─────────────────────┘
我在這裏選擇NFS,設置參數如下:
┌───────────────────────────┤ NFS Setup ├─────────
│ │
│ Please enter the server and NFSv3 path to your CentOS installation │
│ image and optionally additional NFS mount options. │
│ │
│ NFS server name: 172.7.15.3______________ │
│ CentOS directory: /mnt/images/install.img_ │
│ NFS mount options (optional): ro______________________ │
--extra-args 設定內核參數
當按下回車後,稍等幾秒鐘就可以看到安裝提示了。
開始安裝......
搜索文件 .treeinfo...... | 720 B 00:00 ...
搜索文件 vmlinuz...... | 7.7 MB 00:02 ...
搜索文件 initrd.img...... | 63 MB 00:23 ...
創建存儲文件 centos6.6_1.img | 30 GB 00:00
創建域...... | 0 B 00:00
連接到域 centos6.6_1
Escape character is ^]
然後就是我們非常熟悉的OK or Next 了 ,只不過這個過程是文本模式,如果想使用圖形,只能開啓vnc啦。
最後安裝完,reboot就進入剛剛創建的虛擬機了。要想退回到宿主機,ctrl ] 即可。
virsh list 可以列出當前的子機列表。
virsh console centos6.6_1 可以進入指定的子機
9. 調整cpu和內存查看子機配置:
virsh dominfo test02
virsh edit test02
修改:
<memory unit='KiB'>524288</memory>
<currentMemory unit='KiB'>524288</currentMemory>
<vcpu placement='static'>1</vcpu>
爲:
<memory unit='KiB'>624288</memory>
<currentMemory unit='KiB'>624288</currentMemory>
<vcpu placement='static'>2</vcpu>
重啓虛擬機:
virsh destroy test02
virsh start test02
11. 虛擬機遷移
該方式要確保虛擬機是關機狀態。
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子機
5. 克隆虛擬機
virt-clone --original centos6.6_1 --name template --file /data/clone1.img
如果子機centos6.6_1還未關機,則需要先關機,否則會報錯:
ERROR 必須暫停或者關閉有要克隆設備的域。
關閉子機的方法是:
virsh shutdown centos6.6_1
說明: 默認,我們沒有辦法在宿主機直接shutdown自己,我們需要藉助於子機上的acpid服務纔可以,這個服務說白了就是讓宿主機可以去調用子機的電源關閉的接口。所以,子機上需要安裝並啓動acpid服務。
先登錄子機:
virsh console centos6.6_1
登錄後,安裝acpid服務:
yum install -y acpid
啓動:
/etc/init.d/acpid start
按ctrl ] 退出來
此時再執行 virsh shutdown centos6.6_1 就可以啦。
克隆完後,virsh list all 就會發現clone1 這個子機,通過命令
virsh start clone1 可以開啓該子機。
6. virsh 常用操作 a. 開啓子機 virsh start centos6.6_1 也可以在開啓的同時連上控制檯 virsh start centos6.6_1 --console b. 關閉子機 virsh shutdown centos6.6_1 (這個需要藉助子機上的acpid服務) 另外一種方法是 virsh destroy centos6.6_1 c. 讓子機隨宿主機開機自動啓動 virsh autostart centos6.6_1 解除自動啓動 virsh autostart --disable centos6.6_1 d. 列出子機 virsh list //只能列出啓動的子機 virsh list --all //可以把所有子機都列出來 e. 刪除子機 virsh destroy clone1 virsh undefine clone1 rm -f /data/clone1.img f. 掛起子機 virsh suspend centos6.6_1 h. 恢復子機 virsh resume centos6.6_1 |
7. 快照管理
a. 創建快照
virsh snapshot-create centos6.6_1
會報錯:
unsupported configuration: internal snapshot for disk vda unsupported for storage type raw
這是因爲raw格式的鏡像不能做快照,所以需要先轉換一下格式
b. 磁盤鏡像轉換格式
先查看當前子機磁盤鏡像格式
qemu-img info /data/centos6.6_1.img
結果是:
image: /data/centos6.6_1.img
file format: raw
virtual size: 30G (32212254720 bytes)
disk size: 1.6G
把raw格式轉換爲qcow格式(其實是複製了一份):
qemu-img convert -f raw -O qcow2 /data/centos6.6_1.img /data/centos6.6_1.qcow2
qemu-img info /data/centos6.6_1.qcow2 //再次查看格式,結果如下
image: /data/centos6.6_1.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes)
disk size: 1.1G
cluster_size: 65536
現在我們還需要編輯子機配置文件,讓它使用新格式的虛擬磁盤鏡像文件
virsh edit centos6.6_1 //這樣就進入了該子機的配置文件(/etc/libvirt/qemu/centos6.6_1.xml),跟用vim編輯這個文件一樣的用法
需要修改的地方是:
<driver name='qemu' type='raw' cache='none'/>
<source file='/data/centos6.6_1.img'/>
改爲:
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/data/centos6.6_1.qcow2'/>
c. 繼續創建快照
virsh snapshot-create centos6.6_1 //這次成功了,提示如下
Domain snapshot 1437248443 created
列出快照:
virsh snapshot-list centos6.6_1
查看當前子機的快照版本:
virsh snapshot-current centos6.6_1
centos6.6_1子機的快照文件在 /var/lib/libvirt/qemu/snapshot/centos6.6_1/ 目錄下
d. 恢復快照
首先需要關閉子機
virsh destroy centos6.6_1
確認子機是否關閉
virsh domstate centos6.6_1
關閉
vish snapshot-list centos6.6_1 //結果是
名稱 Creation Time 狀態
------------------------------------------------------------
1437248443 2015-07-19 03:40:43 +0800 shutoff
1437248847 2015-07-19 03:47:27 +0800 running
virsh snapshot-revert centos6.6_1 1437248443
e. 刪除快照
virsh snapshot-delete centos6.6_1 1437248847
8. 磁盤擴容
a. 對於raw格式的虛擬磁盤擴容
qemu-img info /data/kvm/test03.img //本身只有9G
image: /data/kvm/test03.img
file format: raw
virtual size: 9.0G (9663676416 bytes)
disk size: 1.1G
複製代碼
qemu-img resize /data/kvm/test03.img +2G
qemu-img info /data/kvm/test03.img //現在增加了2G
image: /data/kvm/test03.img
file format: raw
virtual size: 11G (11811160064 bytes)
disk size: 1.1G
複製代碼
virsh destroy test03 //關閉test03虛擬機
virsh start test03 //開啓test03虛擬機
virsh console test03 //進入虛擬機
fdisk -l 查看已經磁盤分區已經增加
[root@localhost ~]# fdisk -l
Disk /dev/vda: 11.8 GB, 11811160064 bytes
16 heads, 63 sectors/track, 22885 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000099f3
Device Boot Start End Blocks Id System
/dev/vda1 * 3 1018 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2 1018 16645 7875584 8e Linux LVM
Partition 2 does not end on cylinder boundary.
Disk /dev/mapper/VolGroup-lv_root: 7205 MB, 7205814272 bytes
255 heads, 63 sectors/track, 876 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
Disk /dev/mapper/VolGroup-lv_swap: 855 MB, 855638016 bytes
255 heads, 63 sectors/track, 104 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
複製代碼
但是磁盤掛載的空間並沒有增加
[root@localhost ~]# 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
複製代碼
因爲新增加的空間還沒有劃分使用。所以要繼續分區:
[root@localhost ~]# fdisk /dev/vda
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/vda: 11.8 GB, 11811160064 bytes
16 heads, 63 sectors/track, 22885 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000099f3
Device Boot Start End Blocks Id System
/dev/vda1 * 3 1018 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2 1018 <font color="#ff0000">16645</font> 7875584 8e Linux LVM
Partition 2 does not end on cylinder boundary.
Command (m for help):<font color="#ff0000"> n</font>
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): <font color="#ff0000">3</font>
First cylinder (1-22885, default 1): <font color="#ff0000">16646</font>
Last cylinder, +cylinders or +size{K,M,G} (16646-22885, default 22885):
Using default value 22885
Command (m for help): p
Disk /dev/vda: 11.8 GB, 11811160064 bytes
16 heads, 63 sectors/track, 22885 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000099f3
Device Boot Start End Blocks Id System
/dev/vda1 * 3 1018 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2 1018 16645 7875584 8e Linux LVM
Partition 2 does not end on cylinder boundary.
<font color="#ff0000">/dev/vda3 16646 22885 3144960 83 Linux</font>
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
複製代碼
然後再把這個/dev/vda3 加入到lvm裏面去:
ls /dev/vda3 如果沒有這個分區,需要重啓一下。
[root@localhost ~]# pvcreate /dev/vda3
<span style="line-height: 1.5; background-color: rgb(247, 247, 247);">Physical volume "/dev/vda3" successfully created</span>
複製代碼
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 <font color="#ff0000"> VolGroup</font> lvm2 a-- 7.51g 0
/dev/vda3 lvm2 --- 3.00g 3.00g
複製代碼
[root@localhost ~]# vgextend VolGroup /dev/vda3
Volume group "VolGroup" successfully extended
複製代碼
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize <font color="#ff0000">VFree</font>
VolGroup 2 2 0 wz--n- 10.50g <font color="#ff0000">3.00g</font>
複製代碼
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 6.71g
lv_swap VolGroup -wi-ao---- 816.00m
複製代碼
[root@localhost ~]# lvextend -l +100%FREE /dev/VolGroup/lv_root
Size of logical volume VolGroup/lv_root changed from 6.71 GiB (1718 extents) to 9.71 GiB (2485 extents).
Logical volume lv_root successfully resized
複製代碼
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 618M 5.6G 10% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/vda1 477M 26M 427M 6% /boot
複製代碼
[root@localhost ~]# resize2fs /dev/VolGroup/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/VolGroup/lv_root to 2544640 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 2544640 blocks long.
複製代碼
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
<font color="#ff0000"> 9.5G </font>618M 8.4G 7% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/vda1 477M 26M 427M 6% /boot
複製代碼
另外,如果是增加磁盤,思路是:
創建磁盤: qemu-img create -f raw /data/kvm/test03_2.img 5G
關閉虛擬機: virsh destroy test03
編輯配置文件: virsh edit test03 增加如下:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/data/kvm/test03_2.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
複製代碼
開啓虛擬機:virsh start test03
進入虛擬機:virsh console test03
分區: fdisk /dev/vdb
格式化 (略)
掛載 (略)
當然也可以按照上面的思路把 /dev/vdb1 加入到 lvm裏面去
b. qcow2格式
步驟基本上和raw一樣。如果提示 This image format does not support resize, 檢查一下你qemu-img create的時候,是否有加 preallocation=metadata 選項,如果有,就不能resize了。
10. 不重啓虛擬機在線增加網卡 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 |