| .\" Copyright 1998 Andries E. Brouwer (aeb@cwi.nl) |
| .\" |
| .\" May be distributed under the GNU General Public License |
| .\" Rewritten for 2.1.117, aeb, 981010. |
| .\" |
| .TH MKSWAP 8 "25 March 1999" "Linux 2.2.4" "Linux Programmer's Manual" |
| .SH NAME |
| mkswap \- set up a Linux swap area |
| .SH SYNOPSIS |
| .BI "mkswap [\-c] [\-v" N "] [\-f] [\-p " PSZ "] "device " [" size "]" |
| .SH DESCRIPTION |
| .B mkswap |
| sets up a Linux swap area on a device or in a file. |
| |
| (After creating the swap area, you need the |
| .B swapon |
| command to start using it. Usually swap areas are listed in |
| .I /etc/fstab |
| so that they can be taken into use at boot time by a |
| .B swapon -a |
| command in some boot script.) |
| |
| The |
| .I device |
| argument will usually be a disk partition (something like |
| .I /dev/hda4 |
| or |
| .IR /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 |
| .I size |
| parameter is superfluous but retained for backwards compatibility. |
| (It specifies the desired size of the swap area in 1024-byte blocks. |
| .B mkswap |
| will use the entire partition or file if it is omitted. |
| Specifying it is unwise - a typo may destroy your disk.) |
| |
| The |
| .I 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 |
| .B mkswap |
| gets it wrong. The symptom is that a subsequent |
| .B swapon |
| fails because no swap signature is found. Typical values for |
| .I 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 now depends on the architecture. |
| It is roughly 2GiB on i386, PPC, m68k, ARM, 1GiB on sparc, 512MiB on mips, |
| 128GiB on alpha and 3TiB on sparc64. |
| |
| 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 |
| .I /proc/swaps |
| (since 2.1.25). |
| |
| .B 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 |
| .B mkswap , |
| e.g. using a command like |
| |
| .nf |
| .RS |
| # dd if=/dev/zero of=swapfile bs=1024 count=65536 |
| .RE |
| .fi |
| |
| Note that a swap file must not contain any holes (so, using |
| .BR cp (1) |
| to create the file is not acceptable). |
| |
| .SH OPTIONS |
| .TP |
| .B \-c |
| Check the device (if it is a block device) for bad blocks |
| before creating the swap area. |
| If any are found, the count is printed. |
| .TP |
| .B \-f |
| Force - go ahead even if the command is stupid. |
| This allows the creation of a swap area larger than the file |
| or partition it resides on. |
| On SPARC, force creation of the swap area. |
| Without this option |
| .B mkswap |
| will refuse to create a v0 swap on a device with a valid SPARC superblock, |
| as that probably means one is going to erase the partition table. |
| .TP |
| .BI "\-p " PSZ |
| Specify the page size to use. |
| .TP |
| .B \-v0 |
| Create an old style swap area. |
| .TP |
| .B \-v1 |
| Create a new style swap area. |
| |
| .LP |
| If no \-v option is given, |
| .B mkswap |
| will default to new style, but use old style if the current kernel |
| is older than 2.1.117 (and also if PAGE_SIZE is less than 2048). |
| The new style header does not touch the first block, so may be |
| preferable, in case you have a boot loader or disk label there. |
| If you need to use both 2.0 and 2.2 kernels, use the \-v0 option |
| when creating the swapspace. |
| |
| .SH "SEE ALSO" |
| .BR fdisk (8), |
| .BR swapon (8) |