ProxmoxとOpenmediavaultで仮想NASを作成する

ProxmoxとOpenmediavaultで仮想NASを作成する

この記事では、「NASとは何なのか?」から「なぜ仮想で作成するか?」までを考え、その構築方法を学べます。

NASとは何か?

NASはNetwork Attached Storageという名の通り、ネットワークに接続されたデータ保存領域のことだ。

昔は一台ごとのPCのHDDの量が少なかったことから、外部記憶メディアに保存することが多かった。しかし、学校や企業では人が多く、データも多種多様なため、個人ごとにデータを管理するのは相応しくなく、一元管理が難しかった。その為、ファイルサーバーと呼ばれるLANの中に設置されたサーバーにデータを保存するシステムが使われることが多かった。

このファイルサーバーは汎用サーバーにこの機能をもたせて使用されることが多いが、後になってNASが台頭する様になった。前者はファイル管理・ユーザー認証・構築・管理などの専門知識が必要とされたが、後者はファイル共有に特化しており管理用のWebインターフェースや一体型の専用ハードウェアなども存在する。

その為、個人でも多くのデータを持ち管理する様になった近年NASが有名になってきている。

DroxpoxやGoogle Drive、OneDrive、Boxなどはインターネットを越えた先にデータを配置するオンラインストレージだが、NASの場合はLAN内に設置される。写真やビデオなどデータ容量が増えて、インターネット経由の速度では待たされることが多い。そのため、圧倒的に速い速度で使用できるNASは一部のユーザーにはなくてはならないものだ。

なせ物理NASではなく仮想NASなのか?

物理的なNASは、専用ハードウェアで見ると1-3万円程度の家庭用の安価なものから、5-10万円程度の障がいに強いモデル、プロ用の10万を軽く超えるモデルまで色々ある。

ギーク系ユーチューバー などがペタバイト級(1,000TB以上)というものもを紹介していたりするが、いわゆる数十TBのモデルになると既製品でも自作でも20万円以上は軽くかかってくる。

ホームラボでちまちま開発や勉強を行う一般ギークユーザーの我々には、業務用に使用できるようなモデルは手が出ないし、必要もない。しかし、サーバーを複数扱う場合、NASは必要不可欠だ。

物理モデルの既製品は、容量が決まっていて簡単に増やしたりできない。そもそも、色々なOSから試す際に不具合が出たからとポンポン買い直すこともできない。

では、自作PCをNASにするかと言われると、データ保存のためだけにPCを1台取り分けるなんてこともできない。できるだけ、省スペースで安価で、簡単に移設したり改造したりできなければならない。

そこで、仮想NASの登場となる。仮想NASはNAS用OSをプライベートクラウド上のVMにインストールし、HDDをアタッチして使用する。仮想HDDでもいいが、Proxmoxでは内蔵物理HDD、USB外付けHDD、RAIDカードなどをアタッチすることで、より本物のNASに近づく。

例えば、ストレージはUSBのHDDを使用しNASにアタッチする。そうすると、ホストが壊れたり、NAS用のOSを入れ替える場合、デタッチして新しいNASにアタッチし直せばデータ移行の完了となる。また、外道と言われるかもしれないがFAT32やNTFSでフォーマットしておけば、HDDを仮想PCから外して持ち出したり、Windows PCに接続すればそのまま外付けHDDとして使うことができる。

そのため、既存の資産を有効利用できるので、ホームラボユーザーにとって、仮想NASは構築しておいて損はない代物なのだ。

ホストはProxmox一択か?

プライベートクラウドは、多くのユーザーが使っていて、長くサポートされているものが良い。日本ではWMwareのESXiがよく使用されていたようだが、無料版が無くなったり、自分でコピーを持っていたとしてもNICが合わないとインストールできないなど、ハードウェアを選ぶので使いづらい。また、OpenStackやOpenNebulaなどのプロ向けクラウド製品もあるが、個人で使うには面倒すぎる。

Proxmoxは世界中のホームユーザーから愛されており、企業の社内ラボなどでも十分に使用できうる機能があり、海外では実際に使用されているところも多い。また、何よりオープンソースで開発が活発にされており、本家の情報も充実している。

