MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - KVMのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - KVM
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == ここでは、KVM(Kernel-based Virtual Machine)とQEMUのインストールと仮想マシンの設定方法を記載する。<br> 搭載しているCPUが仮想化機構(Intel VTやAMD-V等)を備えている必要がある。<br> <br><br> == KVMとQEMUのインストール == KVMとQEMUをインストールする。<br> # CentOS sudo yum install qemu-kvm libvirt virt-install virt-manager # SUSE sudo zypper install qemu-kvm libvirt virt-install virt-manager <br> モジュールが読み込まれているか確認する。<br> lsmod | grep kvm <br> 正常に読み込まれている場合は、以下のように表示される。<br> kvm_intel 241664 0 kvm 704512 1 kvm_intel irqbypass 16384 1 kvm <br> KVMを起動および自動起動する場合は、以下のコマンドを実行する。<br> sudo systemctl start libvirtd sudo systemctl enable libvirtd <br><br> == 仮想ネットワークの設定 == ===== CentOS ===== 仮想マシンがブリッジ接続できるように、ブリッジネットワークを構成する。<br> ens2のインターフェース名の部分は環境によって異なるため、自身の環境に読み替えること。<br> ブリッジbr0を追加する。 nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 Connection 'br0' (a7fa989a-798e-40ac-acc4-3d1733189b82) successfully added. <br> br0のIPアドレスを設定する。<br> nmcli connection modify br0 ipv4.addresses 10.0.0.30/24 ipv4.method manual <br> br0のゲートウェイを設定する。<br> nmcli connection modify br0 ipv4.gateway 10.0.0.1 <br> br0のDNSを設定する。<br> nmcli connection modify br0 ipv4.dns 10.0.0.1 <br> 既存のインターフェースは一旦削除する。<br> nmcli connection del ens2 <br> br0のメンバーとして再度追加する。<br> nmcli connection add type bridge-slave autoconnect yes con-name ens2 ifname ens2 master br0 <br> CentOSを再起動する。<br> reboot <br> 正常にbr0が起動しているか確認する。<br> ip a <br> ===== SUSE ===== 仮想マシンをブリッジ接続する場合は、NetworkManagerをwickedに変更して、ブリッジネットワークを構成する。<br> sudo mv /etc/sysconfig/network/ifcfg-eth0 /etc/sysconfig/network/ifcfg-br0 sudo vi /etc/sysconfig/network/ifcfg-br0 <br> 以下の内容を、/etc/sysconfig/network/ifcfg-br0ファイルに追記する。<br> # 最終行に追記 BRIDGE='yes' BRIDGE_FORWARDDELAY='0' BRIDGE_PORTS='eth0' BRIDGE_STP='off' <br> 次に、以下の内容を、/etc/sysconfig/network/routesファイルに追記する。<br> sudo vi /etc/sysconfig/network/routes <br> # 最終行:br0のデフォルトゲートウェイを追記する default 192.168.1.1 - br0 <br> wickedサービスを再起動する。<br> sudo systemctl restart wickedd wicked <br> 正常にbr0が起動しているか確認する。<br> ip a <br><br> == 仮想マシンの作成(CLI) == 仮想マシンをインストールして作成する。<br> ここでは、仮想マシンとしてSUSE Linxu Enterprise Server 15(以降、SUSEという)をインストールする。<br> <br> 取得したSUSEのisoファイルを/tmpディレクトリに配置して、テキストモードでインストールする。<br> コンソールからでもPutty等のエミュレータ経由からでも実行できる。<br> 初期設定では、仮想マシンの保管場所(ストレージプール)は、/var/lib/libvirt/imagesディレクトリであるが、ここでは、別の場所に新たにストレージプールを作成して進める。<br> <br> ===== ストレージプールディレクトリの作成 ===== まず、ストレージプールディレクトリを作成する。<br> sudo mkdir -p /var/kvm/images <br> ===== 仮想マシンの作成とインストール ===== sudo virt-install \ --name sle15 \ --ram 4096 \ --disk path=/var/kvm/images/sle15.img,size=30 \ --vcpus 2 \ --os-type linux \ --os-variant sle15 \ --network bridge=br0 \ --graphics none \ --console pty,target_type=serial \ --location /tmp/SLE-15-Installer-DVD-x86_64-GM-DVD1.iso \ --extra-args 'console=ttyS0,115200n8 serial' Starting install... # インストールが開始される <br> 上記の例で指定しているオプションの意味を以下に示す。その他多数のオプションは、<code>man virt-install</code>で確認できる。<br> * --name *: 仮想マシンの名前を指定する。 * --ram *: 仮想マシンのメモリ容量を指定する。(単位は、M) * --disk path=xxx ,size=xxx *: [path=]で仮想マシンのディスクの保管場所を指定する。(初期設定では、/var/lib/libvirt/imagesディレクトリ) *: [size=]で仮想マシンのディスク容量を指定する。(単位は、G) * --vcpus *: 仮想マシンの仮想CPU数を指定する。 * --os-type *: 仮想マシンのOタイプを指定する。 * --os-variant *: 仮想マシンの種類を指定する。 *: <code>osinfo-query os</code>で指定可能な種類を確認できる。 * --network *: 仮想マシンのネットワークタイプを指定する。<br>ここでは、仮想マシンにブリッジ接続させるため、<code>--network bridge=br0</code>としている。<br>br0は、上記セクションの[仮想ネットワークの設定]で設定したブリッジインターフェースを指定している。<br>ホストがNICを複数持っていて、かつ、ブリッジインターフェースを複数設定しており、仮想マシンからも同様に複数のネットワークインターフェースを使用する場合は、改行して複数指定する。 * --graphics *: グラフィクスを指定する。<br><code>none</code>を指定するとグラフィックスを使用しない。 * --console *: コンソールタイプを指定する。 * --location *: インストール元を指定する。 * --extra-args *: インストール時にカーネルに渡すパラメータを指定する。 <br> インストーラ起動後は、CLIでインストール作業を進める。CLIもGUIと同様なのでインストール過程は省略する。<br> インストールが完了すると、一旦再起動がかかり、以下のようにターミナル上に仮想マシンのログインプロンプトが表示される。<br> Welcome to SUSE Linux Enterprise Server 15 (x86_64) - Kernel 4.12.14-25.25-default (ttyS0). eth0: 10.0.0.204 fe80::5054:ff:feff:cfce linux-6am4 login: <br> ===== ホストと仮想マシンの切り替え ===== 仮想マシン側からホスト側へのコンソールの切り替えは、[Ctrl]キー + []]キーである。<br> また、ホスト側から仮想マシン側へのコンソールの切り替えは、<code>virsh console <仮想マシン名>]</code>と入力して実行する。<br> <br> ===== 仮想マシンの複製 ===== 作成した仮想マシンは容易に複製できる。<br> sudo virt-clone --original sle15 --name template --file /var/kvm/images/template.img Allocating 'template.img' | 30 GB 00:00:02 Clone 'template' created successfully. <br> # ディスクイメージ ll /var/kvm/images/template.img -rw------- 1 root root 2835087360 Jan 18 19:09 /var/kvm/images/template.img <br> # 定義ファイル ll /etc/libvirt/qemu/template.xml -rw------- 1 root root 3681 Jan 18 11:09 /etc/libvirt/qemu/template.xml <br><br> == 仮想マシンの作成(GUI) == ここでは、GUIの操作で、仮想マシンを作成およびインストールする。<br> <br> # ターミナルにて<code>sudo virt-manager</code>コマンドを実行して、Virtual Machine Managerを起動する。<br>左上のPCアイコンまたは[ファイル] - [新しい仮想マシンの作成]を選択して、新規仮想マシン作成ウィザードを開く。 # [新しい仮想マシン]画面が開くので、仮想マシンのインストール元を指定する。<br>インストールメディアまたはISOファイルとアーキテクチャを選択して、OSのタイプとバージョンを指定する。 # 仮想マシンのメモリ容量と仮想CPU数を指定する。 # 仮想ディスクの場所や容量を指定する。 # 仮想マシン名を入力する。また、これまでの設定内容を確認しておく。 # インストーラが起動するので、画面に従ってインストールする。 <br><br> == KVMの操作方法 == Libvirtに含まれるVirshコマンドを使用した仮想マシンの操作方法を記載する。<br> <br> * 仮想マシンを起動する。 sudo virsh start <仮想マシン名> <br> * 仮想マシンを起動して同時にコンソールに接続する。 sudo virsh start <仮想マシン名> --console <br> * 仮想マシンを停止する。 sudo virsh shutdown sle15 <br> * 仮想マシンを強制停止 sudo virsh destroy sle15 <br> * 仮想マシンをシステム起動時に自動起動の設定をする。 sudo virsh autostart sle15 <br> * 仮想マシンの自動起動設定を解除する。 sudo virsh autostart --disable sle15 <br> * 仮想マシンの一覧を表示する。 sudo virsh list <br> * 全ての仮想マシンを一覧を表示する。<br> sudo virsh list --all <br> * コンソールを切り替える。 *: 仮想マシン側からホスト側へのコンソールの切り替えは、 [Ctrl]キー + []]キーである。 *: ホスト側から仮想マシン側へのコンソールの切り替えは、<code>sudo virsh console <仮想マシン名></code>コマンドを実行する。 <br> * 他、多くのサブコマンドが用意されている。 sudo virsh --help <br><br> == 仮想マシンのバックアップおよび復元 == ここでは、仮想マシンが以下の情報に基づいているとする。<br> ドメイン名(仮想マシン名) : SUSE15 イメージ名 : SUSE15.qcow2 設定ファイル(XML) : SUSE15.xml バックアップ先 : /run/media/Storage1 (外付けSSD) <br> ===== 仮想マシンのバックアップ ===== 仮想マシンを停止する。 sudo virsh shutdown SUSE15 <br> 設定ファイルをバックアップする。<br> sudo virsh dumpxml SUSE15 > /run/media/Storage1/SUSE15.xml <br> 仮想マシンのイメージをバックアップする。<br> sudo cp -p <仮想マシンのイメージがあるディレクトリ>/SUSE.qcow2 /run/media/Storage1/. <br> また、各仮想マシンの定義ファイルは、/etc/libvirt/qemuディレクトリに存在する。<br> その定義ファイルを指定して<code>virsh define</code>コマンドを実行することで、仮想マシンを<code>virsh</code>コマンドで管理できるようになる。<br> sudo virsh define /etc/libvirt/qemu/<仮想マシン名>.xml <br> なお、この定義ファイルは直接編集せず、<code>virsh edit</code>コマンドを使用して編集すること。<br> なぜなら、<code>virsh edit</code>コマンドを使用することで、定義ファイルに誤りがあった場合にエラーを出力してくれるので安全である。<br> <br> ===== 仮想マシンの復元===== 運用しているSSDとは別のSSDで復元する。<br> ここでは、外付けSSDを/run/media/Storage1にマウントしている。<br> <br> バックアップした仮想マシンのイメージを復元する。<br> sudo cp -p <仮想マシンのイメージをバックアップしたディレクトリ>/SUSE.qcow2 <仮想マシンのイメージを保存するディレクトリ>/. <br> バックアップした設定ファイルを復元する。<br> sudo cp -p /run/media/Storage1/SUSE15.xml /etc/libvirt/qemu/. <br> 復元した設定ファイルをKVMに反映する。<br> sudo virsh define /etc/libvirt/qemu/SUSE15.xml <br> バックアップに成功すると、以下のようなメッセージが出力される。<br> ドメイン SUSE が /etc/libvirt/qemu/SUSE15.xml から定義されました <br> 復元されたSUSEを起動する。<br> sudo virsh start SUSE15 <br><br> == 仮想マシンのスナップショット == ===== スナップショットの概要 ===== KVMにおけるスナップショットとは、仮想マシンのある時点の状態を保持する機能である。<br> スナップショットは、一般的なバックアップのように全てのデータを保持せずに、仮想マシン上の変更が発生した時に差分のみを保持する。<br> <br> スナップショットは、仮想マシン本体またはスナップショットファイルのいずれかが破損すると、元の状態に戻すことはできなくなるので、<br> バックアップの代わりとして利用する場合は注意すること。<br> <br> スナップショットの作成手順として、親スナップショット(external)を作成して、それから派生する子スナップショット(internal)を作成する。<br> <br> ===== 親スナップショット(external)の取得 ===== <code>virsh snapshot-create-as</code>コマンドを使用することで、仮想マシンの親スナップショット(external)を取得することができる。<br> スナップショットの取得は、仮想マシンが起動中でも可能である。<br> sudo virsh snapshot-create-as <仮想マシン名> <スナップショット名> "<コメント>" --disk-only --atomic <br> ===== 親スナップショット(external)の復元 ===== 親スナップショットの復元は、<code>virsh snapshot-revert</code>コマンドを使用する。<br> 親スナップショットの復元については、子スナップショット(internal)を取得してから行うこと。<br> sudo virsh snapshot-revert <仮想マシン名> <スナップショット名> <br> ===== 親スナップショット(external)の削除 ===== 親スナップショット(external)を削除する場合は、<code>--metadata</code>オプションを付けることで削除できる。<br> sudo virsh snapshot-delete <仮想マシン名> <親スナップショット名> --metadata <br> ===== 子スナップショット(internal)の取得 ===== 親スナップショット(external)を取得した状態で、以下のコマンドを実行すると、スナップショットを取得することができる。<br> なお、スナップショット名は親スナップショット(external)や他の子スナップショット(internal)と被らないようにすること。<br> sudo virsh snapshot-create-as <仮想マシン名> <子スナップショット名> "<コメント>" <br> ===== 子スナップショット(internal)の復元 ===== 特定のスナップショットに復元するには、<code>virsh snapshot-revert</code>コマンドを使用する。<br> 指定するスナップショットは、子スナップショット(internal)を指定するようにする。<br> sudo virsh snapshot-revert <仮想マシン名> <子スナップショット名> <br> ===== 子スナップショット(internal)の削除 ===== <code>virsh snapshot-delete</code>コマンドを実行することで、スナップショットを削除することができる。<br> sudo virsh snapshot-delete <仮想マシン名> <子スナップショット名> <br> ===== スナップショットの確認 ===== sudo virsh snapshot-list <仮想マシン名> <br> # 出力例 Name Creation Time State ------------------------------------------------------------ SN01_KVM_SUSE 2020-01-01 00:00:00 +0900 shutoff <br> ===== スナップショットのツリー表示 ===== スナップショットの派生関係を確認する場合、<code>--tree</code>オプションを付けることで確認できる。<br> sudo virsh snapshot-list <仮想マシン名> --tree <br> # 出力例 SN01_KVM_SUSE | +- SN02_KVM_SUSE | +- MariaDB_KVM_SUSE +- PostgreSQL_KVM_SUSE <br> ===== 現在の状態が、どのスナップショットからの派生か確認する ===== <code>virsh snapshot-list</code>コマンドに<code>--tree --current</code>オプションを使用することで確認することができる。<br> sudo virsh snapshot-list <仮想マシン名> --tree --current <br> # 出力例 MariaDB_KVM_SUSE <br><br> == 注意事項 == 別のHDD / SSDに仮想マシンを配置する場合、初期設定ではアクセス権限エラーになる。<br> そこで、/etc/libvirt/qemu.confファイルに以下の設定を追記する。<br> # /etc/libvirt/qemu.confファイル ・ ・ ・ user = "root" group = "root" <br> また、別のHDD / SSDに仮想マシンを配置する時は、配置先のディレクトリで以下のコマンドを実行する。<br> 以下では、<仮想マシン名>.qcow2ファイルを最大100[GB]の領域で仮想マシンを作成している。<br> qemu-img create -f qcow2 <仮想マシン名>.qcow2 100G <br><br> == エラー時の対処方法 == ===== ネットワーク ===== VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> ERROR Requested operation is not valid: network 'default' is not active <br> まず、以下のコマンドを実行する。<br> この時、以下のメッセージが出力された場合は、<code>sudo virsh net-start default</code>を実行する。<br> 今後、このネットワークを自動起動するには、<code>sudo virsh net-autostart --network default</code>を実行する。<br> # 実行 sudo virsh net-list --all # 出力 名前 状態 自動起動 永続 ------------------------------------------------ default 停止状態 いいえ (no) はい (yes) <br> また、以下のようにネットワークが表示されない場合がある。<br> Name State Autostart Persistent ---------------------------------------------------------- <br> その時は、/run/libvirt/network/default.xmlファイルを作成して、以下に示す内容を記述する。(デフォルトネットワークを作成する)<br> <br> # /run/libvirt/network/default.xmlファイル <networkstatus> <class_id bitmap='0-2'/> <floor sum='0'/> <network> <name>default</name> <uuid>e8a9f86b-1c3a-4fa5-ab03-1fb563b12b84</uuid> <forward mode='nat'> <nat> <port start='1024' end='65535'/> </nat> </forward> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:a3:0d:b0'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network> </networkstatus> <br> 次に、そのネットワークをKVMホストに永続的に追加するには、以下のコマンドを実行する。<br> sudo virsh net-define --file default.xml <br> ===== ファイアーウォール ===== VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> error: Failed to start network default error: internal error: Failed to initialize a valid firewall backend <br> この時、ファイアーウォールサービスをインストールする。<br> sudo zypper install firewalld <br> サービスを有効にして、ネットワークを再び機能させるために、次のコマンドを実行する。<br> sudo systemctl enable --now firewalld sudo systemctl restart libvirtd <br> ===== DNSマスカレード ===== VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> error: Failed to start network default error: Cannot check dnsmasq binary /usr/sbin/dnsmasq: No such file or directory <br> この時、DNSマスカレードをインストールする。<br> sudo zypper install dnsmasq <br><br> __FORCETOC__ [[カテゴリ:CentOS]][[カテゴリ:SUSE]]
インストール - KVM
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse