この記事の目的
この記事は 以前の記事 の続編です。
この記事では CLI コマンドで WSR-3200AX4S の Flash メモリの使用可能領域を拡張する方法を説明します。
イメージを作成して Flash メモリの使用可能領域を拡張する方法は別記事を参照してください。
この記事では 5ch の 【無線 LAN】OpenWrt【強化ファーム】 の #25 と #26 の内容を参照し、OpenWrt 化すると追加パッケージに使用できる Flash メモリが 7MB 程度 😵 になってしまう WSR-3200AX4S で、 Tailscale がインストールできる程度に Flash メモリの使用可能領域を拡張する方法 🧙 を説明します。
この記事は、 情報の整理と集約 により可読性を向上させる 🧐 ことを目的としており、スクリプト作成者 をはじめとする多くの方々の知見・貢献を横取りする意図はありません。😉
実行するスクリプト
WSR-3200AX4S に SSH で接続し、以下のスクリプトを実行します。
実行が完了したら mount_vacant_space
を有効化するために reboot
します。
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
導入手順説明
Storage はどのように変わるのか
以下はスクリプトの実行前後のスクリーンショットです。
画面の下の方の Storage
に ubi1:dpi
という項目が増えています。🧐
ubi1:dpi
が空ではなく、1.7MB ほどが使用済みになっているのは ここ の説明通りです。
追加領域を活用するには --force-space
オプションが必要
例えば Tailscale をインストールする場合、opkg install tailscale
ではなく opkg --force-space install tailscale
を実行します。
普通に opkg install tailscale
を実行してしまうと、以下のように領域不足のエラーが表示され、インストールに失敗します。😵
root@OpenWrt:~# opkg install tailscale
Installing tailscale (1.80.3-r1) to root...
Collected errors:
* verify_pkg_installable: Only have 6788kb available on filesystem /overlay, pkg tailscale needs 22730
* opkg_install_cmd: Cannot install package tailscale.
📌 Tailscale に関する補足
ただし、Admonstrator が提供している Small binary の Tailscale でも問題なく動作することを確認しているため、Tailscale を使用するのであれば最初から Small binary を使用するのがお勧めです。
40MB を超える /overlay
容量が使えるようになったと言っても tailscale update
を実行すれば no space left on device
が表示され、泣きながら 以下のコマンドで掃除をすることになるので、最初から Small binary を使用することをお勧めします。
rm /root/.cache/tailscale-update/tailscale*.tgz*
rm /usr/sbin/tailscale*.new*
ファームウェア更新時の注意事項
憶えておくべきことは以下の一点。
- ファームウェアを更新しても
/mnt/vacant_space/usr_sbin/
内のデータは消去されない
そのため、ファームウェア更新時は以下の手順で進む。
- 設定のバックアップ (
System
>Backup / Flash Firmware
>Backup
) - ファームウェアの更新
-
mount_vacant_space
の再導入
(/usr/sbin/
コピー時に/mnt/vacant_space/usr_sbin/
の同名ファイルは上書きされるはず。🤔) - 追加パッケージの再インストール
もしファームウェア更新時に拡張用のパーティション(mtd11
)を更地にしたければ、上記 2. と 3. の間に以下のコードを実行。
opkg update
opkg install kmod-mtd-rw
MTD_NUM=11
UBI_DEV="ubi1"
UBI_VOLUME="dpi"
insmod mtd-rw i_want_a_brick=1
mtd unlock /dev/mtd${MTD_NUM}
ubiformat /dev/mtd${MTD_NUM}
ubiattach /dev/ubi_ctrl -m $MTD_NUM
ubimkvol /dev/${UBI_DEV} -N $UBI_VOLUME -m
補足
補足 1: Attended Sysupgrade
を使えば、ファームウェア更新後も mount_vacant_space
の機能を維持できるか 🤔
結論から言えば、mount_vacant_space
を使っている環境で Attended Sysupgrade
で OpenWrt をアップグレードするべきではない。
理由 1: /etc/init.d/mount_vacant_space
は Attended Sysupgrade
時に消去される
(同じ /etc/init.d/
内の /etc/init.d/tailscale
は消去されないので、なぜ /etc/init.d/mount_vacant_space
が消去されるのか原因不明。😵)
理由 2: OpenWrt イメージサイズが大きくなるため、もともと少ない Flash メモリがさらに圧迫される
Tailscale をインストールした WSR-3200AX4S で Attended Sysupgrade
を実行したところ、Flash メモリの残容量が 1MB になった。 😵 オールモスト ノースペース レフト オンデバイス. ダ*イット.
補足 2: /usr/sbin
内のデータ削除のために mtd erase WTB
で WTB パーティションを初期化したら mount_vacant_space
が使えなくなった 😲
この ページ の 546 を読んで、パーティションのデータを丸ごと消そうと思って mtd erase WTB
で WTB パーティション(= mtd11
)を初期化したら、 mount_vacant_space
が実行できなくなった。 😵
OpenWrt イメージを書き込み直しても状況は変わらず。
いろいろと試してみたところ、以下の手順で回復できることが分かったため報告します。 🫡
👉 以下のコードはパーティションのフォーマットを含んでいます。
フォーマットが不要であれば、ubiformat /dev/mtd${MTD_NUM}
の実行は(多分)省略できます。
-
mount_vacant_space
を無効化して再起動/etc/init.d/mount_vacant_space disable reboot
-
mount_vacant_space
が実行できるよう、ubi1
を作成し、ボリュームも作成MTD_NUM=11 UBI_DEV="ubi1" UBI_VOLUME="dpi" insmod mtd-rw i_want_a_brick=1 mtd unlock /dev/mtd${MTD_NUM} # umount /mnt/vacant_space # ubidetach -p /dev/mtd${MTD_NUM} ubiformat /dev/mtd${MTD_NUM} ubiattach /dev/ubi_ctrl -m $MTD_NUM ubimkvol /dev/${UBI_DEV} -N $UBI_VOLUME -m
-
mount_vacant_space
を有効化して再起動/etc/init.d/mount_vacant_space enable reboot