#author("2025-04-15T01:39:45+00:00","default:iseki","iseki")
** KVM [#v2d4e0f8]
#author("2025-04-15T01:39:56+00:00","default:iseki","iseki")
* KVM [#v2d4e0f8]
- http://www10.atwiki.jp/noel1008/pages/44.html#id_b2b002a6

** Rokcy Linux 8.5 (2022/2/17) [#d17bae5d]

*** br0 の作成 [#c0fde3c4]
 # nmcli con add type bridge con-name br0 ifname br0
 # nmcli con mod bridge.stp no
 # nmcli con mod br0 bridge.stp no
 # nmcli con mod br0 ipv4.method manual ipv4.address "202.26.150.50/24" ipv4.gateway "202.26.150.254" ipv4.dns "202.26.144.11"
 # nmcli con mod br0 autoconnect yes
 # nmcli con add type bridge-slave ifname ens10f0 master br0
 # nmcli con down ens10f0
 # vi /etc/sysconfig/network-scripts/ifcfg-ens10f0
     NBOOT=no

*** Install [#p7c59867]
 # export VM_NAME=rocky-8.5
 # virt-install \
 --name ${VM_NAME} \
 --hvm \
 --arch x86_64 \
 --os-type linux \
 --os-variant centos7.0 \
 --vcpus 2 \
 --ram 2048 \
 --disk path=/opt/vm/images/${VM_NAME}.img,format=qcow2,size=50 \
 --network bridge=br0 \
 --graphics vnc,keymap=ja \
 --noautoconsole \
 --location /opt/iso/Rocky-8.5-x86_64-boot.iso


** OLD [#u00f7f08]
*** Create [#lff9c573]
 # qemu-img create -f qcow2 /data/websystem-0.img 30G
 # qemu-kvm -hda /data/websystem-0.img -m 1024 -boot d -cdrom /root/CentOS-6.4-x86_64-bin-DVD1.iso -k ja -vnc :0

- -vnc :0 がリモートコントロール接続用ポート番号を示す. オフセットは 5900 (-vnc :1 なら 5901)


*** リモートコントロール用クライアント [#e0f0304e]
- Ultra Vnc: http://www.uvnc.com/
- Real Vnc: http://www.realvnc.com/products/vnc/ (Windows7で起動せず 2015/2/6)


*** ネットワーク [#ec3d818f]
- Guest OS(eth0) => Host OS(tap# → br0 → eth0) => external
- Host OS の tap インターフェイスは Guest OS 毎に必要

**** tap インターフェイスの起動と停止スクリプト (ホスト側) [#a889f964]
- /etc/qemu-ifup
 #!/bin/sh
 /sbin/ifconfig $1 0.0.0.0 promisc up
 /usr/sbin/brctl addif br0 $1
- /etc/qemu-ifdown
 /usr/sbin/brctl delif br0 $1
 /sbin/ifconfig $1 down
- $1 には tap# が入る


**** Macアドレスが変化しても,ネットワークインターフェイスを見失わない方法 (ゲスト側) [#bb7bbfac]
- 最近のディストリビューションは NICのMacアドレスが変化すると,別のインターフェイスを作って対応させる.その結果,インターフェイスを見失う
- 対策
-- /etc/udev/rules.d/70-persistent-net.rules を削除して,/dev/null にシンボリックリンクを張る.(起動時にワーニングがでる)
-- /etc/sysconfig/network-scripts/ifcfg-eth# の HWADDR を削除する.


*** 起動 [#f1023067]
**** 起動例 [#mb397d99]
 # /usr/libexec/qemu-kvm -hda /data/centos-base-1.img -m 1024 -k ja -vnc none -net nic,macaddr=52:54:00:12:34:00 -net tap,ifname=tap0,script=/etc/qemu-ifup
- macaddr は Guest OS のMACアドレスになる.%%設定し直すと /etc/udev/rules.d/70-persistent-net.rule​s で eth の名前が変わるので,合わせる必要がある.また /etc/sysconfig/network-scripts/ifcfg-eth# の HWADDR は削除した方が面倒くさくない.%% (上記参照)

- qemu-kvm オプション: http://opensuse-man-ja.berlios.de/opensuse-html/cha.qemu.running.html#cha.qemu.running.gen_opts

**** 起動用スクリプト (kvm-start) [#v9cf6a20]
- kvm-start xxxx.img 512
 #!/bin/sh
 #
 
 function get_interface_num()
 {
    TAPLST=`/sbin/ifconfig | grep '^tap[0-9]' | awk -F" " '{print $1}'`
    NUM=0
    while [ $NUM -lt 100 ]; do
        FLG=1
        for TAP in $TAPLST ; do
            if [ "tap$NUM" = "$TAP" ]; then
                FLG=0
                break
            fi
        done
        if [ $FLG = 1 ]; then
            echo $NUM
            return 0
        fi
        NUM=`expr $NUM + 1`
    done
    return 0
 } 
 
 
 if [ ! -f "$1" ]; then
    echo "Not found image file $1 !!"
    exit 1
 fi
 
 IFNUM=`get_interface_num`
 if [ "$IFNUM" = "" ]; then
    echo "Can not get Interface Number!!"
    exit 1
 fi
 
 HWADDR=`/usr/local/bin/macgen.py`
 if [ "$HWADDR" = "" ]; then
    MACNUM=`printf "%02d" $IFNUM`
    HWADDR="00:16:3e:00:00:$MACNUM"
 fi
 
 MEM=$2
 if [ "$MEM" = "" ]; then
    MEM=1024
 fi
 
 echo "macaddr   = $HWADDR"
 echo "interface = tap$IFNUM"
 echo "vnc num   = $IFNUM"
 echo "memory    = ${MEM}M"
 echo "start qemu-kvm"
 
 /usr/libexec/qemu-kvm -hda $1 -m $MEM -k ja -vnc :${IFNUM} -net nic,macaddr=$HWADDR -net tap,ifname=tap${IFNUM},script=/etc/qemu-ifup
**** MACアドレスの自動生成 by [[RedHat カスタマーポータル>https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/5/html/Virtualization/sect-Virtualization-Tips_and_tricks-Generating_a_new_unique_MAC_address.html]] [#wa7bbc0e]
- /usr/local/bin/macgen.py
 #!/usr/bin/python
 # macgen.py script to generate a MAC address for virtualized guests on Xen
 #
 import random
 #
 def randomMAC():
    mac = [ 0x00, 0x16, 0x3e,
        random.randint(0x00, 0x7f),
        random.randint(0x00, 0xff),
        random.randint(0x00, 0xff) ]
    return ':'.join(map(lambda x: "%02x" % x, mac))
 #
 print randomMAC()

*** Error [#tf8b1bfc]
**** cpu0 unhandled rdmsr [#vd317aa5]
- デバッグメッセージなので無視しても良いらしい.


***P2V by macsatou :-D [#s5b7d465]
物理マシンから仮想マシンへまるっと移行.
自宅サーバで実施した.

****手順1 [#d6412ca2]
適当なBootCD等で対象マシンを起動.
DDコマンドを使って全体を抽出.
以下例) 対象ディスクが/dev/sdaの場合
 # dd if=/dev/sda of=/tmp/output.img bs=10M
 (CNTL+Tで進捗状況を見れる)

****手順2 [#ra4f848b]
抽出したファイルをKVMの入った仮想化基盤へ何らかの方法で転送済とする.
 # qemu-img convert -f raw -O qcow2 output.img kvm_ver_output.qcow2
変換後のファイルは無駄に大きい可能性もあるため、最適化.
 # qemu-img convert -O qcow2 kvm_ver_output.qcow2 kvm_ver_output.qcow2.new

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS