このページの本文へ

FIXER Tech Blog - Development

Proxmox VE+OpenMediaVaultで自宅用NASを作ってみた

2025年01月15日 10時00分更新

文● 中村 律希/FIXER

  • お気に入り
  • 本文印刷

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「ミニPCにProxmox VEをインストールしてサーバ学習環境を整えてみた 」を再編集したものです

 本記事はFIXER Advent Calendar 2024(FIXER Advent Calendar 2024 ~ ルーキー編 〜)12月16日の記事です。
※ この記事は個人でも投稿予定です。

はじめに

 これまでノートパソコンでProxmox VEを動かしていましたが、ミニPCを購入したためそちらに移行しました。

 本記事ではミニPCにProxmox VE 8.2をインストールして外付けHDDをパススルーし、OpenMediaVaultでNASを構築するところまでの「やってみた」系の記事になります。

※ 2024年11月現在、Proxmox VE 8.3がリリースされましたがインストール当時の8.2を対象バージョンとしています。

動作環境

 今回、Proxmox VEのインストールにあたり事前に用意したものは以下の通りです。
 
・ミニPC
・Proxmox VE 8.2のisoファイルを焼いたUSB(今回はVentoyを使用)
・外付けHDD
 

注意事項

 本来はOSをインストールする過程が存在するのですが、本記事では詳細を割愛させていただきます。

 必要に応じて公式のインストールガイドをご参照ください。

 なおOSのインストールなどによって生じたいかなる問題も責任は負いかねますので、あらかじめご了承ください。

Proxmox VEとは

 Proxmox Virtual Environment(Proxmox VE)はオープンソースの仮想化プラットフォームです。

 仮想マシン型のKVMとコンテナ型のLXCをサポートしており、Web UI上から操作できる。という特徴を持ちます。

 ノートパソコンで動かしていた時にはLXCにGrafanaやPrometheusをインストールして監視をしたり、ラズパイで構築していたK3sサーバーを立てようと試行錯誤したりしていました。

OpenMediaVaultとは

 OpenMediaVaultは主に家庭環境や小規模なホームオフィスで使用するように設計されたNASシステムです。

 これまではラズパイにOpenMediaVaultをインストールし、NASとして利用していました。

 今後はProxmox上のVMで動作させていきます。

(ログイン画面がとてもかっこいい…)

【省略】 Proxmoxのインストール

 本記事では詳細を割愛させていただきます。

 なおインストール時は以下のようになります。

 インストールが完了すると、WebUIが8006番ポートで動作します。

 今回の場合はミニPCのIPアドレスを192.168.0.200にしたためhttps://192.168.0.200:8006にアクセスするとログインウィンドウが表示されます。

 インストール時に設定したパスワードを入力することでログインできます。

※言語を変更すると入力内容が消えてしまうため、日本語に変更する場合は認証情報を入力する前に行う必要があります。

 インストール直後はエンタープライズ用のリポジトリになっているため、サブスクリプションキーが不要なリポジトリに変更します。

 ノードのサイドバーにあるアップデートからリポジトリを選択します。

 追加ボタンを押下し、リポジトリに「No-Subscription」を選択して追加します。

VMの作成

 OpenMediaVaultはVM上で動かします。

 VMを作成する方法はいくつかありますが、今回はCloud-initイメージをテンプレート化し、それをクローンする形で作成します。

 今回はDebianが提供しているクラウドイメージを使います。

 ノードのサイドバーにあるシェルから次のコマンドを実行します。

root@pve:~# wget https://cdimage.debian.org/images/cloud/bookworm/20241110-1927/debian-12-generic-amd64-20241110-1927.qcow2


 クラウドイメージのダウンロードが完了したら、VMを作成してクラウドイメージをアタッチさせます。

# VM作成
root@pve:~# qm create --name debian-template2 9002 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virt
io-scsi-pci
# クラウドイメージのアタッチ
root@pve:~# qm set 9002 --scsi0 local-lvm:0,import-from=/root/debian-12-generic-amd64-20241110-1927.qcow2

 次にCloud-initドライブを追加します。

