TS-873のVirtualization StationにCentOS7.4を導入

TS-873のVirtualization StationにCentOS7.4を導入した記録

最初に

QNAP TS-873-4G
メモリを64GB化済

Amazon | QNAP(キューナップ) TS-873 クアッドコア2.1 GHz CPU 4GBメモリ 8ベイ DTCP-IP/DLNA対応
https://amzn.to/34uq7oC

この記事ではVirtualization Stationに
CentOS7.4をインストールしつつVM設定項目などを紹介します

事前準備

CentOSの最新バージョンは8系ですが
Virtualization Stationのサポートバージョンの最新が7.4だったので
今回はCentOS-7-x86_64-Minimal-1908.isoを使ってインストールしていきます

ISOファイルはNASの共有フォルダにどこでもいいので転送しておきます
作成する仮想マシンのイメージ保存先も共有フォルダ内に作成しておきます
今回はISOファイルを「test」共有フォルダの直下に配置
イメージファイルは「VMDATA」共有フォルダを使うことにしました

VM作成手順

Virtualization Station画面の概要から「VMの作成」を選択
作成フォームが表示されるので適当に埋めていきます

今回はVNCパスワードを作成しなかったので確認を求められます
今回はそのまま作成ボタンを選択しました
(パスワードは作成後でも設定・変更可能です)

これでVM作成は完了
左のVMリストメニューにVM01が追加されています

この概要のページでも下にある小さいアイコンからほとんどの操作は可能で
ペンギンが映っているコンソール部分をクリックすれば
ブラウザの別タブでVMコンソール画面を表示されます

VMリストのVM名を選択するとVMごとの個別画面に移動します

ここで重要なのはハードディスクのインターフェイス「VirtIO」です
IDEやSATA設定よりHDDアクセスが高速になる為
Virtualization Station上のVMは基本的にVirtIOに対応しているOSであれば
VirtIOを選択することになります

そしてマウントしているイメージファイルが間違っていないかを確認します
CD/DVDはIDEで構いません

VM設定項目

VMごとに設定できる項目を紹介します

一般

起動オプション

ネットワーク

モデル選択肢は「NE2000」「PCnet32」「Realtek Fast Ethernet」
「Intel Gigabit Ethernet」「VirtIO」

ストレージ

イメージパスの右にあるフォルダアイコンをクリックすると
imgファイル指定ができるのでimgファイル置換や移動も楽です

キャッシュモードの選択肢は「None」「Writeback」「Writethrough」
「Force Writeback」
インターフェイスの選択肢は「IDE」「SATA」「SCSI」「VirtIO」
キャッシュモードについては別記事で検証します

CD/DVD

イメージパスの右にある三角アイコンを押すとイメージ取り出し
イメージが選択されていない場合はアイコンを押すとイメージ選択ができます

OS側からロックされている場合は取り出せない旨のエラーが出ます

インターフェイスの選択肢は「IDE」「SCSI」

ビデオ

タイプの選択肢は「VGA」「VMVGA」「Cirrus」「QXL」

音声

コンソール操作

キーボードレイアウトの言語はEnglish(US)が初期値ですがJapaneseも選択可能です

USB

その他

自動開始の選択肢は「なし」「前の状態を保持する」「遅延」

Guest Tool CD イメージはVM個別操作のCD/DVD ROMにある
「ゲストツールCDを挿入する」ボタンを押せばマウントされます
(現時点でのゲストツールCDの対応OSはWindowsのみ)

CentOSにゲストツールをインストールする場合は
ゲストツールCDを使用せずに他のKVMシステムと同様に
qemu-guest-agentをインストールすればOK

# yum install qemu-guest-agent

スナップショット

スナップショットはVMごとに最大32個までの制限があります

「スナップショットを撮る」ボタンを選択
保持のチェックは保護メールみたいな感じで古くなっても勝手に削除されません

スナップショットを撮った場合

スケジュールで自動スナップショットも可能

VMのイメージファイル保存先

今回はVMDATAという共有フォルダに指定したのでSMB経由で覗いてみます

VMDATAを指定するとその中にVM名のフォルダが作成されています

その中にはVM名.imgでイメージファイルが保存されていて
もう1つのファイルは先ほど作成したスナップショットです

コンソール画面でCentOS起動

概要画面かVM個別画面でCentOSの場合ペンギンマークの画面をクリックすると
別タブでコンソール画面が表示されます
表示されている通りスタートを押して電源を入れます

CentOSのISOがマウントされているのでインストーラーが立ち上がります
左のメニューは左下のボタンで格納されています

GUI部分もズレなくしっかり表示されていて
ネットワークもこの段階から使用可能です

Virtualization StationにおけるRTCの扱い

ハードウェアクロック(RTC)については
QNAPのVirtualization Stationの場合、JSTの時刻がそのまま格納されているので
インストール時の「システムクロックでUTCを使用」は無効にしておく必要があります

