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?)。
コメント
コメントを投稿