root@pve:~# qm set 9002 --ide2 local-lvm:cloudinit


 ブート順の変更とxterm.jsを使用するための設定を行なって、テンプレート化前の作業は完了です。

 なお2つ目のコマンドは特定のイメージで動作しない場合もあるようで、その場合はデフォルトに戻す必要があります。

For many Cloud-Init images, it is required to configure a serial console and use it as a display. If the configuration doesn’t work for a given image however, switch back to the default display instead.
引用元


# ブート順の変更
root@pve:~# qm set 9002 --boot order=scsi0
# シリアルコンソールの構成
root@pve:~# qm set 9002 --serial0 socket --vga serial0

 最後にこのVMをテンプレート化して、そこからOpenMediaVault用のクローンVMを作成します。

root@pve:~# qm template 9002
root@pve:~# qm clone 9002 123 --name openmediavault2

 これでVMが完成しました。

 サイドバーのCloud-initメニューからユーザー名の設定などができるようになったためお好みで設定します。

 今回は、ユーザー名・パスワード、IP構成を設定しました。

 クラウドイメージのアタッチ時にディスク容量を設定しなかったため、現在は自動的に設定されたディスク容量になっています。

 OpenMediaVaultをインストールするには少ないためリサイズをします。
 
 サイドバーのハードウェアメニュー内にて、ハードディスク(scsi0)を選択します。

 画面上部にあるディスクの動作ボタンからリサイズを押下すると、どれだけディスク容量を増分させるか入力するモーダルが表示されるため、今回は2GiBほど増やします。

外付けHDDのパススルー

 OpenMediaVaultのVMに外付けHDDをパススルーします。

※すでに構築済みのVMにパススルーしているため、実際にはコマンドを実行していません。


# 上記ドキュメントから抜粋
# ディスクIDの取得
find /dev/disk/by-id/ -type l|xargs -I{} ls -l {}|grep -v -E '[0-9]$' |sort -k11|cut -d' ' -f9,10,11,12
/dev/disk/by-id/ata-ST8000DM004-2CX188_ZCT1DNY1 -> ../../sda
/dev/disk/by-id/wwn-0x5000c500c35cd719 -> ../../sda
/dev/disk/by-id/usb-Generic_STORAGE_DEVICE-0:0 -> ../../sdb
/dev/disk/by-id/usb-JMicron_Generic_0123456789ABCDEF-0:0 -> ../../sdc
/dev/disk/by-id/ata-ST2000DX001-1CM164_Z1E783H2 -> ../../sdd
/dev/disk/by-id/wwn-0x5000c500661eeebd -> ../../sdd
# 物理ディスクの追加
qm set 123 -scsi2 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F41BLC

OpenMediaVaultのインストール

 これにてVM側の準備は完了しました。

 画面上部の開始ボタンを押下し、VMが起動したらコンソールからxterm.jsを選択します。

 Cloud-init画面で設定したユーザー情報でログインしたらOpenMediaVaultをインストールします。

 インストールガイドに、

On Raspberry Pi OS the below instructions only partially work. Please refer to a specific installation script

 と、ありますがDebianでも問題なくインストールすることができたため、ここでリンクされているインストールスクリプトを使います。

$ sudo wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

 しばらくするとインストールが完了します。

 無事にインストールできている場合はVMのIPアドレスにアクセスすることでOpenMediaVaultのログイン画面が表示されます。

 ユーザー名にadminを、パスワードにopenmediavaultでログインできます。

What are the default credentials for the UI?
Use the user ‘admin’ and the password ‘openmediavault’ for the first login.
引用元

OpenMediaVaultのセットアップ

※ 以降は今回の記事内で作成したVMではなく、外付けHDDをパススルーしたVMになります。

 OpenMediaVaultのインストールが完了しました。
今回はSambaサーバーをセットアップしてProxmoxのストレージとして追加し、LXCテンプレートをダウンロードしてコンテナを作成するところまで行います。