個人的にはProxmox一択な気がするが、他にも選択肢があると思おう人はぜひX(旧Twitter)などから教えて欲しい。

仮想NASの構成

この記事ではProxmoxベースで話を進めるが、基本的な考え方はどの仮想基盤を使っても構築方法は変わらないことを覚えていてほしい。

NASには、単純なNAS機能しかないものもあれば、アプリや仮想マシンを入れて機能拡張できるものもある。今回はベーシックなところを紹介するため、NAS機能のみを使用するものとする。

以下は仮想NASの構成だが、難易度が低く、安価で進められるものを高い順位とする。

  1. 仮想HDD
  2. 物理HDD(内蔵)
  3. 物理HDD(USB外部接続)
  4. RAIDカードと物理HDD(内蔵)

私は、急ぎで必要な時は1番を使用することもあるが、基本的には2番か3番を使用する事が多い。なせなら、Proxomox用のHDDは高速に動かしたいのでSATAのHDDまたはNVMeのHDDを使用している。GB単価を考えるとデータの読み出しには物理HDDがコスパ最強だからだ。

物理HDDを使用する別の理由は、データ転送速度だ。LANの中は一般家庭だと1Gbpsが普通で、速い人で2.5Gbps、ギークな人で10Gbpsだろう。1Gbpsは理論値で125MB/秒、10Gpsで1250MB/秒の転送速度しかないのだ。SATAのSSDだと500MB -600MB/秒、NVMeのSSDだと2000-7000MB/秒の転送速度がある。これをLAN経由でデータ転送する、つまりNASとPCの間でネットワーク経由でPCにファイルを読み書きした場合、保存デバイスが実際に出せるスピードの10分の1のスピードも出せない。RAIDでさらに速度を上げたところで意味がないという事がわかる。

HDDの方が安く、寿命も長い。また、RAIDで転送速度を上げてやればちょうどいい転送速度になる事がわかる。それで、NASにはHDDを使用するのが最適なのだ。使ったとしても、SATAのSSDであって、NVMeなど使用してもお金が無駄になるだけだ。

もちろん、データセンターのように光ファイバーで40Gbps(5000MB秒)の転送速度が使えるような環境であれば話は変わってくる。

仮想NASのOS選定

世の中にはさまざまなファイル共有用のミドルウェアが存在するが、今回はNASなのでNAS専用OSで考える。個人的にはOpenMediaVault一択だが、選択肢を上げると以下のようになる。

  1. OpenMediaVault
  2. TrueNAS Core
  3. TureNAS Scale
  4. Unraid

仮想環境で使うなら、OpenMediaVaultで十分で、それ以降は専用の物理PCを用意することをお勧めする。もちろん、仮想基盤が64コア以上、メモリが128GB以上あるような環境で、PCIバスにも余裕が十分あれば仮想でも問題はない。以下に簡単な説明とリンクを記載する。

OpenMediaVault

シンプルで安定しており、余計な機能がない。ZFSには非対応。RAID使わない人向け。

CPUは2-4コア、メモリは2−4GBで十分。

https://www.openmediavault.org/

TrueNAS Core

高速でZFSを扱える。SSDキャッシュを使用したりでき、拡張に自由度が高い。企業用として十分に使用できる。アプリや仮想マシンは使えない。RAIDベースの場合、HDD容量を合わせる必要がある。

CPUは4-8コア、メモリは8−16GB。RAIDベースで考える。

https://www.truenas.com/truenas-core/

TureNAS Scale

TrueNAS Coreに加えて、拡張性に優れ、アプリや仮想マシンも扱える。K8sやdockerも使用できる。

CPUは8-32コア、メモリは16−32GB。RAIDベースで考える。

https://www.truenas.com/truenas-scale/

Unraid

RAIDではなく、専用のシステムでデータを保護する。HDD台数が増えるとライセンス数が変わる。HDDのサイズを合わせる必要がない。気軽に容量を増やす事ができる。仮想マシンも扱える。

CPUは4-16コア、メモリは4-32GB

