DESCRIPTION
mkswap sets
up a Linux swap area on a device or in a file.
(After creating the swap area, you need the
swapon command
to start using it. Usually swap areas are listed in
/etc/fstab so that they can be
taken into use at boot time by a swapon -a command in some boot
script.)
The device
argument will usually be a disk partition (something like
/dev/hda4 or /dev/sdb7) but can also be a file. The
Linux kernel does not look at partition Id's, but many
installation scripts will assume that partitions of hex type
82 (LINUX_SWAP) are meant to be swap partitions. (Warning:
Solaris also uses this type. Be careful not to kill your
Solaris partitions.)
The size parameter
is superfluous but retained for backwards compatibility. (It
specifies the desired size of the swap area in 1024-byte
blocks. mkswap
will use the entire partition or file if it is omitted.
Specifying it is unwise - a typo may destroy your disk.)
The PSZ parameter
specifies the page size to use. It is almost always
unnecessary (even unwise) to specify it, but certain old libc
versions lie about the page size, so it is possible that
mkswap gets it
wrong. The symptom is that a subsequent swapon fails because no swap
signature is found. Typical values for PSZ are 4096 or 8192.
Linux knows about two styles of swap areas, old style and
new style. The last 10 bytes of the first page of the swap
area distinguishes them: old style has `SWAP_SPACE', new
style has `SWAPSPACE2' as signature.
In the old style, the rest of this first page was a bit
map, with a 1 bit for each usable page of the swap area.
Since the first page holds this bit map, the first bit is 0.
Also, the last 10 bytes hold the signature. So, if the page
size is S, an old style swap area can describe at most
8*(S-10)-1 pages used for swapping. With S=4096 (as on i386),
the useful area is at most 133890048 bytes (almost 128 MiB),
and the rest is wasted. On an alpha and sparc64, with S=8192,
the useful area is at most 535560992 bytes (almost 512
MiB).
The old setup wastes most of this bitmap page, because
zero bits denote bad blocks or blocks past the end of the
swap space, and a simple integer suffices to indicate the
size of the swap space, while the bad blocks, if any, can
simply be listed. Nobody wants to use a swap space with
hundreds of bad blocks. (I would not even use a swap space
with 1 bad block.) In the new style swap area this is
precisely what is done.
The maximum useful size of a swap area depends on the
architecture and the kernel version. It is roughly 2GiB on
i386, PPC, m68k, ARM, 1GiB on sparc, 512MiB on mips, 128GiB
on alpha and 3TiB on sparc64. For kernels after 2.3.3 there
is no such limitation.
Note that before 2.1.117 the kernel allocated one byte for
each page, while it now allocates two bytes, so that taking a
swap area of 2 GiB in use might require 2 MiB of kernel
memory.
Presently, Linux allows 32 swap areas (this was 8 before
Linux 2.4.10). The areas in use can be seen in the file
/proc/swaps (since 2.1.25).
mkswap
refuses areas smaller than 10 pages.
If you don't know the page size that your machine uses,
you may be able to look it up with "cat /proc/cpuinfo" (or
you may not - the contents of this file depend on
architecture and kernel version).
To setup a swap file, it is necessary to create that file
before initializing it with mkswap
, e.g. using a command like
Note that a swap file must not contain any holes (so,
using cp(1) to create the file is
not acceptable).