もし「システムクロックでUTCを使用」を有効にしている場合でも
VM起動時にchronydなどのNTPデーモンが起動すると同期されますが
RTCとの同期が先に処理される為
VM起動→NTPデーモン起動・同期の間に起動したサービスなどは
JST+9時間として未来時刻で/var/log/messagesなどのログに記録されます
(UTC扱いでJST時刻が渡されてそれを+9時間でJSTに変換する為)

デーモンによっては動作途中で時刻を大幅に変更すると
エラーを吐くものがあるため注意が必要です

OSインストール後に設定値を確認する場合は
timedatectlコマンドでRTC in local TZの設定値を確認します

[root@localhost ~] timedatectl
      Local time: 水 2020-01-01 09:00:00 JST
  Universal time: 水 2020-01-01 00:00:00 UTC
        RTC time: 水 2020-01-01 09:00:00
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

RTC in local TZは文字通りRTCにローカルタイムゾーンで格納されているかどうかで
RTC in local TZ:yesが「システムクロックでUTCを使用」は無効状態
RTC in local TZ:noが「システムクロックでUTCを使用」は有効状態

Virtualization StationのVMではRTC in local TZ:yesが正解です

RTC in local TZ:yesの場合はtimedatectlコマンドを実行すると
WarningでRTCにはUTCを入れろと言われますが無視してOK

RTC in local TZ:noをyesに変更する場合は

# timedatectl set-local-rtc 1

yesからnoに戻す場合(Virtualization StationのRTC仕様が今後変わった場合など)

# timedatectl set-local-rtc 0

RTC in local TZ:noの環境でtimedatectlコマンドを実行しても
Local time・Universal time・RTC timeが合っているはずですが
それは起動後にNTPが時刻合わせしているので当然です

NTP同期後でもRTCを直接確認する方法はこちら
日本時間で2020年01月01日 09時00分00秒に実行したとして
RTCがUTC扱いになっているのでUTC→JSTの処理が入り+9時間になっています

[root@localhost ~]# hwclock --show
2020年01月01日 18時00分00秒  -0.485765 秒

RTC in local TZ:yesの環境であればRTCがJST扱いでそのまま使われるので
ちゃんと9時を返します

[root@localhost ~]# hwclock --show
2020年01月01日 09時00分00秒  -0.485765 秒

CPU使用率とメモリ使用率

VM起動は上記で設定したVM01の1台のみ
VM01へCentOS7.4をインストールしている最中のCPU使用率とメモリ使用率がこちらで
IO待機でわかる通りCPUよりディスクアクセスがネックになっているのがわかります
IO待機が落ち着いてユーザが上がっていっているのはインストーラーの最終設定時です

インストール後に一度シャットダウンしてからISOをアンマウントし
再度起動させてyum updateで更新した際のリソースモニター
この時の更新数はkernelアップデート込で33
最初の山がOS起動時の処理でネットワーク利用率が上がったところがダウンロード
ユーザだけ上がっているのがVerifying処理などの部分

yum updateが終わりVMをシャットダウンした後です
前記事でも記載した通りVM起動前の使用済みが1.7GB弱なので
VM分のメモリはシャットダウン後すぐに解放されて
キャッシュ利用可能な空き枠になっているのがわかります

CentOS7.4でディスクアクセス計測

今回イメージファイルを格納した場所はHDD(ST1000DM010)2台でRAID1構成
ストレージプール作成し非暗号化シックボリューム内に配置
システムボリュームは別ストレージプールに配置しているので影響はほぼ無いはず

TS-873でのローカル速度計測 | fefcc.net
https://fefcc.net/archives/886

こちらの記事で計測した同じHDD2台のRAID1(非暗号化シックボリューム)結果がこちら

|      | Read(MB/s)|Write(MB/s)|
|------|-----------|-----------|
|  Seq |    139.643|    165.643|
| 512K |     58.851|     86.897|
|   4K |      0.607|      0.915|
|4KQD32|      2.753|      0.921|

本来は条件を揃えて計測したいところですが
CentOS7.4のfioバージョンが3.7だったので残念ながら少し計測条件が変わってます

[root@localhost ~] # fio -v
fio-3.7

前回は2系だったので使うfio-cdmもbuty4649バージョン
今回は3系なので0xFelixバージョンを使用(計測項目がCDM6系になります)
URL等はローカル速度計測の記事でご覧ください

以下が今回使用したfio-cdmの中身です

#!/bin/sh

TARGET="$1"
FIOCMD="fio"

