mkswap
crée une zone de swap linux sur un périphérique ou dans un fichier.
(Après avoir créé la zone de swap, vous aurez besoin de la commande
swapon
pour l'utiliser. Habituellement les zones de swap sont listées dans le fichier
/etc/fstab
afin qu'elles puissent être utilisées au moment du boot par la commande
swapon -a
intégrée dans un script.)
L'argument
périphérique
sera normalement une partition du disque dur (quelque chose comme
/dev/hda4
ou
/dev/sdb7)
mais peut aussi être un fichier.
Le noyau linux ne regarde pas le type de partition, mais
beaucoup de scripts d'installation supposeront que les partitions
de type 82 en hexadécimal (LINUX_SWAP) sont, par défaut, des partitions de swap.
(Attention : Solaris utilise aussi le type 82. Prenez garde de ne pas supprimer
vos partitions Solaris.)
Le paramètre
taille
est superflu, mais il est conservé pour des raisons de compatibilité descendante.
(Il spécifie la taille désirée de la zone de swap par blocs de 1024 octets.
mkswap
utilisera la totalité de la partition ou du fichier si la taille est omise.
La spécifier est imprudent - une coquille pourrait détruire votre disque.)
Le paramètre
TAILLE_PAGE
spécifie la taille de la page à utiliser. Il n'est presque jamais
nécessaire (voire imprudent) de la spécifier, mais certaines anciennes versions de libc
ne déterminent pas correctement la taille de la page. Il est alors possible que
mkswap
en prenne une mauvaise. Si tel est le cas, un
swapon
ultérieur échouera parce qu'il n'aura pas trouvé la signature de la swap. Les valeurs caractéristiques de
TAILLE_PAGE
sont 4096 ou 8192.
Linux connaît deux sortes de zones de swap : les anciennes et les nouvelles.
Le 10 derniers octets de la première page de la zone de swap les distinguent les unes des autres :
les anciennes ont « SWAP_SPACE », alors que les nouvelles ont « SWAPSPACE2 » comme
signature.
Dans l'ancien style, le reste de cette première page contient une carte de bits,
avec 1 bit pour chaque page utilisable de la zone de swap.
Comme la première page contient la carte des bits, le premier bit est 0.
De la même façon, les 10 derniers octets contiennent la signature. Donc, si la taille de la page
est T, une ancienne zone de swap peut décrire au plus
8*(T-10)-1 pages pour swapper.
Avec T=4096 (comme sur un i386), la zone utilisable est au maximum de 133890048 octets
(environ 128 Mo), et le reste sera inutilisable.
Sur alpha et sparc64, avec T=8192, la zone utilisable est au maximum de
535560992 bytes (environ 512 MiB).
L'ancienne installation gaspille une grande partie de cette page. En effet, les bits à zéro
signifient aussi bien des blocs défectueux que des blocs situés après la fin de l'espace de swap, alors que
la taille de l'espace de swap pourrait être indiquée par un entier et
les blocs défectueux, s'il y en a, simplement listés. Il est clair, que personne ne souhaite
utiliser un espace de swap avec des centaines de mauvais blocs. (D'ailleurs, je ne voudrais même pas
utiliser un espace de swap avec 1 seul bloc défectueux.)
Avec les zones de swap de style nouveau c'est précisément ce qui est fait.
La taille maximale utilisable de la zone de swap dépend de l'architecture.
C'est approximativement 2 Go sur i386, PPC, m68k, ARM, 1GiB sur sparc, 512 Mo sur mips,
128 Go sur alpha et 3 To sur sparc64.
Notez qu'avant la version 2.1.117, le noyau allouait un octet pour chaque page,
alors que, maintenant, il en alloue deux. Ainsi une zone de swap de 2 Go
en cours d'utilisation pourra nécessiter 2 Mo de mémoire du noyau.
Actuellement, Linux autorise 32 zones de swap (elles étaient 8 avant le noyau Linux 2.4.10).
Les zones en cours d'utilisation peuvent être vues dans le fichier
/proc/swaps
(depuis 2.1.25).
mkswap
refuse les zones de taille inférieure à 10 pages.
Si vous ne connaissez pas la taille des pages que votre machine utilise, vous
pouvez la voir avec "cat /proc/cpuinfo" (le contenu de ce fichier dépendant
de l'architecture et de la version du noyau, il est possible que vous n'ayez pas accès à cette information).
Pour installer un fichier de swap, il est nécessaire de créer ce fichier avant
de l'initialiser avec
mkswap ,
par exemple en utilisant une commande comme
- # dd if=/dev/zero of=fichier_swap bs=1024 count=65536
Notez qu'un fichier de swap ne doit contenir aucun trou (par conséquent, utiliser
cp(1)
pour créer le fichier n'est pas acceptable).