0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

foltiaを仮想マシンで動かした話

Last updated at Posted at 2025-10-25

概要

foltiaのベースOSは古いCentOS6系のため、比較的新しいPCではセキュアブートや各種ドライバに対応しておらず、物理環境での運用が困難なので、VM環境への移行した時の備忘録をまとめました。
旧録画サーバからの移行前提で記事を書いているので、新規構築の場合はDBバックアップから下は必要はないです。

移行元環境

  • CPU: Core i3 6600
  • OS: foltia (CentOS6.10)
  • キャプチャボード: PT3
  • OS用ストレージ: SATA SSD 120GB
  • 録画用ストレージ: HDD*2 (mdデバイスでのRAID1)
    ※ システムと録画領域が別々のドライブでの構成

移行先ホストOS環境

  • CPU: Core i5 12600K
  • OS: Debian 12
  • キャプチャボード: PT3
  • OS用ストレージ: NVMe SSD 500GB
  • 録画データ用ストレージ:
    テンポラリ用HDD (foltiaインストール時の消えてもいいストレージ)
    移行元PCのHDD*2 (後で接続、foltiaインストール時には未接続)
    ※システムと録画領域が別々のドライブでの構成

ホストOSのセットアップ

  1. 録画用のHDDは未フォーマット状態でdebian 12をインストール(手順省略)
    ※ debianではなくUbuntuでも大丈夫なはず
  2. パッケージの更新
    $ sudo apt update
    $ sudo apt -y upgrade
    
  3. KVMをインストール
    $ sudo apt -y install qemu-kvm libvirt-daemon-system libvirt-daemon virtinst bridge-utils libosinfo-bin
    
  4. cockpitをインストール
    $ sudo apt -y install cockpit cockpit-machines 
    
  5. cockpitでネットワーク管理できるようにNetworkManagerの設定を編集
    /etc/NetworkManager/NetworkManager.conf
    [main]
    plugins=ifupdown,keyfile
    
    [ifupdown]
    - managed=false
    + managed=true              
    
  6. NetworkManagerのサービスを再起動
    sudo systemctl restart NetworkManager
    
  7. PCIパススルー設定するため、デバイス番号確認
    $ lspci -nnk |grep Multimedia
    07:00.0 Multimedia controller [0480]: Altera Corporation Device [1172:4c15] (rev 01)
    
    [ ]に囲まれているベンダーIDとデバイス番号を確認
  8. /etc/default/grubを編集し、上記で確認したデバイス番号を含めたパススルー設定
    /etc/default/grub
    (略)
    GRUB_CMDLINE_LINUX_DEFAULT="quiet"
    - GRUB_CMDLINE_LINUX=""
    + GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt vfio-pci.ids=1172:4c15"
    
    # If your computer has multiple operating systems installed, then you
    (略)
    
  9. ホストOSでPT3のドライバを読み込まないようにpt3モジュールをブラックリストへ追加
    $ sudo sh -c "echo blacklist earth_pt3 >> /etc/modprobe.d/blacklist.conf"
    $ sudo shutdown -r now
    
  10. cockpitのWebGUI (https://IP_address:9090)に接続し、ローカルユーザでログイン
  11. 右上の方にある制限付きアクセスをクリック後パスワードを入れ、管理アクセスに変更
  12. ネットワーキングを開き、「ブリッジの追加」→名前をbr0に変更し、ポートのeno1をチェックし「保存」
    image.png
    image.png
  13. IPが変わっているので、変更先のIPを確認してcockpitのWebGUIに接続
  14. br0 のリンクをクリック
    image.png
  15. IPを固定するためIPv4の編集を押す
    image.png
  16. IPの設定をして「保存」
    image.png
  17. IPが変わっているので、変更したIPでcockpitのWebGUIに接続

仮想マシン作成

  1. foltiaのISOイメージをダウンロード
    $ curl -o /tmp/foltia_ANIME_LOCKER-install-R34-DVD-6122.iso https://download.foltia.com/evaluation/foltia_ANIME_LOCKER-install-R34-DVD-6122.iso
    
    • ISO設置場所によっては、ゲストOSインストール時にセキュリティポリシーでpermission deniedでエラーになる可能性があるのでダウンロード先は /tmp を推奨
    • 上記のダウンロード先URLは2025年10月当時の物で変更されている可能性があるのでfoltiaのサイトから最新バージョンを確認
  2. 仮想マシンを開き、「仮想マシンの作成」
  3. 各種設定をし、「作成して編集する」
    設定例
    名前: foltia(任意)
    インストールタイプ: ローカルインストールメディア
    インストールソース: /tmp/foltia_ANIME_LOCKER-install-R34-DVD-6122.iso (上でダウンロードしたISOまでのパス)
    オペレーティングシステム: Unknown
    ストレージの制限: 50 GiB
    メモリー: 任意(普通は8GiBあれば十分)
    image.png
  4. 「ホストデバイスの追加」を開き、カードリーダーとキャプチャボードを追加
    カードリーダ追加例
    image.png
    キャプチャボード追加例
    lspciで見つけたPCIのアドレスを選択している
    image.png
    正常に追加出来ていることを確認
    image.png
  5. HDDのパーティションを作成し、仮想マシンにアタッチ
    $ sudo parted /dev/sda
    GNU Parted 3.3
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) mklabel gpt
    (parted) mkpart
    Partition name?  []? 
    File system type?  [ext2]? xfs
    Start? 0%
    End? 100%
    (parted) quit
    $ sudo virsh attach-disk foltia /dev/sda1 vdb --targetbus virtio --driver qemu --subdriver raw --persistent
    
    • 移行元PCで作成したmdデバイスはパーティション単位でのRAID構築だったので、環境を合わせるため念のためパーティション作成後VMにバインドしている。多分 /dev/sda デバイスをそのままvirsh attach-diskしても大丈夫(未確認)。
  6. cockpitのGUIから仮想マシンを起動しfoltiaをインストール
    インストール設定についてはシステムと録画領域を別々のドライブでの構成、それ以外の手順については省略
  7. インストール後、foltiaの動作を確認をしたら仮想マシンをシャットダウン
  8. ホストOSをシャットダウン

