OpenWrt ルーターにおける /overlay 領域の拡張

## この記事の目的

2025 年 2 月に、5ch の **【無線 LAN】OpenWrt【強化ファーム】** の [#25](https://itest.5ch.net/mao/test/read.cgi/network/1721217342/904-) と [#26](https://itest.5ch.net/mao/test/read.cgi/network/1721470536/17-) で、公式イメージでは利用できない Flash メモリパーティションの活用方法について、有志による深掘りが行われていました。✨

非常に有効な内容だと思うのですが、このままでは web の海に埋もれてしまう ⚰️ と思うので、自分用の参照情報としてまとめていきます。

この一連の探索は、839 さんのこの [ポスト](https://itest.5ch.net/mao/test/read.cgi/network/1721217342/839-) から始まっています。 💃 感謝 💃

## ディスクの設定状況・使用状況を確認するためのコマンド

```shell
# ディスクの割当や使用状況を表示
df -h

# MTD (Memory Technology Device)情報を表示
cat /proc/mtd

# パーティション情報を表示
cat /proc/partitions

# UBI (Unsorted Block Images)ファイルシステムの詳細情報を表示
ubinfo -a
```

## 対象機器

- Wi-Fi 6 (IEEE 802.11ax)
  - [BUFFALO WSR-3200AX4S](#%EF%B8%8F-buffalo-wsr-3200ax4s-mt7622b) (MT7622B)
  - [ELECOM WRC-X3200GST3](#%EF%B8%8F-elecom-wrc-x3200gst3-mt7622b) (MT7622B)
- Wi-Fi 5 (IEEE 802.11ac)
  - [BUFFALO WSR-2533DHP2](#%EF%B8%8F-buffalo-wsr-2533dhp2-mt7622b) (MT7622B)
  - [I-O DATA WN-DX1200GR](#%EF%B8%8F-i-o-data-wn-dx1200gr-mt7621a) (MT7621A)
  - [I-O DATA WN-DX2033GR](#%EF%B8%8F-i-o-data-wn-dx2033gr-mt7621a) (MT7621A)
  - [Fortinet FortiGate 50E](#%EF%B8%8F-fortinet-fortigate-50e-marvell-armada-385-88f6820) (Marvell Armada 385 88F6820)

### ⚙️ [BUFFALO WSR-3200AX4S](https://taiha.hatenablog.jp/entry/2023/10/15/163929) (MT7622B)

#### 🪛 コマンドで拡張 🪛

```shell
opkg update
opkg install kmod-mtd-rw

wget -O /etc/init.d/mount_vacant_space https://pastebin.com/raw/XDja96GT
sed -i 's/\r//' /etc/init.d/mount_vacant_space
chmod 755 /etc/init.d/mount_vacant_space
/etc/init.d/mount_vacant_space enable
# この後 mount_vacant_space を有効にするために reboot が必要
```

https://pastebin.com/XDja96GT

##### 補足記事

https://qiita.com/Bacalhau/items/5629336e6d35f76d1a3b

#### 🛠️ ビルドで拡張 🛠️

<!-- ■BUFFALO WSR-3200AX4S 最大限空き容量確保ビルド -->

https://writening.net/page?uLy3gN

https://pastebin.com/yQTBrDaA

#### おまけ：[メーカー純正ファームウェアへの戻し方](https://itest.5ch.net/mao/test/read.cgi/network/1721470536/87)

https://www.buffalo.jp/support/download/detail/?dl_contents_id=62206

<!-- OpenWrtのfirmware-utilsのWindows移植版 -->

https://github.com/musashino205/firmware-wintools

### ⚙️ [ELECOM WRC-X3200GST3](https://taiha.hatenablog.jp/entry/2022/06/02/elecom-wrc-x3200gst3/) (MT7622B)

普通に OpenWrt をインストールした時のディスク領域: 約 8MB

https://imgur.com/TFaF5n0

[mtd6 ～ mtd10 の領域を全て mtd6 としてまとめた場合](https://itest.5ch.net/mao/test/read.cgi/network/1721217342/940-): 約 88MB

https://imgur.com/a/tFfgFbl

#### 🪛 コマンドで拡張 🪛

##### 事前準備 (`mtd10` のフォーマット)

スクリプト作成者さんの [説明](https://itest.5ch.net/mao/test/read.cgi/network/1721217342/906) によると、スクリプトの実行前に `mtd10` をフォーマットする必要があるようです。🤔  
I-O DATA WN-DX1200GR での [`mount_vacant_space` 実行前の事前準備](https://itest.5ch.net/mao/test/read.cgi/network/1721470536/60-65) を参照すると、以下のコマンドで `mtd10` をフォーマットできるのではないかと思います。


```shell
MTD_NUM=10
UBI_DEV="ubi1"
UBI_VOLUME="dpi"

opkg install kmod-mtd-rw
insmod mtd-rw i_want_a_brick=1

mtd unlock /dev/mtd${MTD_NUM}
ubiformat /dev/mtd${MTD_NUM}
ubiattach -m $MTD_NUM
ubimkvol /dev/${UBI_DEV} -m -N $UBI_VOLUME
```

##### スクリプトの実行

```shell
opkg update
opkg install kmod-mtd-rw

wget -O /etc/init.d/mount_vacant_space https://pastebin.com/raw/XDja96GT
sed -i 's/\r//' /etc/init.d/mount_vacant_space
chmod 755 /etc/init.d/mount_vacant_space
/etc/init.d/mount_vacant_space enable
# この後 mount_vacant_space を有効にするために reboot が必要
```

https://pastebin.com/XDja96GT

#### 🛠️ ビルドで拡張 🛠️

<!-- ■ELECOM WRC-X3200GST3 最大限空き容量確保ビルド -->

https://writening.net/page?vVtyig

https://pastebin.com/3e5UmT42

### ⚙️ [BUFFALO WSR-2533DHP2](https://taiha.hatenablog.jp/entry/2021/03/28/buffalo-wsr-2533dhp2/) (MT7622B)

#### 🛠️ ビルドで拡張 🛠️

https://pastebin.com/HmpZicQj

### ⚙️ [I-O DATA WN-DX1200GR](https://taiha.hatenablog.jp/entry/2021/02/16/i-o-data-wn-dx1200gr/) (MT7621A)

#### 🪛 コマンドで拡張 🪛

👉 スクリプト作成者さんによる [`mount_vacant_space` 実行前の事前準備](https://itest.5ch.net/mao/test/read.cgi/network/1721470536/60-65) を参照してください。

```shell
opkg update
opkg install kmod-mtd-rw

wget -O /etc/init.d/mount_vacant_space https://pastebin.com/raw/XDja96GT
sed -i 's/\r//' /etc/init.d/mount_vacant_space
chmod 755 /etc/init.d/mount_vacant_space
/etc/init.d/mount_vacant_space enable
# この後 mount_vacant_space を有効にするために reboot が必要
```

https://pastebin.com/XDja96GT

### ⚙️ [I-O DATA WN-DX2033GR](https://openwrt.org/toh/hwdata/i-o_data/i-o_data_wn-dx2033gr) (MT7621A)

#### 🛠️ ビルドで拡張 🛠️

https://imgur.com/a/LHAQmtb

https://pastebin.com/4KkEqHY9

### ⚙️ [Fortinet FortiGate 50E](https://taiha.hatenablog.jp/entry/2023/03/10/004523) (Marvell Armada 385 88F6820)

#### 🛠️ ビルドで拡張 🛠️

https://imgur.com/a/sEb1C3t

https://pastebin.com/fGRaMBuS

##### @yossh1 さんによる詳しい解説 🎉

https://qiita.com/yossh1/items/ebd30d6af9c95545ad04

## 補足情報

### `mount_vacant_space` 作者さんによる使い方の説明

#### ■ 導入手順

https://itest.5ch.net/mao/test/read.cgi/network/1721217342/906-910

#### ■ `mount_vacant_space` 使用時の注意事項

https://itest.5ch.net/mao/test/read.cgi/network/1721470536/53-54

#### ■ `ubifs` 関連コマンドの使用例

https://itest.5ch.net/mao/test/read.cgi/network/1721470536/60-65

#### ■ OpenWrt ファームウェア更新時の挙動説明 (文鎮化懸念に対する回答)

https://itest.5ch.net/mao/test/read.cgi/network/1721470536/543-547

### [musashino205](https://github.com/musashino205) 氏が OpenWrt 化でパーティションの初期構成を維持しようとする[理由](https://github.com/openwrt/openwrt/pull/4729#issuecomment-968059437)

https://github.com/openwrt/openwrt/pull/4729

### MTD (Memory Technology Device) の使用方法に関する詳細な解説

https://qiita.com/9hnder/items/35e0cbfb3dc9828d8852

### OpenWrt イメージのビルド手順

以下は [OpenWrt 公式ページ](https://openwrt.org/docs/guide-developer/toolchain/beginners-build-guide) の [Instructions](https://openwrt.org/docs/guide-developer/toolchain/beginners-build-guide#instructions) に記載されている手順ですが、この手順でビルドを行うのが楽だと思います。

1. [Set up a build machine in VirtualBox](https://openwrt.org/docs/guide-developer/buildserver_virtualbox)
1. [Install building dependencies](https://openwrt.org/docs/guide-developer/toolchain/install-buildsystem#debianubuntu)
1. [Build OpenWrt images](https://openwrt.org/docs/guide-developer/toolchain/use-buildsystem)

WSL や macOS を使う場合は以下のページを参考にしてください。

https://openwrt.org/docs/guide-developer/toolchain/start