KVM libvirt で cdrom をマウントする
# virus edit vm_name <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='/mnt/storage-1/application_installer/ISO/virtio-win-0.1.139.iso'/> <target dev='hdb' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk>
CentOS7 VAAPIでHWエンコード
・リポジトリの追加
# yum -y install yum-utils epel-release # yum-config-manager --disable epel-release # yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo # yum-config-manager --disable epel-multimedia
・インストール
# yum --enablerepo=epel,epel-multimedia install libva libva-devel libva-intel-driver libva-utils # vainfo ※利用可能なプロファイル一覧が表示されればOK
・ffmpegのインストール
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos
・ffmpegで動作確認
※vaapi_device で指定するHWエンコードデバイスは ls -n /dev/dri で確認 # ffmpeg -vaapi_device /dev/dri/card0 \ -hwaccel vaapi \ -hwaccel_output_format vaapi \ -i input.mp4 \ -c:v h264_vaapi -profile:v 100 -level 40 -qp 22 \ -c:a copy \ output.mp4
・TSのエンコード
# ffmpeg \ -vaapi_device /dev/dri/card0 \ -hwaccel vaapi \ -hwaccel_output_format vaapi \ -i input.ts \ -analyzeduration 30M -probesize 30M \ -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=720:h=480' \ -c:v h264_vaapi -profile:v 77 -level 31 -qp 22 -quality 0 -aspect 16:9 \ -c:a libfdk_aac -ac 2 -ab 96k -ar 48000 \ output.mp4 hwaccel vaapi → HWデコードする hwaccel_output_format vaapi → HWデコード結果をそのままHWエンコーダに渡す ※ソフトウェアフィルタを使う場合はyuv420p等を指定する analyzeduration、probesize → TSなどのフォーマットでは読み込みのために動画ストリームの解析が必要 デフォルトの解析時間・解析サイズでは動画を読み込めない場合があるため、長めに修正する analyzeduration:デフォルト 5秒(5Mマイクロ秒) probesize:デフォルト 5Mバイト scale_vaapi → HWエンコーダでリサイズ profile:v → h.264のプロファイル High:100 Main:77 Baseline:66 level → h.264のレベル 4.0 → 40 3.1 → 31 1.3 → 13 qp → 画質 デフォルト20 数値が低いほど高画質、高ビットレート quality → 品質 デフォルト0 数値が低いほど高画質、低速
・VAAPIの情報
https://wiki.libav.org/Hardware/vaapi
https://gist.github.com/Brainiarc7/95c9338a737aa36d9bb2931bed379219
https://trac.ffmpeg.org/wiki/Hardware/VAAPI
CentOS7 HandBrakeを野良リポジトリからインストールする
・リポジトリの追加
# yum -y install yum-utils epel-release # yum-config-manager --disable epel-release # yum-config-manager --add-repo=http://negativo17.org/repos/epel-multimedia.repo # yum-config-manager --disable epel-multimedia
・インストール
# yum --enablerepo=epel install libmfx # yum --enablerepo=epel-multimedia install HandBrake-cli
CentOS7 KVMでNVIDIAのGPUをWindowsにパススルーする
WindowsのNVIDIAドライバはOSがKVMハイパーバイザー環境で動作していることを検知すると error 43 で動作停止するという仕様のため、回避するために以下の対策が必要。
1. libvirt のドメイン設定でハイパーバイザーのベンダーIDを偽装する
2. libvirt のドメイン設定で hidden state を on にする
詳細は下記 https://wiki.archlinuxjp.org/index.php/OVMF_による_PCI_パススルー 9.1 Windows の仮想マシンに NVIDIA の GPU をパススルーした場合に "Error 43 : Driver failed to load"
上記対策はUEFIモードでインストールしたWindowsのみで有効。
(BIOSモードでインストールしたWindowsではエラーが出る)
UEFIモードでインストールできるようにするために、OVMF(Open Virtual Machine Firmware)のインストール・設定を行う。
・OVMFのインストール
# vi /etc/yum.repos.d/kraxel.repo include=https://www.kraxel.org/repos/firmware.repo # yum install edk2.git-ovmf-x64
・virt-installの設定
vert-install で --boot uefi オプションを指定できるようにするために、下記設定を追加する # /usr/local/etc/libvirt/qemu.conf nvram = [ "/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd", "/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw" ]
・virt-install で UEFI を指定してインストール
# virt-install \ --boot uefi \ <省略> ※virt-manager でインストールする場合はファームウェアの指定でUEFIを選択する ※OVMFは virtioで接続したディスクからOS起動できないため、IDE もしくは virtio-scsi での接続が必要
CentOS7 KVM virt-installで仮想マシンをインストールする一例
・仮想ディスク作成
# qemu-img create -f qcow2 /usr/local/var/lib/libvirt/images/vm1.qcow2 8G
# virt-install \ --connect qemu:///system \ --boot uefi \ ← UEFIモードでインストールしたい場合は指定する。OVMFの事前設定が必要。 --name vm1 \ --vcpus=1 \ --cpu host \ --ram=1024 \ --os-type=linux \ --os-variant=rhel7.3 \ --disk=/usr/local/var/lib/libvirt/images/vm1.qcow2 \ --cdrom=/mnt/storage-1/application_installer/ISO/CentOS-7-x86_64-NetInstall-1611.iso \ --network bridge=br0 \ --graphics vnc,password=foobar,port=5910,listen=0.0.0.0,keymap=us ※os-type は linux, windows, unix, other のいずれか ※os-variant で指定できるパラメータは下記コマンドで確認 # osinfo-query os ※指定できる cpu の種類は下記コマンドで確認 # virsh cpu-models x86_64 ※使用できるCPU機能は下記で確認 # cat /usr/share/libvirt/cpu_map.xml
上記の例では <ホストのIP>:5910 にアクセスし、パスワード:foobar を入力
各種パラメータについては下記を参照。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/