自宅オンプレ仮想基盤サーバをRyzenに変えようとしたら炎上案件と化した

2020/10/20 BIOSダウングレード方法とマザーボードについて追記

# 大炎上しました
3連休がきれいに吹き飛びました。



# 教訓
- BIOSのバージョンに気を配る
- 古すぎるアイテムはなるべく排除していく
- 安いものはそれなりの耐久度
- よく調べる



# 事の顛末
自宅サーバ運用15年生ほどになります。
ヤフオクなどで安物のパーツをかき集めてサーバを構築し運用する生活を続けています。
昔はESXiを使っていましたが、ここ数年は[Proxmox VE](https://pve.proxmox.com/wiki/Main_Page)を使って仮想基盤としていました。
特にここ4年ほどは、以下のようなハードウェア構成で運用していました。

- CPU：Intel Xeon E5-2667（6c/12t、2.9GHz、**130W**）
- メモリ：40GB（4GB×6枚+8GB×2枚）
- マザーボード：ASUS P9X79Pro（ヤフオクでなぜか380円で買えたやつ）
- ケース：tachace CP-445-R8（4Uとしてラックマウントできて、前面抜き出し可能な3.5インチベイが8つもついてる、それでいて17,570で買えた）
- ストレージ：
 - 2TB×2 RAID1（3ware 9650SE-2LP、優秀）
 - 4TB×4 ZFS Z1（オンボード）
- 何に使ってるか言えないPT3×2

このような~~ビンボー臭い~~安価な構成でしたが、私の運用要件としては十分な機能を
果たしてくれていたと思います。
若干凝った要素として、PT3はPCI-eパススルーにより仮想計算機に紐付けられています。
RAIDカードに3ware 9650SEを使っているのは、これがポン付けでLinuxで認識され、
しかもヤフオクで非常に安価に取引されているからです。
性能もまぁ悪くなく、BBUもつければ障害耐性もそこそこで重宝していました。
昔はRocketRAID使っていた時期もありましたが、カーネルモジュールの再構築とかで
毎回躓いていたので、9650SEに移行しました。
それでも不満が無かったわけではなく、以下のような要素を改善したいと考えていました。



### 消費電力が爆熱

業務で運用しているサーバと比べれば十分に低消費電力なのですが、それでもXeonの130Wは
伊達ではなく、夏場のクーラー代と合わせて電気代を圧迫していました。
現職に就くにあたって実家を出たところ、実家の電気代が月1万5千円下がったそうです。
ちなみに私はいま一人暮らしなのに月1万8千円くらい払ってます。
これを少しでも減らしたい！

### CPU性能の陳腐化

Xeonとはいえ、Sandy Bridge世代の代物です。
Conroeみたいな~~生きた化石~~今でも愛用されている傑作ほどではないですが、SBも十分に古いです。
消費電力に対して性能の陳腐化は否めません。
動画のソフトウェアエンコードなど、手元のCore i5（Coffee Lake）のほうが短時間で出来上がる始末でした。

### メモリ入手が困難になってきた

メモリは景気よくECCを使っていたのですが、DDR3の流通量がヤフオクでも急激に少なくなり、
今後が心配な状況でした。
また、4年ほど運用してEDACがエラーを吐くようなこともなかったので、ECCの必要性に疑問もありました。



# ぼくのかんがえたさいきょーの（安価な）構成

ちょうどRyzen第3世代が発売し、ただでさえ安い第2世代の価格が急落したことにより
（あと同僚に煽られたことにより）、うっかりヤフオクで**Ryzen 2700**を購入してしまいました。
公称**65W**で**8c/16t**、しかも平常時はとても低消費電力と高い評価を得ているようです。
買ってしまえば後戻りは出来ないので、基盤サーバをリプレースする計画と相成りました。
といっても、そんなに大変になることはないはずです。
まず、基盤サーバのルートディレクトリは9650SE-2LPでRAID1で構成されています。
マザーボード上のRAID機能だったら手間取ったでしょうが、ハードウェアRAIDカードなのですから、
差し替えるだけでRAID機能は移植できるはずです。
せいぜいfstab書き換えてgrub-updateすれば十分でしょう。
**（と高をくくっていました、このときはまだ）**

新サーバ環境で変わる部分はCPUとマザーボードだけです。
CPUはRyzen 2700に、マザーボードは**ASRock B450 Pro4**です。
B450はメモリ上限が64GBだったため、メモリ上限が128GBであるX570にしたかったのですが、
B450の魅力的な低価格に惹かれてこちらにしました。
しかもASRock B450 Pro4はECCメモリに公式で対応しているようです。
まずは通常のメモリで運用を始めて、困ったらECCに移行できる手軽さが決め手でした。

そして、ちょうど11月の最初に3連休もあるので、金曜夜に帰宅してから早速移行作業に取り掛かりました。



# トラブル1：UEFIのメーカーロゴから先に進まない（重症度：中）

物理的にパーツを差し替えて、UEFIの設定を少し弄り、いざ起動してみたところ、まずコレです。
**メーカーロゴから先に進みません。**
fstabいじったりgrub書き換えたりするどころの話ではありません。
メーカーロゴが表示され、9650SE-2LPのBIOSが表示され、メーカーロゴに戻ったあと、
まったく進む気配がありません。
試しに9650SE-2LPを外し、テキトーなLive USBを挿すと**フツーに起動します。**
9650SE-2LPが原因のようです。

少し調べてみたところ、以下のような記事が…

> 9650世代のRAIDカードは古くてPCIe 1.1専用だからRyzen+Linuxの環境では動かないっぽいよ。
> 9750だったら動いたけどねハハハ」（拙い意訳）
> *[3w-9xxx: 3ware 9650SE-2LP RAID controller not working on AMD Ryzen system](https://bugzilla.kernel.org/show_bug.cgi?id=202425)*


**ピンポイント過ぎて笑う。**

おそらく9750に差し替えれば、いままでのディスクで構成されたRAIDも認識してくれ、
しかもRyzen+Linuxで動くのでしょう。
しかし、難点が2つ。
まず、9750シリーズはそれほど安く取引されていません。サクッと買うには躊躇する値段です。
次に、9750シリーズはすべてPCI-e 8レーン仕様です。
B450 Pro4には16レーンのスロットが2つありますが、それぞれグラボと4ポートEtherカードで
埋まる予定であり、物理的にも困難です。
（1レーンスロットを加工すれば挿さって動くかもしれませんが、すでに気力が萎えて無理でした）

仕方がないので、これまでのルートを捨て、Proxmox VEを新規インストールすることにしました。
**辛い。**


# トラブル2：Root on ZFSがEFIブートで動かない（重症度：低）

で、仕方なく新規インストールを進めていくわけですが、これまで非冗長構成で何度も痛い目を見たので、
ルートディレクトリをシングル構成で組むのだけは避けたいです。
しかし、mdadmの性能が出ないことも知っています。
そこで、Proxmox VE6から公式に採用された**Root on ZFS**で組むことにしました。
インストールは難なく終わり、再起動。
**しかし起動しない。**
いろいろいじっているうちに、レガシーモードによる起動ができることに気づきました。

**なるほど、EFIブート出来ないんだ…**
試したところ、ZFSでなければEFIブートできます。

というわけで、EFIブートを捨て、レガシーなブートで運用していくことにしました。
ええ、なんてことないです、動くのだから！
ホントはpve-efiboot-toolsで運用してみたかったのですが…



# トラブル3：HDDが2台認識しない（重症度：高）

ようやくProxmox VEも動くところまでこぎつけたので、次は仮想計算機のバックアップなどの
いろいろなデータが入っているZFSプールをインポートしました。
**しかしインポート時にエラーが…**
よく見ると、ZFSを構成している4本のHDDのうち、2台が認識されていません。
Z1は1台の故障までしか許容されないので、2台がダウンしている状況では当然インポートも出来ません。
そのうち1台は1週間前に買い替えたばかりの6TBのディスクです。
**もう意味がわからない。疲弊度マックス。**

とりあえず、フロントのHDDスロットから何度も抜き差しするのは良くないと思い、S-ATAケーブルで
マザボに直接接続すると、**S-ATAケーブルがHDDに挿さらない。**

**フロントHDDスロットケースのS-ATAコネクタが折れてケーブルに挟まってました。**
**しかも3箇所！**

HDDスロットは8箇所あり、3箇所死んだので、5箇所しかありません。
しかしHDDはRoot2本+ZFS4本の計6本で足りません。
仕方なく、5インチベイに挿さるフロントスロットを設置し、なんとか全HDDが認識されるようになりました。
でも他のフロントスロットのコネクタがダメになるのも時間の問題な気がします。

**安物のなんちゃってラックマウントケースではダメだったか…**



# トラブル4：PCI-eパススルー出来ない（重症度：極高！）

なんやかんやでいろいろありましたが、Proxmox VEも動くようになり、各仮想計算機もインポートすることで
元の環境を取り戻しつつあります。
ここまで3日かかりました。
すでに休日最終日の月曜。
**目は死んでいます。**

でもあとは天国が待っています。
無事、各仮想計算機が動き始めました。
しかし、1台だけ動かない仮想計算機が…

一番大事な**録画サーバ**です。
これがなければ全サーバVPSに移行してたと言っても過言ではないくらい、大事にしているサーバです。
**これが動かない。**
これには~~悪魔~~菩薩のようだと言われてきた私もさすがに激おこです。

詳しく見ていると、ちなみにUSBパススルーはちゃんと動いているようです。
どうもその下のPT3をPCI-eパススルーするための設定項目でエラーが発生しているようでした。
確かに、試しにPCI-eパススルー機器を設定項目から削除すると普通に起動します。
しかしそれでは機能が果たせません。

ここで再度機器を追加しようとすると、以下のエラーが。

<img width="608" alt="iommu-error.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217770/e63b18e5-5933-c4c4-8107-9adb5b7667d7.png">

**えっ**

> No IOMMU detected, please activate it.See Documentation for further information.

**いやいや**

ちゃんとUEFIでIOMMU使うように設定しましたよ？
ちゃんとgrubに追記しましたよ？```amd_iommu=on```って。

まさか…

> BIOSのバージョンが1.80までは動いたけど、それより上だとIOMMUが失敗するっぽい？（すごいテキトーな意訳）
> *[Asrock B450-Pro4 and B450M-Pro4 Broken IOMMU since BIOS 3.10. AGESA issue?](https://www.reddit.com/r/Amd/comments/d7k7s8/asrock_b450pro4_and_b450mpro4_broken_iommu_since/)*

**はぁ？！**
**買った時点ですでに3.40だったんですけどッ！！！**
**あーしのハートは爆発寸前ッッ！！！**

…
とりあえず落ち着きます。
今使っている ASRock DeskMini H310はBIOSのダウングレードが出来ました。
きっと同じ会社なので、ダウングレードもできるはず！

>  Asrock's support site gives you a warning that you can't downgrade after flashing to 3.10 so I'm stuck with this now.（意訳する気力を失っている）
> [Asrock B450 Pro4 - Don't update BIOS!](https://www.reddit.com/r/VFIO/comments/bkdy3r/asrock_b450_pro4_dont_update_bios/)

**無慈悲！**
**ただただ無慈悲ッ！！**

…
とりあえず落ち着きます。
とすると、取れる手段は3つ。

1. ホストProxmox VEを録画サーバとしても使う。
2. ホストProxmox VEに録画機能だけをつけて、フロントエンドを仮想計算機に任せる。
3. IOMMUが使えるバージョンの他のマザーボードを探す。 
4. PT3を諦める。

1番目はProxmox VEの仮想基盤としての機能を汚してしまいます。
ホストには仮想基盤とストレージでいて欲しい。
2番目は1番目よりマシですが、はやり躊躇があります。
やりたくありません。
3も大変です。
どうもASRock B450 Pro4だけでなく、他社のマザーボードでもAGESAのバージョンが新しいと
同様の問題が発生するようです。
BIOSのバージョンを指定して品物を探すなんて、秋葉原ならともかく地方民には不可能です。

なので、4番目の手段を取りました。
[Plex PX-Q3PE](http://www.plex-net.co.jp/product/px-q3pe4/)です。
現状、USBパススルーは機能しています。
PX-Q3PEはPCI-e 1レーンに挿すタイプですが、実際の通信はUSBケーブルをマザボ上のUSBコネクタに挿して
USBで行います。
USBだけを使う外付けタイプの[PX-Q3U4](http://www.plex-net.co.jp/product/px-q3u4/)もありこちらのほうが2,000円ほど安いのですが、ネット上では
排熱に難があるとのもっぱらの噂です。
いまのところ PCI-e 1レーンには余裕がありますし、PX-Q3PE4にしました。

これで無事（？）、必要な機能を取り戻すことができました。
**連休+数日を犠牲にして…**

## 2020/10/20追記
どうしてもハードウェアエンコードの実装のために[NVIDIA Quadro P400](https://www.elsa-jp.co.jp/products/detail/quadro-p400/)をパススルーしたかったため、再び沼に飛び込みました。
そこで、もしかしたら昔ながらの方法を使えばダウングレード出来るかもと思い、調べたら**ありました**。
https://www.youtube.com/watch?v=ZzqwjVDKAnU
上述の動画の方法で無事BIOSのダウングレードが出来ました。
でもこの先ずっと古いBIOSを使い続けるのも悲しいので、思い切って新しいマザボを購入。
買ったのは[MSI X470 Gaming Pro](https://jp.msi.com/Motherboard/support/X470-GAMING-PRO)です。
X470系チップセットの中でも比較的お手頃な価格で手に入るこのマザーボードに変えたところ、**なんの苦労も無くPCI-eパススルーが動きました**。
AGESAのバージョンが新しくても、ちゃんとPCI-eパススルーするマザボもあるようです。
**カネのちから**でX470に乗り換えれば解決しました(ヽ´ω`)


# まとめ

ただの愚痴みたいになってしまいました。
システム移行前にかなり調べたつもりではあったのですが、消えない心の傷を負ってしまいました。
みなさんも気をつけましょう！