https://unraid.net/

Proxmoxでのパススルー設定

大前提として、Proxmoxでパススルーの設定がされている必要があるため、Proxmoxのインストールの記事を参考にハードウェアのパススルーの設定を行って欲しい。

その後、以下のいずれかの方法でHDDをパススルーさせることができる。

USBの外付けHDDのパススルー

USBの外付けHDDをProxmoxに接続します。その際はUSB3.0またはその上位互換のポートに接続します。そして、ホストを再起動します。

次に、WebポータルからProxmox本体のCLIに入るか、外部からSSHで接続する。

CLIで確認すると、USBでUSBHDDが認識される。認識されている場合は以下の用にHDDが追加されていることが分かるはずだ。

/dev/sdb: 465.76 GiB

「lsblk」コマンドで接続されているドライブを確認する。ここでは、OSがインストールされているのはsdaで、sdbがUSBで接続した500GBのHDDとなる。ちなみに、このテストサーバーではNVMeドライブにWindowsを入れていつでも使えるようにしてあるので、nvme0n1も認識されている。

root@pve2:~# lsblk -o +MODEL,SERIAL
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT MODEL                   SERIAL
sda                            8:0    0   1.8T  0 disk            Samsung_SSD_870_QVO_2TB S5SUNF0R500380J
├─sda1                         8:1    0  1007K  0 part
├─sda2                         8:2    0   512M  0 part /boot/efi
└─sda3                         8:3    0   1.8T  0 part
  ├─pve-swap                 253:0    0     8G  0 lvm  [SWAP]
  ├─pve-root                 253:1    0    96G  0 lvm  /
  ├─pve-data_tmeta           253:2    0  15.8G  0 lvm
  │ └─pve-data-tpool         253:4    0   1.7T  0 lvm
  │   ├─pve-data             253:5    0   1.7T  1 lvm
  │   ├─pve-vm--306--disk--0 253:6    0    64G  0 lvm
  │   ├─pve-vm--306--disk--1 253:7    0     4M  0 lvm
  │   ├─pve-vm--306--disk--2 253:8    0     4M  0 lvm
  │   ├─pve-vm--400--disk--0 253:9    0    32G  0 lvm
  │   ├─pve-vm--401--disk--0 253:10   0    32G  0 lvm
  │   ├─pve-vm--402--disk--0 253:11   0    32G  0 lvm
  │   ├─pve-vm--403--disk--0 253:12   0    32G  0 lvm
  │   ├─pve-vm--410--disk--0 253:13   0    32G  0 lvm
  │   ├─pve-vm--411--disk--0 253:14   0    32G  0 lvm
  │   ├─pve-vm--412--disk--0 253:15   0    32G  0 lvm
  │   ├─pve-vm--413--disk--0 253:16   0    32G  0 lvm
  │   ├─pve-vm--304--disk--0 253:17   0    32G  0 lvm
  │   ├─pve-vm--420--disk--0 253:18   0    32G  0 lvm
  │   ├─pve-vm--421--disk--0 253:19   0    32G  0 lvm
  │   ├─pve-vm--422--disk--0 253:20   0    32G  0 lvm
  │   ├─pve-vm--423--disk--0 253:21   0    32G  0 lvm
  │   └─pve-vm--430--disk--0 253:22   0    32G  0 lvm
  └─pve-data_tdata           253:3    0   1.7T  0 lvm
    └─pve-data-tpool         253:4    0   1.7T  0 lvm
      ├─pve-data             253:5    0   1.7T  1 lvm
      ├─pve-vm--306--disk--0 253:6    0    64G  0 lvm
      ├─pve-vm--306--disk--1 253:7    0     4M  0 lvm
      ├─pve-vm--306--disk--2 253:8    0     4M  0 lvm
      ├─pve-vm--400--disk--0 253:9    0    32G  0 lvm
      ├─pve-vm--401--disk--0 253:10   0    32G  0 lvm
      ├─pve-vm--402--disk--0 253:11   0    32G  0 lvm
      ├─pve-vm--403--disk--0 253:12   0    32G  0 lvm
      ├─pve-vm--410--disk--0 253:13   0    32G  0 lvm
      ├─pve-vm--411--disk--0 253:14   0    32G  0 lvm
      ├─pve-vm--412--disk--0 253:15   0    32G  0 lvm
      ├─pve-vm--413--disk--0 253:16   0    32G  0 lvm
      ├─pve-vm--304--disk--0 253:17   0    32G  0 lvm
      ├─pve-vm--420--disk--0 253:18   0    32G  0 lvm
      ├─pve-vm--421--disk--0 253:19   0    32G  0 lvm
      ├─pve-vm--422--disk--0 253:20   0    32G  0 lvm
      ├─pve-vm--423--disk--0 253:21   0    32G  0 lvm
      └─pve-vm--430--disk--0 253:22   0    32G  0 lvm
