Debian GNU/Linux 13 trixieでスワップファイルを作ってみた
古くて低スペックになったパソコンにDebian 13 (trixie)をインストールしてみた。けれどもその際のパーティション作成でスワップ領域を作らなかった。その代わりにスワップ・ファイルを作成することにした。
インストールしたOSは次のとおり。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 13 (trixie)
Release: 13
Codename: trixie
lsb_releaseはディストリビューション固有の情報を教えてくれる外部コマンド。そのオプションの-aは出力可能な全て表示することを指示している。
メモリ(RAM)のサイズは次のとおり。
$ cat /proc/meminfo | grep -ie memtotal -e swaptotal
MemTotal: 7810932 kB
SwapTotal: 0 kB
コマンドcatによって/proc/meminfoファイルを参照し、その出力内容を|(パイプ)によってコマンドgrepに渡し、memtotalとswaptotalの文字列のパターンを持つ行だけを表示させている。grepの-eはパターンを指定するオプションで、-iは大文字と小文字を区別しないように指示するオプション。
16GBが最低と言われている時代に8GB弱というのはかなり低スペックのパソコン。それでもネットサーフィンをしたりSNSを利用するのには使えているし、YouTubeの動画も解像度を落として見ることができている。それでもスワップ領域がないのは心配だ。
スワップ・ファイルを作成
スワップ・ファイルを作成する際にその領域を確保するためにはddというプログラム(外部コマンド)を使う方法とfallocateというプログラム(外部コマンド)を使う方法がある。
ddのほうが細かい設定ができるが、ddはfallocateよりもその処理に時間が長くかかる。ファイル・システムにBtrfsや暗号化fsを利用している場合、ddのほうが安全である利点がある。ただしHDDでなくSSDの使っている場合には必要な領域を予約するだけである理由からfallocateのほうが推奨されている。
まずはfallocateを使った場合から。ハイバネートを利用しないつもりなのでRAMの大きさより若干多めに8GiBを確保することにした。ハイバネートを利用する場合にはRAMサイズの1.5倍から2倍のスワップ領域がおおよそ必要になる。この操作にはオペレーティング・システムの管理者権限が必要。
# fallocate -l 8GiB /swapfile
ハイバネートを利用したい場合には例えば次のように指定する。
# fallocate -l 12GiB /swapfile
ddの場合、if=で入力ファイルとして/dev/zeroという特殊なデバイス・ファイル(ゼロ・デバイス)を指定し、of=で出力ファイルとして/swapfileを指定した。bs=で一度に読み書きする情報量(ブロック・サイズ)をビット単位で\( (2^{10})^2 = 1024^2 \) = 1M(1Mibit)と指定し、count=でスワップ・ファイルの総量をbs=で指定したブロック単位で\( 2^{10} \times 8 = 8192 \)と指定した。この操作にも管理者権限が必要となる。
# dd if=/dev/zero of=/swapfile bs=1M count=8192
bs=1Mはbs=1048576と指定しても同じ。ただしbs=1MBと指定すると1048576ではなく1000000を意味する。
ルート・ディレクトリ直下にスワップ・ファイルswapfileが作成されたかどうかをコマンドlsを使って確認。オプションの-lによってファイル・パーミッション(ファイルのアクセス許可)も一緒に確認することがきる。
$ ls -al /swapfile
-rw-rw-r-- 1 root root 16777216000 10月 17 11:28 /swapfile
rw-rw-r--の部分がパーミッション情報。左から最初のrw-(読み書き許可)が所有者のアクセス権限、次のrw-(読み書き許可)がグループのアクセス権限、最後のr--(読み込み許可)がその他のユーザーのアクセス権限を意味している。
この状態ではファイルの所有者であるrootのみならずrootというグループに属するユーザーでも読み書きでき、その上、所有者でもなくてグループにも属していないその他のユーザーの権限でも読み込みができてしまうので安全でない。安全性を確保するためにファイル・パーミッション(許可)の設定を変更する必要があった。
ファイルのアクセス許可を変更
ファイル・パーミッションを変更するには/swapfileを対象に外部コマンドchmodを使う。この操作には管理者権限が必要。
# chmod 600 /swapfile
$ ls -al /swapfile
-rw------- 1 root root 16777216000 10月 17 11:28 /swapfile
chmodの第一引数600はパーミッションを8進数で表したもの。
ちなみにパーミッションを8進数で表すための対応表は次のとおり。
| パーミッション | 8進数 |
|---|---|
| --- | 0 |
| --x | 1 |
| -w- | 2 |
| -wx | 3 |
| r-- | 4 |
| r-x | 5 |
| rw- | 6 |
| rwx | 7 |
/etc/fstabを編集
次に/etc/fstabファイルを編集する。重要な設定ファイルなので編集する前にcpコマンドによってコピーを作成しておいた。編集のためにここではGNU nanoというエディタを利用した。管理者権限でfeatherpadを利用してもいいと思う。
# cp /etc/fstab /etc/fstab.bak
# nano /etc/fstab
ここでやったのは/etc/fstabファイルの最終行に次の行を追加すること。#が行頭にある行はコメント行であることを意味している。2行目の各項目の間がタブキーで区切ってあることに注意。
# Swap file created on DATE
/swapfile none swap sw 0 0
エディタGnu nanoの操作はキーボードの[Ctrl]キーと何らかの文字キーを組み合わせて行う。GNU nanoを起動すると画面の下のほうに^Gや^Xといったキーとそれがどんな処理を意味するかが表示される。それに基づいて操作すればいい。それ以外の操作は一般的なテキスト・エディタと同様。ちなみに^Gは[Ctrl]キーを押したまま[G]キーを押すことを意味している。
スワップ領域を準備してから有効化
最後の手順としてスワップファイルを有効にするために/swapfileを対象にして外部コマンドの/sbin/swaponを実行する。この操作にも管理者権限が必要。
# /sbin/swapon /swapfile
swapon: /swapfile: スワップヘッダの読み込みに失敗しました
ところがここでエラーが生じた。どうやらその前に外部コマンドの/sbin/mkswapによってスワップの領域の準備する手順が必要だったようだ。この操作にも管理者権限が必要となる。
# /sbin/mkswap /swapfile
スワップ空間バージョン 1 を設定します。サイズ = 15.6 GiB (16777211904 バイト)
ラベルはありません, UUID=**********************************
再び/sbin/swaponを実行。
# /sbin/swapon /swapfile
オプションの-aを使うと/etc/fstabファイルにswapマークとともに記述されているスワップ・デバイスの全てが対象になる。ただしnoautoと記述されているスワップ・デバイスは除く。
# /sbin/swapon -a
で、メモリを確認してみた。
$ free
total used free shared buff/cache available
Mem: 7810936 4680752 451496 371720 3331768 3130184
Swap: 8388604 0 8388604
Swap:行のtotal列がスワップ領域のメモリ・サイズ。これでうまくいったようだ。
スワップ領域を無効化
/sbin/swaponでスワップを有効にした後、/swapfileファイル作成からこれらの作業をやり直すにはスワップを無効化する必要がある。スワップを無効化するには外部コマンドの/sbin/swapoffを使う。この際にも管理者権限が必要。
# /sbin/swapoff /swapfile
オプションの-aを指定すると/etc/fstabファイルに記述されているswapマークを付けられているスワップ・デバイスの全てが対象になる。ただしnoautoと記述されているスワップ・デバイスは除く。
# /sbin/swapoff -a
スワップ・ファイル/swapfileを削除するには外部コマンドrmを使って次のようにする。これにも管理者権限が必要。
# rm -f /swapfile
ここでオプションの-fは存在しないファイルを無視するための指定。
コメント
コメントを投稿