【STEP-27】swap領域を別デバイスに移動してSSD最適化

0
3263

Raspberry Pi 3 Model Bには1GBのSDRAMが搭載されていますが、ブラウザのタブをいくつも開いた状態で数GBのファイルを圧縮/展開するときなどは、メモリーが不足してフリーズしてしまうことがよくあります。

しかも、OS ( Raspbian ) は、microSDカードを起動ドライブとしていることから、メモリー不足時の一時退避先であるswap領域が既定で100MBしか設定されていません。

そこで、起動ドライブとは別のswap領域専用のデバイスをマウントすることで、パフォーマンスがアップする可能性があります。

一般的にswap領域のサイズは、物理メモリーの2倍程度とされているので、今回はswap領域専用のデバイスとして、2GBのUSBメモリーを用意しました。

現状のswap領域確認

「LXTerminal」を起動し、先ず、コマンド”free“で、現状 ( 既定 ) のswap領域を確認しておきます。

free -h

既定では、swap領域は”99MB”のようです。

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

Raspberry PiのUSB端子にUSBメモリーを接続すると、「リムーバブルメディアの挿入」画面が現れるので、「キャンセル」ボタンをクリックします。

コマンド”lsblk“で、USBメモリーのデバイスファイル名を確認しておきます。

lsblk

“/media/pi/”にマウントされたUSBメモリーのデバイスファイル名は “sdb1”でした。容量は、1.9GBと少なく表示されています。

フォーマットする前に、USBメモリーのデバイスファイル名”sdb1″を指定してアンマウントしておきます。

umount /dev/sdb1

コマンド”mkfs“で、USBメモリーをフォーマット形式”ext4″にフォーマットします。

sudo mkfs.ext4 /dev/sdb1

途中で「続行しますか?」と聞かれるので、”y”→「Enter」で返します。

y

プロンプトが返ってくれば、フォーマットは完了です。

swap領域の準備

コマンド”mkswap“で、USBメモリー”sdb1″に、ラベル名”usbswap”として、swap領域を準備します。

sudo mkswap -c -v1 -L usbswap /dev/sdb1

念の為、コマンド”lsblk“で、コマンド”mkswap“の実行結果を確認しておきます。

lsblk -f

USBメモリー”sdb1″は、ラベル名”usbswap”で、swap領域として準備されていることが確認できました。

パーティションタイプの設定

コマンド”fdisk“で、USBメモリー”sdb”のパーティションタイプを”82 ( Linux Swap )”に設定します。

sudo fdisk /dev/sdb

fdiskのプロンプト「Command(m for help):」が表示されたら、fdiskコマンド”p”でUSBメモリーの現状のパーティション情報を確認しておきます。

p

USBメモリー”sdb1″のパーティションタイプは、”7 ( HPFS/NTFS/exFAT )”として認識されていました。

再び、fdiskのプロンプト「Command(m for help):」が表示されたら、fdiskコマンド”t”でパーティションタイプを変更します。

t

fdiskのプロンプト「Partition type ( type L to list all types ) :」が表示されたら、”82 ( Linux Swap )”を指定します。

82

fdiskのプロンプト「Command(m for help):」が表示されたら、fdiskコマンド”p”で指定した通りに変更されていることを確認します。

p

USBメモリー”sdb”は、パーティションタイプ”82 ( Linux Swap )”として認識されていることが確認できました。

fdiskのプロンプト「Command(m for help):」が表示されたら、fdiskコマンド”w”でパーティション情報を上書きし,コマンド”fdisk“を終了します。

w

新規swap領域の起動時自動マウント設定

作成したswap領域がRaspbian起動時に自動的に有効化されるように、マウント設定ファイル”/etc/fstab”に書き込みます。

「LXTerminal」を起動し、コマンド”sudo nano“で”/etc/fstab”を開きます。

sudo nano /etc/fstab