sdb                            8:16   0 465.8G  0 disk            Elements                015107558899
nvme0n1                      259:0    0 238.5G  0 disk            NE-256-TG               9010107600020
├─nvme0n1p1                  259:1    0   100M  0 part
├─nvme0n1p2                  259:2    0    16M  0 part
├─nvme0n1p3                  259:3    0 237.7G  0 part
└─nvme0n1p4                  259:4    0   626M  0 part

これで、sdbのシリアルが「015107558899」であることが分かった。

これをProxmoxでパススルーする。

次に、デバイスのIDをディレクトリで確認する。

root@pve2:~# ls /dev/disk/by-id
ata-Samsung_SSD_870_QVO_2TB_S5SUNF0R500380J
ata-Samsung_SSD_870_QVO_2TB_S5SUNF0R500380J-part1
ata-Samsung_SSD_870_QVO_2TB_S5SUNF0R500380J-part2
ata-Samsung_SSD_870_QVO_2TB_S5SUNF0R500380J-part3
dm-name-pve-root
dm-name-pve-swap
dm-name-pve-vm--304--disk--0
dm-name-pve-vm--306--disk--0
dm-name-pve-vm--306--disk--1
dm-name-pve-vm--306--disk--2
dm-name-pve-vm--400--disk--0
dm-name-pve-vm--401--disk--0
dm-name-pve-vm--402--disk--0
dm-name-pve-vm--403--disk--0
dm-name-pve-vm--410--disk--0
dm-name-pve-vm--411--disk--0
dm-name-pve-vm--412--disk--0
dm-name-pve-vm--413--disk--0
dm-name-pve-vm--420--disk--0
dm-name-pve-vm--421--disk--0
dm-name-pve-vm--422--disk--0
dm-name-pve-vm--423--disk--0
dm-name-pve-vm--430--disk--0
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf21WiyH2K9DblbOTw97XfsN4I6YiXenqy9
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf28Q1qc4dZGzFJgNBcvMPJoqqTJKQnRWKz
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf29GJxIzZETorBP53eplpJIZA1dHCqQy3l
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2cFcnILaKf1gqsRheQhZlxHk3XYMY4Wk9
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2f9MBYnBAy2x0RPufntl6sLdP6GkAneID
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2hAny8w9hNs0NXAdyHxqNOwiRY01MZIpj
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2I78XGRbt6REUju5klqclVbJVDMSDyXmH
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2jwN0mxrm4WGh2Xnm5bwOg8txntRvLrRs
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2jz4Vt3jzvHdR9IEi0xHpmvMjgLfrKCfo
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2KlQeMESaBMt2ZoW6u7XAZRefJNhDc3B4
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2Mb5N6Mf6sBJZ9o39ODv3eIMauh0rcgkC
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2ndqdP5atx713S1x3NczL9H32zSdIMpHj
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2O4toX22AKn5bRowg1eaMLB96FnvgD0u8
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2OqFm7JEMjKoUkLzYL9HC1y4AJYpP9QwW
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2QnbYm7kOq4g9pXkq1ug51M4QfWxG47ys
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2rBN1VfJdYJBFf6NdXTSjqpjUR0BS1Y1v
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2VsMFw8YTexbVEr4Evf8t9cTEPA2red9n
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2XWTaTeGVhduxgM3XFCxMkTEaEzbTeQlx
dm-uuid-LVM-SwzskKpDMGAleQMYjyuBCqCoIEAYhSf2xZZxbmqA5zLUHxwmZXcTeFKpia9fh4mp
lvm-pv-uuid-gXjQ3m-oZ5a-c639-pa18-P8Gi-L7Yq-tf91GR
nvme-eui.00000000000000000000010000000000
nvme-eui.00000000000000000000010000000000-part1
nvme-eui.00000000000000000000010000000000-part2
nvme-eui.00000000000000000000010000000000-part3
nvme-eui.00000000000000000000010000000000-part4
nvme-NE-256-TG_9010107600020
nvme-NE-256-TG_9010107600020-part1
nvme-NE-256-TG_9010107600020-part2
nvme-NE-256-TG_9010107600020-part3
nvme-NE-256-TG_9010107600020-part4
usb-WD_Elements_015107558899-0:0
wwn-0x5002538f41502841
wwn-0x5002538f41502841-part1
wwn-0x5002538f41502841-part2
wwn-0x5002538f41502841-part3

