Provided by: manpages-ja_0.5.0.0.20140515+dfsg-2_all ![bug](/img/bug.png)
![bug](/img/bug.png)
名前
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 オプ ションを用いること。
関連項目
fdisk(8), swapon(8)