OpenWrt 19.07 で Extroot を使ってディスク容量を拡張する

OpenWrt に必要なパッケージをインストールしているとディスク容量が不足してきたので、Extroot 機能を使ってディスク容量を拡張しました。もともとルーターは利用できるスペースが少ないので、サーバーをインストールする予定であれば早めに Extroot を適用しておくとよいと思います。

パッケージや設定ファイルが置かれているドライブ /overlay を USB メモリーにコピーして、以後 USB メモリーを /overlay としてマウントして使用します。

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 19.07.3

USB メモリーをストレージとして追加

パッケージをインストール

必要なパッケージをインストールします。root で作業します。

# opkg update
# opkg install kmod-usb-storage kmod-usb-storage-uas usbutils block-mount

USB メモリーを接続し以下のコマンドでデバイスが認識されていることを確認します。

# lsusb -t
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=orion-ehci/1p, 480M

“Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M” が接続された USB メモリーを示しています。

以下のコマンドで USB メモリーが /dev/sd* として接続されていることを確認します。

# ls -l /dev/sd*
brw-------    1 root     root        8,   0 Jun 20 16:37 /dev/sda
brw-------    1 root     root        8,   1 Jun 20 16:37 /dev/sda1

さらに block コマンドで詳細な情報を確認します。

# block info | grep "/dev/sd"
/dev/sda1: UUID="34E8-19B0" LABEL="USB128GB" VERSION="FAT32" TYPE="vfat"

USB メモリーをフォーマット

USB メモリーを OpenWrt で使用するのに適したファイルシステムでフォーマットします。

ドライブの種類によって異なるパッケージをインストールし、適したファイルシステムでフォーマットします。

USB メモリーや SSD 等のフラッシュドライブの場合 (F2FS)

# opkg install f2fs-tools kmod-fs-f2fs
# mkfs.f2fs /dev/sda1

ハードドライブの場合 (EXT4)

# opkg install e2fsprogs kmod-fs-ext4
# mkfs.ext4 /dev/sda1

マウント設定を変更

現在の /overlay を別の場所 (/rwm) にマウントするように設定を変更します。以後、古いデータを参照したい場合に利用します。

# uci -q delete fstab.rwm
uci set fstab.rwm="mount"
uci set fstab.rwm.device="`sed -n -e "/\s\/overlay\s.*$/s///p" /etc/mtab`"
uci set fstab.rwm.target="/rwm"
uci set fstab.rwm.enabled=1
uci commit fstab

USB メモリーを /overlay としてマウントします。

# DEVICE="/dev/sda1"
eval `block info "${DEVICE}" | grep -o -e "UUID=\S*"`
uci -q delete fstab.overlay
uci set fstab.overlay="mount"
uci set fstab.overlay.uuid="${UUID}"
uci set fstab.overlay.target="/overlay"
uci set fstab.overlay.enabled=1
uci commit fstab

(任意) マウント時にファイルシステムのチェックを行う場合は以下のコマンドを実行します。

# uci set fstab.@global[0].check_fs='1'
uci commit fstab

以下のコマンドで fstab サービスを有効化します。

# service fstab boot

データを USB メモリーにコピー

すでにインストールされているパッケージ等のデータを Extroot で使用する USB メモリーにコピーします。新しい fstab の設定をコピーするため最後に行います。

USB メモリーをマウントしデータをコピーします。

# mount /dev/sda1 /mnt/sda1
# cp -a -f /overlay/. /mnt/sda1
# umount /mnt/sda1

再起動

ルーターを再起動します。

# reboot

テスト

df コマンドでマウントされているドライブと容量を確認します。

# df

/overlay の容量が USB メモリーの容量になっているのが確認できます。

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 2560      2560         0 100% /rom
tmpfs                   255976       120    255856   0% /tmp
/dev/sda1            121304064    533672 119353176   0% /overlay
overlayfs:/overlay   121304064    533672 119353176   0% /
ubi1:syscfg              30276       312     28380   1% /tmp/syscfg
tmpfs                      512         0       512   0% /dev
/dev/ubi0_1              24312     19696      3340  86% /rwm

参考

コメントを残す

メールアドレスが公開されることはありません。