MODELとSERIALが一致地しているものを見つける「usb-WD_Elements_015107558899-0:0

これを、VM上にポートとして追加してあげればよい。以下の例でいうと、「scsi0」がバーチャルハードディスクのポートになっている。

では、106番のVMにscsi1として、HDDを追加してみる。

root@pve2:~# qm set 106 -scsi1 /dev/disk/by-id/usb-WD_Elements_015107558899-0:0
update VM 106: -scsi1 /dev/disk/by-id/usb-WD_Elements_015107558899-0:0

次に、proxmoxのWEB管理画面を確認してみると、scsi1が追加されていることが分かる。

これで、USBHDDをVMに接続することができた。

あとは、VMを実行して、仮想HDDにOSをインストールする。データ用のHDDは物理HDDを指定するといった感じだ。

内蔵 HDDのパススルー

内臓のHDDをSATAポートなどにつないで、ホストを起動します。

次に、WebポータルからProxmox本体のCLIに入るか、外部からSSHで接続する。

次に、「lsblk」コマンドで接続されているドライブを確認する。ここでは、OSがインストールされているのはsdaで、追加のsdb、sdcが対処のHDDになる。

root@pve:~# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                            8:0    0 931.5G  0 disk 
├─sda1                         8:1    0  1007K  0 part 
├─sda2                         8:2    0   512M  0 part /boot/efi
└─sda3                         8:3    0   931G  0 part 
  ├─pve-swap                 253:0    0     8G  0 lvm  [SWAP]
  ├─pve-root                 253:1    0    96G  0 lvm  /
  ├─pve-data_tmeta           253:2    0   8.1G  0 lvm  
  │ └─pve-data-tpool         253:4    0 794.8G  0 lvm  
  │   ├─pve-data             253:5    0 794.8G  1 lvm  
  │   └─pve-vm--100--disk--0 253:6    0    32G  0 lvm  
  └─pve-data_tdata           253:3    0 794.8G  0 lvm  
    └─pve-data-tpool         253:4    0 794.8G  0 lvm  
      ├─pve-data             253:5    0 794.8G  1 lvm  
      └─pve-vm--100--disk--0 253:6    0    32G  0 lvm  
sdb                            8:16   0 465.8G  0 disk 
└─sdb1                         8:17   0 465.8G  0 part 
sdc                            8:32   0 465.8G  0 disk 
├─sdc1                         8:33   0   200M  0 part 
└─sdc2                         8:34   0 465.6G  0 part

このままでは、SATAコントローラー上のドライブの並びが変わったりすることもある。(有効無効を切り替える、ポートを差し替えるなど)

なので、シリアル指定が一番良い。シリアルを見るために、オプションを足して、コマンドを再実行する。

