1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Openwrt x86ルーターの空き領域をNFSストレージにした

Last updated at Posted at 2025-11-24

はじめに

以前、Openwrt x86で光クロス用ルーターを作りました。

ProxmoxのVM/LXCとして作っても良かったのですが、調べた感じだとオーバーヘッドがかなり大きくなってしまう人を見かけていたので、ストレージの全領域を食わせて作成しました。
ただ搭載しているストレージが256GBのSSDなうえに、パッケージをガツガツ入れまくっても200MiBしか消費しておらず、あまりにも無駄が大きいのでNFSサーバーを立ててProxmox用のストレージ領域として払い出すことにしました。

構築

そのまま払い出して容量を食い尽くされるようなことを防ぐため、ext4のReserve Blockを使用してシステム領域を保護します。

パッケージインストール

まずは必要なパッケージをインストールします。

opkg update
opkg install e2fsprogs dumpe2fs lsblk tune2fs nfs-kernel-server shadow-useradd shadow-groupadd 

予約領域の設定

ルートデバイスに対して6GB相当のブロックを予約します。
なぜ6GBかと言うと、使用可能量が数字の上で250GBになるからです。ここは適当なので減らそうが増やそうがご自由に。

予約ブロック数

4KBブロックとして、総予約ブロック数を計算します。
6 * 1024 * 1024 * 1024 / 4096 = 1572864
1572864ブロックを指定します。

ルートデバイスのマッピングの確認

df -hで確認すると/dev/rootが出てきてしまうので、lsblkで実態をチェックします。

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               235.4G    206.2M    229.2G   0% /
tmpfs                     3.8G      8.6M      3.8G   0% /tmp
/dev/sda1                16.0M      6.3M      9.7M  39% /boot
/dev/sda1                16.0M      6.3M      9.7M  39% /boot
tmpfs                   512.0K         0    512.0K   0% /dev

root@OpenWrt:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 238.5G  0 disk 
├─sda1   8:1    0    16M  0 part /boot
│                                /boot
├─sda2   8:2    0 238.5G  0 part /
└─sda3   8:3    0   239K  0 part 
sr0     11:0    1  1024M  0 rom

/dev/sda2と確認できたので、実際に予約ブロックの設定を行います。

ブロック指定

次のコマンドを実行します。

tune2fs -r 1572864 /dev/sda2

実際に予約されたか確認します。

root@OpenWrt:~# dumpe2fs -h /dev/sda2 | grep "Reserved block count"
dumpe2fs 1.47.0 (5-Feb-2023)
Reserved block count:     1572864

これで残り6GBを切った場合rootユーザー以外が書き込めなくなりました。

書き込みユーザーの設定

NFSがrootユーザーで書き込んでしまうと、予約ブロック設定の意味が無くなってしまうので専用ユーザーを作成します。

ユーザー作成

groupadd -g 2000 nfsgroup
useradd -u 2000 -g 2000 -d /nonexistent -s /bin/false nfsuser

書き込みディレクトリ設定

mkdir -p /srv/nfs
chown 2000:2000 /srv/nfs
chmod 755 /srv/nfs

export設定

export設定を書き込みます。

echo "/srv/nfs 10.0.0.0/16(rw,sync,no_subtree_check,all_squash,anonuid=2000,anongid=2000)" > /etc/exports

NFSサーバーを再起動します。

exportfs -r
/etc/init.d/nfsd enable
/etc/init.d/nfsd restart

Proxmoxでの設定

今回は、nconnectrsizewsizeオプションを使用するので設定ファイルに直接書き込みます。

/etc/pve/storage.cfsの設定

オプションは自由に変更してください。
以下を追記します。

/etc/pve/storage.cfg
nfs: openwrt-nfs
        export /srv/nfs
        server 10.0.0.1
        content images,iso,import,vztmpl,snippets,rootdir,backup
        options nconnect=16,noatime,rsize=262144,wsize=262144,vers=4.2
        path /mnt/pve/openwrt-nfs

マウント

pvesmで切り替えてマウントします。

pvesm set openwrt-nfs --disable 1
pvesm set openwrt-nfs --disable 0

接続の確認

Proxmoxのシェルで接続テストを行います。

接続オプションのチェック

root@pve:~# cat /proc/mounts | grep openwrt-nfs
10.0.0.1:/srv/nfs /mnt/pve/openwrt-nfs nfs4 rw,noatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,nconnect=16,timeo=600,retrans=2,sec=sys,clientaddr=10.0.10.100,local_lock=none,addr=10.0.0.1 0 0

マルチセッションのチェック

root@pve:~# ss -nt state established dst 10.0.0.1
Recv-Q                  Send-Q                                   Local Address:Port                                     Peer Address:Port                  
0                       0                                          10.0.10.100:751                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:925                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:733                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:685                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:709                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:965                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:767                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:931                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:667                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:776                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:799                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:682                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:678                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:750                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:958                                          10.0.0.1:2049                  
0                       0                                          10.0.10.100:728                                          10.0.0.1:2049   

書き込み速度テスト

実際に書き込んで速度テストをしてみます。

root@pve:~# dd if=/dev/zero of=/mnt/pve/openwrt-nfs/test.img bs=1M count=1000 status=progress conv=fdatasync
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 6.97105 s, 150 MB/s

SSDにしてはだいぶ遅めですが、まあ困りはしない程度の速度は出ているのでヨシとします。

おわりに

言いたいことがたくさんある方もいると思いますが、ガバガバ設計が生んだ産物なので許してください。
とりあえず無駄が減ったのでよかったです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?