Proxmox環境で動かしているUbuntu VMに、ホストに接続した物理SSDを直接マウントする手順をまとめます。今回は /dev/sdb に接続されている ext4 フォーマット済みSSDを Ubuntu VM (id:100) に割り当てました。

背景

今回の作業を行った理由は、過去に使っていた自宅サーバで稼働していたビットコインのフルノード(Bitcoin Core)のデータが入ったSSDを、Proxmox環境のUbuntu VM上で再利用したかったからです。

VM側で直接SSDを扱えるようにすることで、ホストOSを介さずにフルノードのデータへアクセスでき、環境移行もスムーズになります。

手順

1. Proxmoxホスト側でVM設定を編集

Proxmoxのホストにログインし、対象VMの設定ファイルを編集します。 VMの設定ファイルは /etc/pve/qemu-server/<VMID>.conf にあります。

sudo nano /etc/pve/qemu-server/100.conf

scsi0はVMのシステムディスクとして使用していますので、 scsi1/dev/sdb を指定します。

scsi1: /dev/sdb

すると、ProxmoxのWebUIから/dev/sdbがVMに割り当てられることを確認できます。 /dev/sdbが割り当てられた

2. VM(Ubuntu)側でデバイス確認

Ubuntu VMにログインしてディスクを確認します。

lsblk

出力例:

NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0    32G  0 disk 
├─sda1                      8:1    0     1M  0 part 
├─sda2                      8:2    0     2G  0 part /boot
└─sda3                      8:3    0    30G  0 part 
  └─ubuntu--vg-ubuntu--lv 252:0    0    15G  0 lvm  /
sdb                         8:16   0 894.3G  0 disk 
└─sdb1                      8:17   0 894.3G  0 part

ここで /dev/sdb1 がSSDのパーティションです。

3. マウントポイントの作成とマウント

マウントポイントを作成してマウントします。

sudo mkdir /mnt/bitcoin
sudo mount /dev/sdb1 /mnt/bitcoin

上記コマンドで /mnt/bitcoin にアクセスすると物理SSDのデータを直接マウントできます。

現時点ではVMを再起動するとマウントが外れてしまうので、fstabで自動マウントさせます。

4. fstabで自動マウント設定

まずUUIDを確認します。

sudo blkid

出力例:

/dev/sdb1: UUID="394D532E-3655-4131-90B4-B62B0C65EE2B" BLOCK_SIZE="4096" TYPE="ext4"

次に /etc/fstab を編集します。

sudo nano /etc/fstab

以下を追記します。

UUID=394D532E-3655-4131-90B4-B62B0C65EE2B /mnt/bitcoin ext4 defaults 0 2

保存して再起動します。

sudo reboot

再起動後、マウントされているか確認。

cd /mnt/bitcoin
ls

LXCコンテナに物理SSDをマウントする

VMとは異なり、LXCコンテナでは物理デバイスを直接渡すことは難しそうです。
その代わりに、Proxmoxホスト上でSSDをマウントし、そのマウント済みディレクトリをLXCに共有する形で実現します。

  1. ホスト側でマウント

まずProxmoxホスト上でSSDを確認してマウントします。

出力例:


root@r3900:~# lsblk
NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                    8:0    0 894.3G  0 disk 
└─sda1                 8:1    0 894.3G  0 part 
nvme0n1              259:0    0 476.9G  0 disk 
├─nvme0n1p1          259:1    0  1007K  0 part 
├─nvme0n1p2          259:2    0     1G  0 part /boot/efi
└─nvme0n1p3          259:3    0 475.9G  0 part 
  ├─pve-root         252:1    0    96G  0 lvm  /
  ├─pve-swap         252:0    0     8G  0 lvm  [SWAP]
  └─pve-data         252:5    0 348.8G  1 lvm  

今回は /dev/sda1 が960GBのSSDですので /mnt/kingston-ssd960 としてマウントします。

root@r3900:~# mkdir -p /mnt/kingston-ssd960
root@r3900:~# mount /dev/sda1 /mnt/kingston-ssd960/
root@r3900:~# cd /mnt/kingston-ssd960/

これでホスト側にSSDがマウントされました。

永続化のため /etc/fstab に登録します。

root@r3900:~# blkid

/dev/sda1: UUID="deadbeef-..." TYPE="ext4"

/etc/fstab に追記:

UUID=deadbeef-... /mnt/kingston-ssd960 ext4 defaults 0 0
  1. LXCにマウントポイントとして渡す

ホストにマウントしたディレクトリを、LXCコンテナに共有します。 ここではLXC IDが 102 のコンテナに /mnt/kingston-ssd960 を /mnt/blocks として見せます。

pct set 102 -mp0 /mnt/kingston-ssd960,mp=/mnt/blocks
  1. LXCからアクセス可能化確認する。
root@lxc:~# df -h | grep blocks
/dev/sda1        880G  120G  760G  14% /mnt/blocks

まとめ

項目VMLXC
物理ディスクの扱い/dev/sdX を直接指定ホストでマウント → ディレクトリ共有
パフォーマンス若干オーバーヘッドありほぼネイティブ性能
メリット独立した環境を構築可能軽量でホスト連携が容易