OpenWrt での USB フラッシュドライブ

(公式ガイド:👉 Using storage devices

関連パッケージのインストール


opkg install kmod-usb-storage
opkg install usbutils
opkg install block-mount
opkg install gdisk
opkg install f2fs-tools
opkg install kmod-fs-f2fs
  • USB ドライバーは kmod-usb-storage のみ
  • usbutils はコマンド lsusb -t を使って USB メモリーが接続されているかどうかを調べるため(オプショナル)
  • block-mount はコマンド block info を使ってパーティション情報を表示するため(shell だけでなく LuCI の Mount Points のためにも必要)
  • gdisk はパーティション操作のため(後述)
  • f2fs-tools と kmod-fs-f2fs が USB メモリーフラッシュ用のファイルシステムのためのドライバー

不良セクターの検査(オプショナル)

念のために USB フラッシュドライブの不良セクターを調べておきたい場合には、badblocks コマンドを(インストールして)使う。


opkg install badblocks

badblocks コマンド自体は例えば次のような感じで使う(書き込みを伴う破壊的検査):


badblocks -w -s -v /dev/sda

0101010101、10101010、00000000、11111111 の 4 パターンについてそれぞれ書き込み・読み出しでチェックする。

gdisk によるパーティション操作

今回は 2GB の USB フラッシュドライブを使い、そのうち 256MB を swap パーティションに、残り 1.6GB をデータ用パーティションにした。

gdisk コマンドでデバイス(/dev/sd*)を指定して実行すれば、あとは対話形式でパーティションデザインを行う形となる。

Disk /dev/sda: 3915776 sectors, 1.9 GiB
Model: Storage Media   
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 257F8D9E-B548-49DA-AC35-DF64271AA16E
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 3915742
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
1  2048  526335   256.0 MiB   8200  Linux swap
2  526336  3915742   1.6 GiB     8300  Linux filesystem

各パーティションのフォーマットとマウント操作

swap パーティションは mkswap コマンドを、データ用パーティションは mkfs.f2fs コマンドで F2FS でフォーマットした。


ls -l /dev/sd*
brw-------    1 root     root        8,   0 Aug  2 16:57 /dev/sda
brw-------    1 root     root        8,   1 Aug  2 16:57 /dev/sda1
brw-------    1 root     root        8,   2 Aug  2 16:57 /dev/sda2
mkswap -L swap /dev/sda1
Setting up swapspace version 1, size = 268431360 bytes

mkfs.f2fs /dev/sda2

 F2FS-tools: mkfs.f2fs Ver: 1.12.0 (2018-11-12)

Info: Disable heap-based policy
Info: Debug level = 0
Info: Label = data
Info: Trim is enabled
Info: [/dev/sda2] Disk Model: Storage Media   
Info: Segments per section = 1
Info: Sections per zone = 1
Info: sector size = 512
Info: total sectors = 3389407 (1654 MB)
Info: zone aligned segment0 blkaddr: 512
Info: format version with
  "Linux version 4.14.180 (builder@buildhost) (gcc version 7.5.0 (OpenWrt GCC 7.5.0 r11063-85e04e9f46)) #0 Sat May 16 18:32:20 2020"
Info: [/dev/sda2] Discarding device
Info: This device doesn't support BLKSECDISCARD
Info: This device doesn't support BLKDISCARD
Info: Overprovision ratio = 4.980%
Info: Overprovision segments = 86 (GC reserved = 48)
Info: format successful

フォーマットを終えてからルーターを再起動すると、LuCI の System > Mount Points メニューが現れる。ここでは /mnt/data に /dev/sda2 を、SWAP に /dev/sda1 を設定した。

swap が有効となり、Status > Overview に Swap free の表示項目が現れたのがわかる。

スワップパーティションではなく、スワップファイルを使いたい場合(推奨)

Linux のスワップ方式としてはあまり一般的ではないが、USB フラッシュドライブで読み書きされるブロックの分散を図るために F2FS を選ぶわけだから、スワップパーティションにしてしまうと、そのパーティションについては利用頻度に偏りが生じてしまう。これを回避するには、パーティションを分割せずに全部を F2FS のパーティション一つにし、スワップファイルでスワップメモリーを実現した方が良い。

(参考:👉 OpenWrt Forum

まずはマウントした /dev/sda すなわち /mnt/data にスワップ容量と同じサイズの空ファイルを作成(0 で埋めた 256MB のファイル)し、パーミッションを適切に設定し、スワップファイルにする。


dd if=/dev/zero of=/mnt/data/swapfile bs=1M count=256
chmod 600 /mnt/data/swapfile
mkswap /mnt/data/swapfile

/etc/config/fstab に必要な設定を加える(uci コマンドを使っても ok)。

/etc/config/fstab

config global
        option anon_mount '0'
        option auto_mount '1'
        option delay_root '5'
        option check_fs '0'
+       option anon_swap '1'
+       option auto_swap '1'

config mount
        option enabled '1'
        option target '/mnt/data'
        option uuid 'd20da465-8ad8-41ba-b327-2d71645b3d20'

+ config swap
+       option enabled '1'
+       option device '/mnt/data/swapfile'

reboot する。


あとがき

  • USB フラッシュドライブに swap パーティションを作成するのはあまり気乗りはしないのだが、今回の例では WordPress をインストールしてデータベースに MariaDB を使うという背景の下で行っており、メモリーが逼迫する状況が十分に考えられるため、the last resort として swap パーティションも用意しておくことにした。本来は HDD か SSD がある場合に用いるべきではないかと思う。
  • OpenWrt ルーターの WWW サーバー化にあたっては、USB 接続の外部記憶領域が必要になってくると思う。USB の外付け HDD でも構わないだろうが、NAS は別に存在し、NAS 兼 WWW サーバー化したいというわけでもない。だとしたら単に WWW サーバーの記憶領域として HDD を用意するのは本来の「省電力な自家用 WWW サーバー」という主旨に反し、自己矛盾した愚策な気もするので、USB フラッシュドライブを使うのが妥当だろう。
  • swap を 256MB にしたのは、今回の例で使用している WZR-HP-AG300H の RAM の 128MB の 2 倍のサイズを目安にした(👉 What's the right amount of swap space for a modern Linux system?)。

コメント

このブログの人気の投稿

シークエンスパパともの先見の明

Mac → Mac のメールアカウントの移行

OpenWrt での Wi-Fi 設定