GNU nano」画面が開いたら、「↓」キーでカーソルを行頭に”#”がある最初の行に移動し、「Enter」キーで1行開けて、次の通り入力します。各文字列間は「Tab」キーで送ります。

LABEL=usbswap  swap  swap  default  0  0

入力したら「Ctrl」+「O」キーで上書きし、「Enter」→「Ctrl」+「X」キーで画面を閉じます。

既定swap領域の起動時自動マウント停止

システムディスク ( microSDカード、SSD等 ) 上にマウントされる既定のswap領域は、swap領域管理サービスの”dphys-swapfile”により実行されています。

Raspbian起動時の”dphys-swapfile”の自動実行を止める為、コマンド”insserv“をインストールします。

タスクバー左端のメニューアイコンから「設定」→「Add / Remove Software」をクリックして開いたら、左ペイン上の検索欄に”insserv“と入力して「Enter」キーを押します。

右ペインに”insserv“が表示されたら、チェックボックスにチェックを入れて「Apply」ボタンをクリックします。

すると、「認証待ち」画面に続いて「認証」画面が現れるので、パスワード入力欄に【STEP-09】で設定したパスワードを入力し、「OK」ボタンをクリックします。

インストールが終了したら、”insserv“のチェックボックスにチェックが入っていることを確認して、「OK」ボタンをクリックしたます。

インストールした”insserv“で、Raspbian起動時にswap領域管理サービス”dphys-swapfile”が自動実行されるのを止めます。

sudo insserv -r dphys-swapfile

swap領域のマウント状況確認

コマンド”swapon -s“で、swap領域のマウント状況を確認します。

swapon -s

設定ファイルを編集しても、それが反映されるのは再起動後なので、現状のswap領域は既定の約100MBだけでした。

コマンド”swapon -L”で、USBメモリーのswap領域ラベル名”usbswap”をマウントします。

sudo swapon -L usbswap

再び、コマンド”swapon -s“で、swap領域のマウント状況を確認します。

swapon -s

既定の102MBとUSBメモリー”sdb1″の1,955MBが、swap領域としてマウントされていました。

確認したら、再起動します。

reboot

「LXTerminal」を起動し、もう一度、コマンド”swapon -s“で、swap領域のマウント状況を確認します。

swapon -s

USBメモリー”sdb1″の1,955MBだけが、swap領域としてマウントされていました。

swap領域設定後の効果確認

一旦、元の環境に戻す為、既定のswap領域”/var/swap”をマウントして、USBメモリーのswap領域”usbswap”をアンマウントし、コマンド”swapon -s”で確認します。

sudo swapon /var/swap
sudo swapoff -L usbswap
swapon -s

「LXTerminal」をもうひとつ起動し、コマンド”top“で、システム情報を表示します。

表示された画面上にカーソルを移動してクリックし、次のトグルキーを1文字づつ入力して、表示を下の画面のように変更します。

top
m
t
m
z

ブラウザを起動して”You Tube”のノンストップ再生動画を1本づつ再生してみました。同時に3本再生したところで、既定のswap領域100MBを100%使い切りフリーズしそうになりました。1GBの搭載メモリーも95.4%使用して余裕はまったくありません。

全ての画面を閉じて再起動すれば、今回設定した環境に戻るはずですが、念の為、コマンド”swapon -s”で確認します。

swapon -s

「LXTerminal」をもうひとつ起動し、コマンド”top“で、システム情報を表示します。

表示された画面上にカーソルを移動してクリックし、次のトグルキーを1文字づつ入力して、表示を下の画面のように変更します。

top
m
t
m
z

前と同じくブラウザを起動して”You Tube”のノンストップ再生動画を1本づつ再生してみました。同時に5本再生しても、USBメモリーのswap領域1.9GBはまだ90%以上残り、1GBの搭載メモリーの使用率も87,2%で余裕があります。

次回の【STEP-28】では、Cchromiumのキャッシュを高速なRAM内のRAMDISK領域にマウントして、ブラウジングの更なる安定化を図ります。