fio2cdm() {
    awk '
    /^128K-Q32T1-Seq-Read:/ {getline;if($1~/^read/){r128kq32t1seqread=$4}}
    /^4K-Q8T8-Rand-Read:/   {getline;if($1~/^read/){r4kq8t8randread=$4}}
    /^4K-Q32T1-Rand-Read:/  {getline;if($1~/^read/){r4kq32t1randread=$4}}
    /^4K-Q1T1-Rand-Read:/   {getline;if($1~/^read/){r4kq1t1randread=$4}}
    /^128K-Q32T1-Seq-Write:/{getline;if($1~/^write/){r128kq32t1seqwrite=$4}}
    /^4K-Q8T8-Rand-Write:/  {getline;if($1~/^write/){r4kq8t8randwrite=$4}}
    /^4K-Q32T1-Rand-Write:/ {getline;if($1~/^write/){r4kq32t1randwrite=$4}}
    /^4K-Q1T1-Rand-Write:/  {getline;if($1~/^write/){r4kq1t1randwrite=$4}}

    function n(i) {
        split(gensub(/\(([0-9.]+)(([kM]?)B\/s)\)?/,"\ \ ", "g", i), a);

        s = a[1];
        u = a[2];

        if (u == "k") {
            s /= 1024
        }

        if (u == "") {
            s /= 1024 * 1024
        }

  return s;
    }

    END {
        print ("|           | Read(MB/s)|Write(MB/s)|");
        print ("|-----------|-----------|-----------|");
        printf("| Seq Q32T1 |%11.3f|%11.3f|\n", n(r128kq32t1seqread), n(r128kq32t1seqwrite));
        printf("| 4K  Q8T8  |%11.3f|%11.3f|\n", n(r4kq8t8randread),   n(r4kq8t8randwrite));
        printf("| 4K  Q32T1 |%11.3f|%11.3f|\n", n(r4kq32t1randread),  n(r4kq32t1randwrite));
        printf("| 4K  Q1T1  |%11.3f|%11.3f|\n", n(r4kq1t1randread),   n(r4kq1t1randwrite));
    }
    '
}

trap "rm -f ${TARGET}/.fio-diskmark" 0 1 2 3 9 15

cat <<_EOL_ | "$FIOCMD" - | fio2cdm
[global]
ioengine=libaio
group_reporting
directory=${TARGET}
filename=.fio-diskmark
# CDM default test size is 1G
size=1G
# CDM disables the use of caches
direct=1
# CDM waits 5 seconds for measurements to settle
# ramp_time=5s
# CDM runs 5 consecutive tests for 5 seconds each
runtime=25s
# Make sure we use random values each time
refill_buffers
norandommap
randrepeat=0
allrandrepeat=0

[128K-Q32T1-Seq-Read]
rw=read
bs=128K
iodepth=32
stonewall

[4K-Q8T8-Rand-Read]
rw=randread
bs=4K
iodepth=8
numjobs=8
stonewall

[4K-Q32T1-Rand-Read]
rw=randread
bs=4K
iodepth=32
stonewall

[4K-Q1T1-Rand-Read]
rw=randread
bs=4K
iodepth=1
stonewall

[128K-Q32T1-Seq-Write]
rw=write
bs=128K
iodepth=32
stonewall

[4K-Q8T8-Rand-Write]
rw=randwrite
bs=4K
iodepth=8
numjobs=8
stonewall

[4K-Q32T1-Rand-Write]
rw=randwrite
bs=4K
iodepth=32
stonewall

[4K-Q1T1-Rand-Write]
rw=randwrite
bs=4K
iodepth=1
stonewall
_EOL_

長くなりましたが以上の理由により単純比較はできない点に注意してください

では今回の計測結果がこちら

[root@localhost ~]# ./fio-cdm ./
|           | Read(MB/s)|Write(MB/s)|
|-----------|-----------|-----------|
| Seq Q32T1 |    159.000|     69.000|
| 4K  Q8T8  |      2.717|      1.021|
| 4K  Q32T1 |      2.499|      0.955|
| 4K  Q1T1  |      0.541|      1.002|

書き込み速度が気になりますが
これは前回のfio-cdmと同じくキャッシュ無効にして計測している影響で
実際に使う場合の書き込みはもう少し高速です

別途WindowsのVM内でCrystalDiskMarkを使って計測しているので
別記事でそちらの結果もご覧ください

最後に

CUIのOSは軽くてTS-873程度のスペックでも普通に使えるので
cron処理や身内用のサーバ、wikiやWordPressもQNAPアプリを使わずに
VM内で制限なく構築できたりするので便利です

複数VMを同時にyum updateとかしちゃうとIO待機で遅くなりそうですので
その辺りは運用側で気を付ける必要はあるものの
RX-421NDとHDDのRAID1でここまで動けば十分でしょう

VMからのディスクアクセス速度はイメージファイルを配置する場所次第なので
もっと高速化したい場合はQtierやSSDキャッシュの構成にしたり
容量に問題なければオールフラッシュの構成でストレージプールを作成し
そこにイメージファイルを配置するだけでOKです

コメント