移行元PCのDBバックアップ

  1. 移行元PCのストレージに、foltia-DB-Dump.dat.MP4というファイル名のDBバックアップが自動で出来ているので、念のために上書きされないように~/php/tvにコピーする
    $ cp -p ~/php/tv/mita/foltia-DB-Dump.dat.MP4 ~/php/tv/
    
    • ~/php/tv/mita/にfoltia-DB-Dump.dat.MP4がなかったら、下記コマンドで作成
      $ pg_dump -Fc foltia > /home/foltia/php/tv/foltia-DB-Dump.dat.MP4
      
  2. シャットダウンする
    $ su -
    # shutdown -h now
    

移行先の録画用ストレージを交換

  1. 移行先のHDDを取り外し、移行元のHDDを接続し起動
  2. HDDに書かれていたメタ情報からRAID状態が新PCでも復元されているかを確認
    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
    md127 : active raid1 sdb1[2]
            19531692032 blocks super 1.2 [2/1] [U_]
    
    unused devices: <none>
    
    自環境では元PCではHDDは/dev/sd[bc]で検出されていたが、新PCではHDDが/dev/sd[ab]で検出されているため、sd[bc]で組んでいたRAIDが片肺運用になっていた
  3. RAIDにHDDを組み込み
    $ sudo mdadm --manage /dev/md127 --add /dev/sda1
    
  4. mdadm.confに構成情報の書き込みし再起動
    $ sudo mdadm --detail --scan |sudo tee /etc/mdadm/mdadm.conf
    $ sudo update-initramfs -u
    $ sudo shutdown -r now
    
  5. 再度RAID状態を確認
    $ cat /proc/mdstat
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
    md0 : active raid1 sda1[3] sdb1[2]
          19531692032 blocks super 1.2 [2/2] [UU]
          bitmap: 0/73 pages [0KB], 131072KB chunk
    
    unused devices: <none>
    
    読み書きが発生しなかったおかげなのか、一瞬でRebuildが終わっていた
  6. cockpitを使いfoltiaにアタッチされている旧HDDを外す
    image.png
  7. コンソールからmdデバイスを仮想マシンにアタッチ
    $ sudo virsh attach-disk foltia /dev/md0 vdb --targetbus virtio --driver qemu --subdriver raw --persistent
    
  8. cockpitのGUIからアタッチされているかを確認
    image.png
  9. foltiaを起動し、交換したストレージがマウントされているかdfコマンドなどで確認