root@pve:~# lsblk -o +MODEL,SERIAL
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT MODEL             SERIAL
sda                            8:0    0 931.5G  0 disk            CT1000MX500SSD1   2052E4E1E84C
├─sda1                         8:1    0  1007K  0 part                              
├─sda2                         8:2    0   512M  0 part /boot/efi                    
└─sda3                         8:3    0   931G  0 part                              
  ├─pve-swap                 253:0    0     8G  0 lvm  [SWAP]                       
  ├─pve-root                 253:1    0    96G  0 lvm  /                            
  ├─pve-data_tmeta           253:2    0   8.1G  0 lvm                               
  │ └─pve-data-tpool         253:4    0 794.8G  0 lvm                               
  │   ├─pve-data             253:5    0 794.8G  1 lvm                               
  │   └─pve-vm--100--disk--0 253:6    0    32G  0 lvm                               
  └─pve-data_tdata           253:3    0 794.8G  0 lvm                               
    └─pve-data-tpool         253:4    0 794.8G  0 lvm                               
      ├─pve-data             253:5    0 794.8G  1 lvm                               
      └─pve-vm--100--disk--0 253:6    0    32G  0 lvm                               
sdb                            8:16   0 465.8G  0 disk            ST3500414CS       5VVKZML7
└─sdb1                         8:17   0 465.8G  0 part                              
sdc                            8:32   0 465.8G  0 disk            ST500LT012-9WS142 W0V6HSQA
├─sdc1                         8:33   0   200M  0 part                              
└─sdc2                         8:34   0 465.6G  0 part

今回は、sdbのシリアルが「5VVKZML7」をパススルーしてみる。

次に、デバイスのIDをディレクトリで確認する。

root@pve:~# ls /dev/disk/by-id
ata-CT1000MX500SSD1_2052E4E1E84C        dm-name-pve-root                                                              wwn-0x5000c5005ff1d96e-part2
ata-CT1000MX500SSD1_2052E4E1E84C-part1  dm-name-pve-swap                                                              wwn-0x5000c5006aafea65
ata-CT1000MX500SSD1_2052E4E1E84C-part2  dm-name-pve-vm--100--disk--0                                                  wwn-0x5000c5006aafea65-part1
ata-CT1000MX500SSD1_2052E4E1E84C-part3  dm-uuid-LVM-ywlM4ClRAaDb2oFXMoHoPWdkd4aDZJbYwoOLqu737lNULP1zG1991YW1AFChahic  wwn-0x500a0751e4e1e84c
ata-ST3500414CS_5VVKZML7                dm-uuid-LVM-ywlM4ClRAaDb2oFXMoHoPWdkd4aDZJbYyWPxFM0TXehLJrWVVcGdUNbNtbEpTLy7  wwn-0x500a0751e4e1e84c-part1
ata-ST3500414CS_5VVKZML7-part1          dm-uuid-LVM-ywlM4ClRAaDb2oFXMoHoPWdkd4aDZJbYztrI43P59iiRxt7jQzLpb7tGptM3Rcnn  wwn-0x500a0751e4e1e84c-part2
ata-ST500LT012-9WS142_W0V6HSQA          lvm-pv-uuid-iHj15N-dltv-z2F7-x2W8-niPK-gVLK-n1KgJU                            wwn-0x500a0751e4e1e84c-part3
ata-ST500LT012-9WS142_W0V6HSQA-part1    wwn-0x5000c5005ff1d96e
ata-ST500LT012-9WS142_W0V6HSQA-part2    wwn-0x5000c5005ff1d96e-part1

この一覧では、「ata-ST3500414CS_5VVKZML7」ということになる。

これを、VM上にポートとして追加してあげればよい。以下の例でいうと、「scsi0」がバーチャルハードディスクのポートになっている。

では、100番のVMにscsi1として、HDDを追加してみる。

root@pve:~# qm set 100 -scsi1 /dev/disk/by-id/ata-ST3500414CS_5VVKZML7
update VM 100: -scsi1 /dev/disk/by-id/ata-ST3500414CS_5VVKZML7

次に、proxmoxのWEB管理画面を確認してみると、scsi1が追加されていることが分かる。

これで、物理的なHDDをVMに接続することができた。

あとは、VMを実行して、仮想HDDにOSをインストールする。データ用のHDDは物理HDDを指定するといった感じだ。

