🖥️

VMware ESXiからProxmox VEへの移行理由

2023/10/25に公開

移行理由

  • USBデバイスがESXiだと認識されない場合が多い
  • ESXiで高負荷状態になると、ゲストOSが一旦ログアウトされることがある

どちらを選んだほうが良いか (主観)

  • メーカーからのサポートを受けたい
  • HWは互換があり性能も良いものが揃っている
  • USBデバイスを使うことはほぼない
  • 日本語の技術記事が多くほしい
    →ESXi

  • HW互換をとにかく最優先したい
  • メーカーからのサポートはなくて良い
  • ゲスト側のターミナルでLinux標準コマンドを使いたい
  • 低スぺマシンで高負荷でも安定稼働させたい
  • TPM 2.0を簡単に使いたい
  • WebUIへDDNSで簡単にSSL接続したい
    →Proxmox

決め手:USBカメラ・USBシリアルデバイスが認識されない

USBカメラの映像をOpenCVで取得するしようとすると、以下警告が出て取得できず。

[ WARN:0@10.316] global cap_v4l.cpp:1119 tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout.

※別マシンでは問題なく認識できる
このエラーで調べたが全然異なる状況での解決手順しか見つからずいずれでも解消できなかったので、まずデバイスが正しく認識できているかを確認

ls /dev -al | grep video

crw-rw----   1 root   video    29,   0  **月 ** **:** fb0
crw-rw----+  1 root   video   239,   0  **月 ** **:** media0
crw-rw----+  1 root   video    81,   0  **月 ** **:** video0
crw-rw----+  1 root   video    81,   1  **月 ** **:** video1
lsusb -v

・・・
Bus 003 Device 005: ID 0c45:6340 Microdia Camera
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x0c45 Microdia
  idProduct          0x6340 Camera
  bcdDevice            0.00
  iManufacturer           2 SD webcam 5160
  iProduct                1 SD webcam 5160
  iSerial                 0
・・・

デバイス情報は取得できているがオープンできていない?

v4l2-ctl --list-devices

SD webcam 5160: SD webcam 5160 (usb-0000:0b:00.0-2):
        /dev/video0
        /dev/video1
        /dev/media0
v4l2-ctl -d /dev/video0 --all

Driver Info:
        Driver name      : uvcvideo
        Card type        : SD webcam 5160: SD webcam 5160
        Bus info         : usb-0000:0b:00.0-2
        Driver version   : 6.2.16
        Capabilities     : 0x84a00001
                Video Capture
                Metadata Capture
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x04200001
                Video Capture
                Streaming
                Extended Pix Format
Media Driver Info:
        Driver name      : uvcvideo
        Model            : SD webcam 5160: SD webcam 5160
        Serial           :
        Bus info         : usb-0000:0b:00.0-2
        Media version    : 6.2.16
        Hardware revision: 0x00000000 (0)
        Driver version   : 6.2.16
Interface Info:
        ID               : 0x03000002
        Type             : V4L Video
Entity Info:
        ID               : 0x00000001 (1)
        Name             : SD webcam 5160: SD webcam 5160
        Function         : V4L2 I/O
        Flags            : default
        Pad 0x01000007   : 0: Sink
          Link 0x02000010: from remote pad 0x100000a of entity 'Extension 4' (Video Pixel Formatter): Data, Enabled, Immutable
Priority: 2
Video input : 0 (Input 1: ok)
Format Video Capture:
        Width/Height      : 640/480
        Pixel Format      : 'YUYV' (YUYV 4:2:2)
        Field             : None
        Bytes per Line    : 1280
        Size Image        : 614400
        Colorspace        : sRGB
        Transfer Function : Default (maps to sRGB)
        YCbCr/HSV Encoding: Default (maps to ITU-R 601)
        Quantization      : Default (maps to Limited Range)
・・・

映像デバイスとしては認識できているように見える。

ffmpeg -loglevel debug -f video4linux2 -s 640x480 -i /dev/video0 out.mpg

ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'video4linux2'.
Reading option '-s' ... matched as option 's' (set frame size (WxH or abbreviation)) with argument '640x480'.
Reading option '-i' ... matched as input url with argument '/dev/video0'.
Reading option 'out.mpg' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url /dev/video0.
Applying option f (force format) with argument video4linux2.
Applying option s (set frame size (WxH or abbreviation)) with argument 640x480.
Successfully parsed a group of options.
Opening an input file: /dev/video0.
[video4linux2,v4l2 @ 0x561a421ce6c0] fd:3 capabilities:84a00001
[video4linux2,v4l2 @ 0x561a421ce6c0] Current input_channel: 0, input_name: Input 1, input_std: 0
[video4linux2,v4l2 @ 0x561a421ce6c0] The V4L2 driver changed the pixel format from 0x32315559 to 0x56595559
[video4linux2,v4l2 @ 0x561a421ce6c0] Trying to set codec:rawvideo pix_fmt:yuv420p
[video4linux2,v4l2 @ 0x561a421ce6c0] The V4L2 driver changed the pixel format from 0x32315559 to 0x56595559
[video4linux2,v4l2 @ 0x561a421ce6c0] Trying to set codec:rawvideo pix_fmt:yuv420p
[video4linux2,v4l2 @ 0x561a421ce6c0] The V4L2 driver changed the pixel format from 0x32315659 to 0x56595559
[video4linux2,v4l2 @ 0x561a421ce6c0] Trying to set codec:rawvideo pix_fmt:yuv422p
[video4linux2,v4l2 @ 0x561a421ce6c0] The V4L2 driver changed the pixel format from 0x50323234 to 0x56595559
[video4linux2,v4l2 @ 0x561a421ce6c0] Trying to set codec:rawvideo pix_fmt:yuyv422

ここから先一切進まなかったため中断
保存されたファイルも何も映像データなし
ちなみに別のUSBカメラ2種についても全く同じで接続ポートを変えても変わらなかったので、USBカメラ側に問題があるとは考えにくい。

USBシリアルについても、ゲスト側にマウントさせても一切認識されなかったため断念。
Proxmoxに移行してからはどちらも問題なく認識されるようになったので、やはりESXi側に問題があったと思われる。

ただUSBカメラについてはOpenCVのfourccでMJPG指定しないと読み込めなかったので、もしかしたらESXiでも指定すれば行けていたかもしれないが、既に移行済みのため確認しない。

USBデバイスで悩みたくなかったらProxmox一択。

Discussion