ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ございません。

このブログでは広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLaTeXのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

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進数の対応表
パーミッション 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は存在しないファイルを無視するための指定。

参考にしたサイトや利用したソフトウェア

Debian公式サイトのWikiのSwap領域に関するページ
GNU nanoの公式サイト

コメント

このブログの人気の投稿

LATEXで数式:指数と順列などで使う添数・添字

LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示

LibreOffice Calc 4.3で数値を3桁ずつカンマで区切る