(当初はNFSサーバーをセットアップしてストレージにする予定だったのですが、アクセス権周りでエラーが発生してうまくいかなかったため断念しました。)

 まずは上記でパススルーした外付けHDDをマウントします。

 サイドバーにあるストレージアコーディオンからファイルシステムを選択します。

 デバイス一覧の上部にある「矢印」ボタンを押下してマウント画面を開きます。

 そこでパススルーしたデバイスを選択し、保存。

 しばらくすると構成の変更を反映させるか確認されるため、変更します。

 続いて、共有フォルダの作成を行います。

 サイドバーのストレージアコーディオンから共有フォルダを選択し、一覧の上部にある「プラス」ボタンを押下して作成画面を開きます。

 共有フォルダの名前をお好みで設定し、ファイルシステムに先ほど追加した外付けHDDのデバイスを選択します。

 パーミッションに問題がない場合はそのまま保存をして構成を変更します。

 次にこの共有フォルダを操作するためのユーザーを作成します。

 サイドバーのユーザーアコーディオンからユーザーを選択し、一覧上部にある「プラス」ボタン作成を押下してユーザーの作成画面を開きます。

 お好みの設定でユーザーを作成したら、一覧画面で先ほど作成したユーザーを選択して、作成ボタンの2つ隣にある「かぎ」ボタンを押下します。

 共有フォルダーのパーミッションを選択する画面が表示されるため「Read/Write」権限を付与します。

 ユーザーの作成とパーミッションの変更を行ったら構成を変更します。

 最後にSambaの設定を行ないます。

 サービスアコーディオン→SMB/CIFSアコーディオン→設定を選択し、設定画面上部にある「有効」のチェックボックスにチェックをつけます。

 次にサービスアコーディオン→SMB/CIFSアコーディオン→共有を選択し、一覧上部にある「プラス」ボタンを選択します。先ほど作成した共有フォルダを選択して保存し、構成を変更します。

 これにてOpenMediaVaultで行う作業は終了です。

 smbで共有フォルダにアクセスすることも、Proxmoxのストレージとして使うこともできるようになりました。

 今回は共有フォルダをProxmoxのストレージとして追加します。

 Proxmox VE WebUIに戻ります。

 データセンターのサイドバーにあるストレージを選択して、追加→SMB/CIFSを押下します。

 モーダルが現れるため、まずは「ID」を入力し、このストレージに保存する「内容」を選択します。

 今回はこのストレージにLXCテンプレートを保存したいため、最低でも「コンテナテンプレート」を選択します。

 続いて、「サーバー」にOpenMediaVaultのIPアドレスを、「ユーザー名」と「パスワード」に先ほど作成したユーザーの情報を入力します。

 すると「Share」にて作成した共有フォルダが選択できるようになります。

 共有フォルダを選択したら追加ボタンを押下してストレージを追加します。

 ストレージの追加が完了しました。

 実際にこのストレージにLXCテンプレートをダウンロードしてコンテナを作成してみます。

 先ほど追加したストレージを選択し、サイドメニューにあるCTテンプレートを選択します。

 画面中央上部にあるテンプレートボタンを押下すると、あらかじめ用意されているコンテナイメージの一覧が表示されます。

 今回はコンテナを作成することが目的なため、適当なコンテナイメージを選択してダウンロードします。

 LXCテンプレートのダウンロードが完了したら、画面上部にある「CTを作成」ボタンを押下します。

 パスワードの入力を求められるため任意のパスワードを入力し、次に進みます。

 テンプレートを選択する画面では追加したストレージと、先ほどダウンロードしたコンテナイメージを選択します。

 あとはお好みの設定をしてコンテナを作成します。

 コンテナの作成が完了するとノード内に新たなコンテナが追加されます。今回の場合はCT102です。

 最後にこのコンテナを起動してアクセスするところまでやってみます。

 サイドバーにあるオプションを選択し、コンソールモードを「tty」から「shell」に変更します。

 その後、画面上部にある開始ボタンを押下してコンテナを起動させます。

 コンテナが起動したらサイドバーにあるコンソールを選択するとコンテナコンソールにアクセスできます。

まとめ

 本記事ではミニPCにProxmox VEをインストールしてサーバー学習環境を整えました。

 Proxmox VEはサーバーを構築しては削除して、を手軽に行えるためサーバーの学習にぴったりだと思います。学習を続けて、さらなる記事にしてきたいと思います。

中村 律希/FIXER2024年入社の中村です。 TypeScriptやGoをメインに触っていました。

カテゴリートップへ

この連載の記事