PCIカードのパススルー

PCI-Expressなどのカードで、SATAまたはSASインターフェースカード、RAIDカードなどを接続して、ホストを起動します。その際必要なHDDはつなぎ込んでおきます。

次に、Webポータルに行き、PCIバスへSASコントローラーなどを接続していれば、VMのハードウェアのページから、PCIデバイスを追加することができる。

以下のように一覧が表示される。※この記事を作成する時にはSASカードが手元に無かったので、一覧の中にはありませんのであしからず

これで、PCIカードがVMにアタッチされれば、あとは物理PCで行うのと同じ作業をすればいいだけとなる。

なお、マザーボードのSATAポートなどに直接HDDを接続している場合は、マザーボードのSATAコントローラーなどはパススルー出来ないので、「内臓HDDのパススルー」の部分を参照して欲しい。

HDDで注意すること

ハードディスクは物理デバイスで、ボールベアリング、磁気ディスク、モーターなどを使用しており、経年劣化する。古ければ古いほどデータが失われる可能性は上がる。

そのため、使用するなら壊れる可能性を考えてRAIDを組んだり、NAS専用のHDDを購入するべきだ。通常のPC用は何度も電源を入れて止めたり動かしたりするように作られている。しかしサーバー用またはNAS用のHDDは24時間365日稼働し、数年間動かしっぱなしになることを前提で作られている。

古いHDDは動くかもしれないが、絶対に消えたら困るデータの保管には使用してはいけない。というのは、特にHDDは一度でも回り始めてから、止めた後に長期間動かしていないと動作しなくなる可能性が高い。

以前に以前に250GBの動かなくなったHDDのデータ復旧を専門の会社に見積もった事がある。1台で20万円を軽く超えてきた。そのため、物理障害が発生して専門業者に復旧を依頼することを考えるくらいなら、余分に1台買ってミラーリングした方が断然安いことになる。

自分が求めるストレージのレベルを見極める

ここまでで、NASは仮想VMで構築した方がコスパが良いこと、物理HDDを使用することのメリット、どうのようにパススルーさせるかを考えることができた。

しかし、まずは自分が何のためにNASを使用するのかを考えて欲しい。

データをどこに置くのか。オンライン上なのかLAN上なのか。

どの程度の転送速度が必要なのか。LANの転送速度で足りないのならUSBで直接接続が望ましいので、NASという選択肢にならない。それとも、LANを10Gbpsにアップグレードさせて、湯水の様にお金をつぎ込んでもNASで使用したいのか。

データの保護はどの程度必要なのか。消えてもいいのか、消えたら困るのか。消えたら困る場合はミラーリング、RAID5、RAID10などを考えることになる。

物理HDDを使う場合、どの程度速度が必要なのか。複数のHDDでデータを分けて書きこんで速度を上げる必要があるのか。

容量はどの程度必要なのか。

事故や災害に対しては、どの程度保護したいのか。例えは、家事や洪水が起きた場合、自宅に物理機器を置いていれば、データはあきらめざるを得ない。

ただ、ネットワーク上にデータがあればそれで良くて、速度も容量も特に気にしないのであれば、仮想NASで仮想HDDを使うということになるが、そうでなければ上記の点を考慮して、自分に最適なNASを選んで欲しい。

最後に

この記事ではOpenMediaVaultを推してはいるが、別にどのNAS用OSを使っても問題はない。

また、OpenMediaVaultでのNAS構築方法はググればいくらでも記事は出てくるので、この記事では記載しない。それで、自分に合うものを検索して参照して欲しい。

それよりも問題になるのは、最近流行りの仮想基盤であるProxmoxを使って、どうやってNASを構築できるのか、HDDはどのように接続するのかという情報が日本語でほとんど見つからなかったので、この記事を書くことにした。私は基本的にアメリカやドイツのエンジニアのYoutubeを参照することが多く、それらで得た知識を日本語で公開している。

現在、ESXiが新たに無料では構築できなくなったので、日本でもProxomoxに流れている人が多いと思う。それで、少しでも多くのエンジニアの助けになれば幸いだ。