名 前
mkswap − Linux の ス ワ ッ プ 領 域 を 準 備 す る
書 式
mkswap [−c] [−vN] [−f] [−p PSZ] [−L label] device [size]
説 明
mkswap は Linux の ス ワ ッ プ 領 域 を デ バ イ ス 上 ま た は フ ァ イ ル 上 に 準 備 す る 。
(ス ワ ッ プ 領 域 を 準 備 し た 後 に こ の 領 域 の 利 用 を 開 始 す る に は 、 swapon コ マ ン ド を 用 い る 必 要 が あ る 。 通 常 ス ワ ッ プ 領 域 は /etc/fstab に リ ス ト さ れ 、 起 動 ス ク リ プ ト に 記 述 さ れ て い る swapon −a コ マ ン ド に よ っ て 、 起 動 時 か ら 利 用 で き る よ う に な っ て い る 。 ) 引 き 数 device は 通 常 は デ ィ ス ク パ ー テ ィ シ ョ ン (/dev/hda4 や /dev/sdb7 の よ う な も の ) で あ る が 、 フ ァ イ ル を 指 定 す る こ と も で き る 。 Linux カ ー ネ ル は パ ー テ ィ シ ョ ン ID を 参 照 し な い が 、 イ ン ス ト ー ル ス ク リ プ ト の 多 く で は 、 パ ー テ ィ シ ョ ン 形 式 が 16 進 の 82 (LINUX_SWAP) と な っ て い る も の を ス ワ ッ プ パ ー テ ィ シ ョ ン と み な し て い る 。 (警 告 : Solaris も こ の 形 式 を 使 う 。 Solaris の パ ー テ ィ シ ョ ン を 破 壊 し な い よ う に 注 意 す る こ と 。 )
size パ ラ メ ー タ は 不 要 で あ る が 、 過 去 と の 互 換 性 の た め に 残 し て あ る 。 (ス ワ ッ プ 領 域 に し た い サ イ ズ を 1024 バ イ ト ブ ロ ッ ク 単 位 で 指 定 す る 。 こ の パ ラ メ ー タ が 省 略 さ れ る と 、 mkswap は パ ー テ ィ シ ョ ン 全 体 を 用 い る 。 こ の パ ラ メ ー タ は 指 定 し な い ほ う が 賢 い 。 タ イ プ ミ ス を す る と デ ィ ス ク を 壊 し て し ま う 。 )
PSZ 引 き 数 は 、 用 い る ペ ー ジ サ イ ズ を 指 定 す る 。 ほ と ん ど の 場 合 は 指 定 し な く て も よ い (と い う か 指 定 す る の は 賢 く な い ) が 、 古 い libc の あ る バ ー ジ ョ ン は ペ ー ジ サ イ ズ の 値 を 間 違 え て 返 す こ と が あ り 、 mkswap の 動 作 を お か し く し て し ま う こ と が あ る 。 こ れ に 伴 う 症 状 と し て 、 swapon が "no swap signature is found" と い っ て 失 敗 す る 。 PSZ に 与 え る 通 常 の 値 は 4096 ま た は 8192 で あ る 。
Linux は ス ワ ッ プ 領 域 と し て 2 つ の 形 式 を 認 識 す る 。 古 い 形 式 と 新 し い 形 式 と で あ る 。 こ れ ら は 、 ス ワ ッ プ 領 域 先 頭 ペ ー ジ の 末 尾 10 バ イ ト に よ っ て 区 別 さ れ る 。 古 い 形 式 で は ’SWAP_SPACE’、 新 し い 形 式 で は ’SWAPSPACE2’ が そ れ ぞ れ サ イ ン と な る 。 古 い 形 式 で は 、 先 頭 ペ ー ジ の 残 り の 部 分 は ビ ッ ト マ ッ プ で あ り 、 1 ビ ッ ト が ス ワ ッ プ 領 域 で 利 用 で き る そ れ ぞ れ の ペ ー ジ に 対 応 す る 。 先 頭 の ペ ー ジ は こ の ビ ッ ト マ ッ プ を 保 持 す る の で 、 先 頭 ビ ッ ト は 0 で あ る 。 ま た 最 後 の 10 バ イ ト は サ イ ン に な っ て い る 。 し た が っ て ペ ー ジ サ イ ズ を S と す れ ば 、 古 い 形 式 の ス ワ ッ プ 領 域 は 最 大 で 8*(S-10)-1 ペ ー ジ を ス ワ ッ プ に 用 い る こ と が で き る 。 S=4096 (i386 の 値 ) な ら ば 、 利 用 で き る 領 域 の 最 大 値 は 133890048 バ イ ト (ほ ぼ 128 MiB) で あ り 、 残 り の 部 分 は 無 駄 と な る 。 alpha と sparc64 で は S=8192 な の で 、 最 大 値 は 535560992 バ イ ト (ほ ぼ 512 MiB) と な る 。 古 い 形 式 で は 、 こ の ビ ッ ト マ ッ プ ペ ー ジ の 大 部 分 を 無 駄 に し て い る こ と に な る 。 な ぜ な ら マ ッ プ 中 の ビ ッ ト 0 は 、 不 良 ブ ロ ッ ク か ス ワ ッ プ 領 域 の 境 界 後 に あ る ブ ロ ッ ク を 示 す た め の も の だ か ら で あ る 。 ス ワ ッ プ 領 域 の サ イ ズ は 簡 単 な 計 算 で 求 ま る 値 に 制 限 さ れ る か わ り 、 不 良 ブ ロ ッ ク が あ れ ば リ ス ト す る の が 簡 単 に な っ て い る 。 し か し 不 良 ブ ロ ッ ク が た く さ ん あ る よ う な 領 域 を ス ワ ッ プ に し た い 人 な ど 誰 も い な い だ ろ う (筆 者 は 1 つ の 不 良 ブ ロ ッ ク で さ え 許 し た く な い )。 新 し い 形 式 の ス ワ ッ プ 領 域 で は 、 こ れ は も っ と し か る べ く 扱 わ れ て い る 。 利 用 で き る ス ワ ッ プ 領 域 の 最 大 値 は 、 現 在 で は ア ー キ テ ク チ ャ 依 存 で あ る 。 i386, PPC, m68k, ARM で は 約 2GiB、 sparc で は 1GiB、 mips で は 512MiB, alpha で は 128GiB, sparc64 で は 3TiB で あ る 。
2.1.117 以 前 の カ ー ネ ル で は 、 1 ペ ー ジ あ た り 1 バ イ ト を 割 り 当 て て い た が 、 現 在 で は 2 バ イ ト を 割 り 当 て て い る 。 し た が っ て 2 GiB の ス ワ ッ プ 領 域 に は 2 MiB の カ ー ネ ル メ モ リ が 必 要 と な る 。 現 時 点 で は 、 Linux は 32 個 の ス ワ ッ プ 領 域 を 持 つ こ と が で き る (Linux 2.4.10 よ り 前 は 8 個 で あ っ た )。 利 用 し て い る 領 域 は /proc/swaps フ ァ イ ル で 見 る こ と が で き る (2.1.25 以 降 )。
mkswap で は 10 ペ ー ジ よ り 小 さ い 領 域 を 作 る こ と は で き な い 。 使 っ て い る マ シ ン の ペ ー ジ サ イ ズ が わ か ら な い 場 合 は 、 "cat /proc/cpuinfo" に よ っ て 調 べ る こ と が で き る か も し れ な い 。 (で き な い か も し れ な い - こ の フ ァ イ ル の 内 容 は ア ー キ テ ク チ ャ と カ ー ネ ル の バ ー ジ ョ ン に 依 存 し て い る の で 。 ) ス ワ ッ プ フ ァ イ ル を 作 成 す る 場 合 は 、 mkswap に よ る 初 期 化 を 行 う 前 に 、 フ ァ イ ル を 作 成 し て お く 必 要 が あ る 。 こ の 目 的 に は 、 以 下 の よ う な コ マ ン ド を 用 い れ ば 良 い :
# dd if=/dev/zero of=swapfile bs=1024 count=65536 ス ワ ッ プ フ ァ イ ル に は "hole" (未 確 保 の 領 域 ) が 存 在 し て は な ら な い こ と に 注 意 せ よ (し た が っ て フ ァ イ ル を 作 成 す る 際 に cp(1) を 使 っ て は な ら な い )。
オ プ シ ョ ン
−c ス ワ ッ プ 領 域 を 作 る 前 に 、 デ バ イ ス に 対 し て 不 良 ブ ロ ッ ク の チ ェ ッ ク を 行 う 。 不 良 ブ ロ ッ ク が 見 つ か っ た 場 合 は 、 そ の カ ウ ン ト 数 を 表 示 す る 。 | |
−f 強 制 す る 。 馬 鹿 な コ マ ン ド で も 実 行 す る 。 こ れ を 指 定 す る と 、 フ ァ イ ル ま た は パ ー テ ィ シ ョ ン の 実 際 の 大 き さ よ り も 大 き な ス ワ ッ プ フ ァ イ ル を 作 る 動 作 が で き て し ま う 。 |
SPARC で は ス ワ ッ プ 領 域 を 強 制 的 に 作 成 す る 。 こ の オ プ シ ョ ン を 付 け な い と 、 mkswap は 正 し い SPARC の ス ー パ ー ブ ロ ッ ク を 持 っ た デ バ イ ス に は v0 の ス ワ ッ プ を 作 成 し な い 。 パ ー テ ィ シ ョ ン テ ー ブ ル を 消 し て し ま う 可 能 性 が あ る か ら で あ る 。
−p PSZ 用 い る ペ ー ジ サ イ ズ を 指 定 す る 。 |
−L label ラ ベ ル を 指 定 し 、 そ の ラ ベ ル で swapon で き る よ う に す る 。 (新 し い 形 式 の ス ワ ッ プ 領 域 の み 。 )
−v0 古 い 形 式 の ス ワ ッ プ 領 域 を 作 成 す る 。 |
||
−v1 新 し い 形 式 の ス ワ ッ プ 領 域 を 作 成 す る 。 |
−v オ プ シ ョ ン を 省 略 し て mkswap を 実 行 す る と 、 デ フ ォ ル ト で は 新 し い 形 式 を 作 成 す る 。 し か し 使 用 中 の カ ー ネ ル が 2.1.117 よ り 古 い 場 合 (あ る い は PAGE_SIZE が 2048 よ り 小 さ い 場 合 ) に は 、 古 い 形 式 で 作 成 す る 。 新 し い 形 式 の ヘ ッ ダ は 、 最 初 の ブ ロ ッ ク に は 書 き 込 ま な い 。 し た が っ て ブ ー ト ロ ー ダ や デ ィ ス ク ラ ベ ル を 置 く 場 合 に は こ ち ら が 望 ま し い 。 2.0 と 2.2 の カ ー ネ ル を 両 方 用 い る 必 要 が あ る 場 合 は 、 ス ワ ッ プ 領 域 を 作 成 す る 際 に は −v0 オ プ シ ョ ン を 用 い る こ と 。