Manpages

NOME

mkswap − predispone una area di swap di Linux

SINTASSI

mkswap [−c] [−vN] [−f] dispositivo [dimensione]

DESCRIZIONE

mkswap predispone un’area swap di Linux su di un dispositivo o in un file.

Dopo aver creato l’area swap, bisogna usare il comando swapon per iniziare a usarla. Normalmente le aree swap sono elencate in /etc/fstab così da poter essere messe in uso, all’avvio, da un comando swapon -a posto in qualche script di boot.

L’argomento dispositivo sarà normalmente una partizione del disco (qualcosa come /dev/hda4 o /dev/sdb7) ma può anche essere un file. Il kernel di Linux non guarda gli identificativi della partizione, ma molti script di installazione suppongono che le partizioni di tipo esadecimale 82 (LINUX_SWAP) siano partizioni swap.

Il parametro dimensione è superfluo ma viene mantenuto per la compatibilità all’indietro: specifica la dimensione desiderata per l’area swap in blocchi di 1024 byte. mkswap userà l’intera partizione o file qualora manchi detto parametro.

Linux conosce due tipi di aree swap: lo stile vecchio e lo stile nuovo. Essi vengono distinti dagli ultimi 10 byte della prima pagina dell’area swap: il vecchio stile ha come firma ’SWAP_SPACE’, mentre il nuovo ha ’SWAPSPACE2’.

Nel vecchio stile, il resto di questa prima pagina era una bitmap, con un bit a 1 per ogni pagina utilizzabile dell’area di swap. Poiché nella prima pagina c’è questa bitmap, il primo bit è a 0. Inoltre, gli ultimi 10 byte contengono la firma. Quindi, se la dimensione di questa pagina è D, un’area di swap vecchio stile può descrivere al massimo 8*(D-10)-1 pagine usate per lo swap. Con D=4096 (come negli i386), l’area utile è al massimo di 133890048 byte (quasi 128 MB se credete che 1 MB=2^20 byte), e il resto è sprecato. Su un alpha e su uno sparc64, con D=8192, l’area utile è al massimo 535560992 byte (quasi 512 MB con la stessa condizione).

La vecchia installazione spreca la maggior parte di questa pagina di bitmap, poiché i bit messi a zero denotano blocchi danneggiati o blocchi che superano la fine dello spazio swap, e un semplice intero è sufficiente per indicare la dimensione dello spazio swap, mentre i blocchi danneggiati, se ne esistono, possono essere semplicemente elencati. Nessuno vuole usare uno spazio swap con centinaia di blocchi danneggiati (io non userei neppure uno spazio swap che abbia un solo blocco danneggiato).

Nella area di swap di nuovo stile questo è precisamente quel che avviene. La massima dimensione utile di un’area di swap ora dipende dall’architettura: è grosso modo 2GB sugli i386, PPC, m68k, ARM; 1 GB sugli sparc; 512MB sui mips; 128GB sugli alpha e 3TB sugli sparc64.

Notate che prima il kernel 2.1.117 allocava un byte per ogni pagina, mentre ora alloca due byte, sicché utilizzare un’area di swap di 2 GB potrebbe richiedere 2 MB di memoria di kernel.

Attualmente, Linux consente 8 aree di swap. Le aree in uso possono essere viste nel file /proc/swaps (a partire dal 2.1.25).

mkswap rifiuta aree più piccole di 10 pagine.

Se si ignora la dimensione della pagina utilizzata dalla propria macchina, forse la si può vedere con "cat /proc/cpuinfo" (o forse no: il contenuto di questo file dipende dall’architettura e della versione del kernel).

Per predisporre un file di swap, è necessario crearlo prima di eseguire mkswap, per esempio usando un comando come

# dd if=/dev/zero of=swapfile bs=1024 count=65536

Si noti che il file di swap non deve contenere nessun buco (perciò non è accettabile usare cp(1) per creare il file).

OPZIONI

−c

Controlla se il dispositivo (qualora sia un dispositivo a blocchi) contiene blocchi danneggiati prima di creare l’area di swap. Se ne trova, viene stampato il conteggio.

−f

Sugli SPARC, forza la creazione dell’area di swap. Senza questa opzione mkswap rifiuterà di creare uno swap v0 su di un dispositivo con un valido superblocco SPARC, poiché in tal caso si starebbe, probabilmente, per cancellare la tabella delle partizioni.

−v0

Crea un’area di swap di vecchio stile.

−v1

Crea un’area di swap di nuovo stile.

Se non è data alcuna opzione −v, mkswap userà il vecchio stile se l’area di swap non eccede la dimensione massima di un’area di swap di vecchio stile oppure se il kernel attuale è precedente al 2.1.117 (nonché se PAGE_SIZE è minore di 2048). L’intestazione nuovo stile non tocca il primo blocco, quindi potrebbe essere preferibile (anche se l’area di swap è piccola), qualora lì ci sia un boot loader o un’etichetta di disco.

VEDERE ANCHE

fdisk(8), swapon(8)