Библиотека сайта rus-linux.net
7.2. Creating a swap space
A swap file is an ordinary file; it is in no way special to the kernel. The only thing that matters to the kernel is that it has no holes, and that it is prepared for use with mkswap. It must reside on a local disk, however; it can't reside in a filesystem that has been mounted over NFS due to implementation reasons.
The bit about holes is important. The swap file reserves the disk space so that the kernel can quickly swap out a page without having to go through all the things that are necessary when allocating a disk sector to a file. The kernel merely uses any sectors that have already been allocated to the file. Because a hole in a file means that there are no disk sectors allocated (for that place in the file), it is not good for the kernel to try to use them.
|
/extra-swap
is the name of the swap
file and the size of is given after the count=
.
It is best for the size to be a multiple of 4, because the
kernel writes out memory pages, which
are 4 kilobytes in size. If the size is not a multiple of 4,
the last couple of kilobytes may be unused.A swap partition is also not special in any way. You create it just like any other partition; the only difference is that it is used as a raw partition, that is, it will not contain any filesystem at all. It is a good idea to mark swap partitions as type 82 (Linux swap); this will the make partition listings clearer, even though it is not strictly necessary to the kernel.
|
You should be very careful when using mkswap, since it does not check that the file or partition isn't used for anything else. You can easily overwrite important files and partitions with mkswap! Fortunately, you should only need to use mkswap when you install your system.
The Linux memory manager limits the size of each swap space to about 127 MB (for various technical reasons, the actual limit is (4096-10) * 8 * 4096 = 133890048$ bytes, or 127.6875 megabytes). You can, however, use up to 8 swap spaces simultaneously, for a total of almost 1 GB. [1]
This is actually no longer true, this section is slated for a rewrite Real Soon Now (tm). With newer kernels and versions of the mkswap command the actual limit depends on architecture. For i386 and compatibles it is 2Gigabytes, other architectures vary. Consult the mkswap(8) manual page for more details.
Notes
[1] | A gigabyte here, a gigabyte there, pretty soon we start talking about real memory. |