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です
コメント