Raspbianで外付けドライブへswapファイルを移動する正攻法

swap設定の変更
Raspberry PiのOS Raspbianでswapファイルのサイズや場所の変更をしてみます。
他のサイト様にも多く情報がありますがどうも正攻法という感じがしません。
この記事執筆時で最新のRaspbianに最適(そう)な方法を紹介してみます。




Raspberry Pi でswapファイルをいじる必要は殆ど無いでしょうが、ちょっと重いプログラムを自分でビルドしようとしたらメモリーが足りなくなりました。swapサイズを拡大しなくてはなりません。

私はLinuxを良く知りませんのでLinuxの情報を検索するのはとても面倒な作業です。検索すると多くのサイトでswapの変更方法が紹介されています。しかし、使っているコマンドを見るとどうも違和感を感じます。Linuxでは同じ設定をするにも複数の方法がありどれでも目的を達成できるのですが、実際は気付かないところの環境を壊している事が多々あります。

この記事執筆時で最新のRaspbian Version:November 2018ではswapの管理を"dphys-swapfile"というプログラムで行っているようです。この記事ではdphys-swapfileを使ってスワップファイルのサイズを変えたり、スワップファイルを外付けドライブへ移したりする方法を紹介します。

dphys-swapfileではswapファイルの設定を/etc/dphys-swapfileファイルで行います。このファイルを書き換えるだけでswapファイルのサイズや場所を変更する事ができます。

とても簡単なのですが何故かしっくりくる手順を巷で見かけませんでした。

/etc/dphys-swapfileファイル

まずは/etc/dphys-swapfileファイルの中身を見てどこをいじれば良いのか把握します。
/etc/dphys-swapfileをテキストエディタで開きます。次のように書いてある場所が関係ありそうです。
# where we want the swapfile to be, this is the default
#CONF_SWAPFILE=/var/swap
swapファイルを置くパーティションを指定できるようです。

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100
swapファイルのサイズを指定できるようです。

# restrict size (computed and absolute!) to maximally this limit
#   can be set to empty for no limit, but beware of filled partitions!
#   this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
#   but is also sensible on 64bit to prevent filling /var or even / partition
#CONF_MAXSWAP=2048
swapファイルの最大サイズを指定できるようです。デフォルトは2GBまでとなっているようです。

これらの値を変更してやれば良さそうです。

swapファイルのサイズを変える

swapファイルのサイズを変えてみます。パーティションは移動しません。
現在のswapファイルの状態を見てみます。
pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         949448      107336      622648       15748      219464      776208
Swap:        102396           0      102396
swapサイズは100MBになっているでしょう。
変更のためswapを止めます。次のコマンドを入れます。
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
uninstallで現在の/etc/dphys-swapfileの設定内容を忘れさせます。
確認してみます。
pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         949448      107672      620564       15748      221212      775852
Swap:             0           0           0
swapが無くなりました。
スワップサイズを変更するため/etc/dphys-swapfileファイルを変更します。ここでは200MBへ変更してみます。
CONF_SWAPSIZEの行を次のように変更します。
CONF_SWAPSIZE=200
テキストエディタで開かずにターミナルからコマンドで変更するには次のようにします。
sudo sed -i.bak 's/^#\?\(CONF_SWAPSIZE=\).*/\1200/' /etc/dphys-swapfile
赤い文字が新しいサイズです。変更前のdphys-swapfileファイルはdphys-swapfile.bakとして保存されます。おかしくなったらこのファイルをリネームして直します。
swapを動かします。
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
setupで変更した/etc/dphys-swapfileファイルの設定を読み込ませます。その後swapを動かします。
確認してみます。
pi@raspberrypi:~ $ free
              total        used        free      shared  buff/cache   available
Mem:         949448      122464      590224       16912      236760      759692
Swap:        204796           0      204796
swapサイズが200MBになりました。

swapファイルの場所を変える

swapファイルの場所を変えてみます。USBに接続したHDDなどへ移せます。
今度は/etc/dphys-swapfileファイルのCONF_SWAPFILE=と書かれた部分を変更すれば良さそうです。

移動先となるドライブにパーティションを作りフォーマットしなければなりません。この方法はここでは説明しません。他のサイト様にお任せ。
USBに接続したドライブをext4にフォーマットします。多くの場合、/dev/sda1あるいはsdb1としてデバイスが認識されるでしょう。もしも違うデバイス名だったら読み替えてください。
確認してみます。
pi@raspberrypi:~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 465.8G  0 disk 
└─sda1        8:1    0 465.8G  0 part /media/pi/xxxx
私は500GBのHDDを接続してみました。
最新のRaspbianならばUSBにHDDをつなぐと自動的にマウントされるでしょう。マウントされたディレクトリを確認してみます。
pi@raspberrypi:~ $ mount | grep sda
/dev/sda1 on /media/pi/xxxx type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
マウント先は/media/pi/xxxxとなっていました。xxxxはパーティションのボリューム名になっていると思います。読み替えてください。
このマウント先を/etc/dphys-swapfileファイルに設定します。

変更のためswapを止めます。
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
/etc/dphys-swapfileファイルを変更する前に必ずswapを停止させます。これをしないと古いswapが消えず継続して存在してしまうようです。

/etc/dphys-swapfileファイルのCONF_SWAPFILEを次のように変更します。
CONF_SWAPFILE=/media/pi/xxxx/swap
行の先頭に#があるので削除しておきます。
ターミナルからコマンドで変更するには次のようにします。
sudo sed -i.bak2 's/^#\?\(CONF_SWAPFILE=\).*/\1\/media\/pi\/xxxx\/swap/' /etc/dphys-swapfile

swapを動かします。
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
これでUSBドライブにswapファイルが出来上がるでしょう。

まとめ

Raspbianで基本的な設定を壊さずにswapファイルの場所やサイズを変更してみました。
dphys-swapfileファイルを変更する前にswapを停止するのがポイントです。swapファイルのパーティションを変更する場合は特に気をつける必要があります。ファイルを変更した後にswapを停止しようとしても前のswapの場所を見失い停止できないようです。

Linux系OSはメジャーバージョンが異なると設定方法が全く変わってしまう事も珍しくありません。設定方法を調べる場合はご自分の使うバージョンと合っているか確認する事をお勧めします。基本的に2年以上前の情報は参考にしない方が安全です。
また、Raspbianなどは初心者向けの設定が数多くされています。どのようなツールで簡単操作の機能が実現されているか把握せずにネット上のカスタマイズを真似ると便利な初心者向け設定が壊れてしまいます。
この記事をご覧の際も投稿日時を確認して古かったら眺める程度にした方が安全です。

コメント

最近のコメント

Threaded Recent Comments will be here.