6 novembre 2006

Swappature

La serie di problemi di Edgy Eft sembra veramente non finire. Non so se una reinstallazione da zero funziona in modo ineccepibile, ma avendo effettuato il dist-upgrade ai tempi della RC1 mi porto ancora appresso una serie di problemimi :-(

L'ultimo appena scoperto è relativo allo spazio di swap non mantenuto nel passaggio da Dapper.

Il problema principale sta nel fatto che passando da Dapper a Edgy Eft, nel caro vecchio file /etc/fstab i device non sono più elencati con il percorso del device stesso (p.e. /dev/hdaX) ma da un UUID. Nel passaggio, inoltre, la riga relativa alla partizione di swap è scomparsa.

Sì. lo so aggiungere una partizione di swap è semplice. Basta aggiungere la riga:
/dev/hdaX none swap sw 0 0
ed eseguire `sudo swapon -a`. Peccato però che la cosa non funziona in Edgy, proprio a causa di quel UUID prima nominato.

Visto che sono buono, ecco a voi la procedura per controllare ed eventualmente correggere il funzionamento della partizione di swap su Edgy (tratta dal relativo bug su Malone). Ovviamente il presupposto è che la partizione di swap sia stata creata e formattata in una precedente installazione. E che in caso di errori e cancellazioni di dati non va la veniate a prendere con me.
  1. Controllare se la partizione di swap è attiva - eseguite il comando `swapon -s`. In questo modo vengono elencati i file e le partizioni di swap. Se non restituisce alcun output, allora non c'è alcuna partizione di swap attivata.
  2. Controllare la disponibilità di una partizione di swap - nel Terminale di prima, eseguire `sudo fdisk -l' per elencare i dischi e le partizioni. Nella colonna System dei Dispositivi, in uno ci dovrebbe essere scritto "Linux swap / Solaris". Il dispositivo in quella riga è la vostra partizione di swap.
  3. Esecuzione di mkswap - sempre nel terminale, eseguire il comando `sudo mkswap -c /dev/XXXX` con XXXX nome della partizione determianto al punto 2. Attenzione all'output restituito dal programma, in esso c'è l'UUID da usare nei passi successivi.
  4. Modifica di /etc/fstab - aprire /etc/fstab con un editor di testo e aggiungere la riga di cui parlavo prima, con la differenza che al posto del classico /dev/XXXX dovete mettere "UUID=" dove è l'UUID del device di swap restituito dal comando mkswap. Il numerello è bello lunghetto, per cui vi consiglio il copia-e-incolla e parecchia attenzione. Salvate e chiudete-
  5. Modifica di initramfs - Come al punto precedente, aprite in un editor di testo il file /etc/initramfs-tools/conf.d/resume e sostituite l'UUID che dovrebbe esserci già con l'UUID ricavato al un punto 3 e usato al punto 4. Di nuovo attenzione e di nuovo salvate e chiudete. Ah, questo file serve per determinare il dispositivo di resume per il suspend-on-RAM/disk
  6. Esecuzione di update-initramfs - eseguire `update-initramfs -u` per rendere effettivi i cambiamenti del punto predecente.
  7. Riavvio del sistema - Avando modificato initramfs. è necessario riavviare (credo per applicare le modifiche). Se volete solo usare la swap, allora uno `sudo swapon -a` potrebbe bastare.
Alla fine, rieseguire il comando al punto 1 per vedere se effettivamente la partizione di swap è attiva.

Ovviamente tutta questa procedura è necessaria per avere lo stesso UUID nei file /etc/fstab e /etc/initramfs-tools/conf.d/resume per cui ad ogni successiva modifica dello swap, bisogna controllare che i due siano in sincro, pena malfunzionamenti nell'uso dello spazio di swap e nella sospensione ACPI del sistema.

Update: mi si chiede il formato del file /etc/initramfs-tools/conf.d/resume. Il mio è, su un'unica riga,
RESUME=UUID=88ddb5c8-4e84-4580-9cc9-86cf59f58c5b
Ossia, come per /etc/fstab invece del percorso al device, UUID= seguito dal numero univoco del device.

In quanto al funzionamento del resume, non ho provato, però per esprerienza ho visto che se i due file non fanno riferimento allo stesso UUID (o uno fa riferimento all'UUID e l'altro al device), allora lo spazio di swap non viene attivato. Forse in tal caso il resume non funzionerebbe. Non escludo però che anche l'opzione "resume=" nel file /boot/grub/menu.lst debba usare l'UUID.

8 commenti:

Anonimo ha detto...

ciao.
solo per dire che mi è stato utile questo articolo.
solo poche ore fa postai sul forum di ubuntuitalia un problema del genere. ho praticamente visto in diretta la pubblicazione di questo post sul planet ed ho subito provato. funziona!

ps: quali altri cambiamenti ha introdotto upstart?

Luca Ferretti ha detto...

Felice di essere stato di aiuto :-) Aggiungi pure il testo o il riferimento sul forum.

Per quanto riguarda upstart, è in effetti una cosa che intendo approfondire meglio.

Alessandro Morgantini ha detto...

Ciao,
io ho aggiornato da dapper a edgy e a me lo swap e` andato a posto da subito.
Piuottosto strano e` invece il file /etc/initramfs-tools/conf.d/resume che mi si presenta cosi`:

RESUME=

quindi niente UUID gia` presente. In queste condizioni il resume da ibernazione non mi funziona? Io non ho mai provato.
Puoi mettere, per favore, un esempio di questo file corretto?

Grazie mille

Anonimo ha detto...

ciao. sono quello che ha inserito il primo commento.

anche nel mio caso era RESUME= e basta.
in quella situazione non mi funzionava nè sospendi nè iberma. ma forse il mio è un caso particolare. il mio notebook non ha batteria (fusa mesi fa) e forse per questo che quando tento di riprendere la sessione si spegne. comunque proverò.

Anonimo ha detto...

ciao,
grazie per il post che anche nel mio caso ha funzionato.

un paio di note per aiutare altri:
1) il contenuto del mio file /etc/initramfs-tools/conf.d/resume era solo RESUME=

2) usare swapon nuovamente senza aver riavviato, non funzionerà.

Unknown ha detto...

volevo segnalare che anche su ubuntu feisty funziona...
grazie dell'ottima guida!

Anonimo ha detto...

senza questa guida non avrei saputo come fare, grazie (vedi che serve scrivere guide?) :))

Anonimo ha detto...

Grazie funziona anche su Ubuntu 8.10 Intrepid Ibex appena usata e i 2 swap sono tornati a posto.
L'unica guida fra le tante che funziona.
Grazie ancora