foltiaのDBリストア

  1. foltiaのコンソールへログイン
  2. 上記URLを参考にDBのリストア
    $ cd ~/php/tv
    $ dropdb foltia
    $ createdb -T template0 foltia
    $ pg_restore -Fc -C -d foltia ./foltia-DB-Dump.dat.MP4
    
  3. foltiaのWebUIから録画一覧などを確認し、問題がなければ~/php/tv/foltia-DB-Dump.dat.MP4を削除し移行完了

その他

ファンコンが上手く動いていない

  • B760チップセットだと、そもそもファン回転数が表示されなかったので、モジュールの確認とロード
    $ lsmod |grep nct6775
    $ modprobe nct6775
    $ lsmod |grep nct6775
    nct6775                32768  0
    nct6775_core           77824  1 nct6775
    hwmon_vid              16384  1 nct6775
    $ sensors|grep fan
    fan1:                        0 RPM  (min =    0 RPM)
    fan2:                     1024 RPM  (min =    0 RPM)
    fan7:                        0 RPM  (min =    0 RPM)
    
  • 正常に表示されるようになったので、/etc/modulesにnct6775を追記し自動ロードするように設定
    $ sudo sh -c "echo nct6775 >> /etc/modules"
    

VMで使うCPUをPコアのみにする

  1. OS上で割り当てらているCPUのPコア/Eコア確認
    $ cpuid |grep -i 'core type'
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Core
        core type               = Intel Atom
        core type               = Intel Atom
        core type               = Intel Atom
        core type               = Intel Atom
    
    i5-12600Kは12行目(0-11)までがIntel CoreだったのでPコア、13~16行目(12-15)がIntel AtomだったのでEコアが割り当てらていた
  2. VMに割り当てられている仮想CPUの確認
    $ sudo virsh vcpupin foltia
    VCPU   CPU Affinity
    ----------------------------
    0      0-15
    1      0-15
    2      0-15
    3      0-15
    4      0-15
    5      0-15
    6      0-15
    7      0-15
    
    VMにはPコア/Eコア全て割り当てらていた
  3. Pコアの0-11だけに割り当てるように変更
    $ sudo virsh vcpupin foltia 0 0-11
    $ sudo virsh vcpupin foltia 1 0-11
    $ sudo virsh vcpupin foltia 2 0-11
    (略)
    $ sudo virsh vcpupin foltia 7 0-11
    
  4. Pコアだけに割り当てらているか確認
    $ sudo virsh vcpupin foltia
    VCPU   CPU Affinity
    ----------------------------
    0      0-11
    1      0-11
    2      0-11
    3      0-11
    4      0-11
    5      0-11
    6      0-11
    7      0-11
    

m2tをb25デコードするスクリプト

カードリーダ不調などでb25デコードが失敗してた時に使う奴

  • スクリプト作成と実行権付与
    $ cat << '_EOF_' > ~/unscramble.sh
    #!/bin/env sh
    BACKUP_DIR=backup_dir
    if [ ! -d ${BACKUP_DIR}" ]; then
        mkdir ${BACKUP_DIR}
    fi
    
    for TSF in "${@}"; do
        echo Unscrambling ${TSF}
        b25 ${TSF} ${TSF}.tmp
        touch -r ${TSF} ${TSF}.tmp
        mv ${TSF} ./${BACKUP_DIR}/${TSF}
        mv ${TSF}.tmp ${TSF}
    done
    _EOF_
    $ chmod +x ~/unscramble.sh
    
  • 使い方
    放送終了時間が2025/10/10 23時~2025/10/11 03時の番組がデコード失敗していた時の例
    $ cd ~/php/tv
    $ find . -maxdepth 1 -type f -name "*.m2t" -newermt "2025-10-10 23:00" ! -newermt "2025-10-11 03:00" |xargs ~/unscramble.sh
    
    • デコード失敗していたm2tファイルは~/php/tv/backup_dirに残っているので、正常にデコード出来ていたら削除する
    • 同一ファイル名の物が2つ出来てしまうので非推奨だが、BACKUP_DIR=backup_dirBACKUP_DIR=mitaにすれば、foltiaのゴミ箱管理から削除可能
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?