Server Meltdown

Il vecchio adagio recita che esistono due tipi di persone: quelle che hanno un backup e quelle che avrebbero voluto averlo.

Ma andiamo con ordine...

Tutto è cominciato con io che decido di installare Gitlab e, essendo che GitLab mangia parecchia RAM, decido che è ora di un upgrade di memoria al mio server. Scarico un backup aggiornato, riavvio il server per essere sicuro che gli aggiornamenti degli ultimi 160 giorni di uptime non avessero fatto qualche casino ed alla fine mi accordo col datacenter per sostituire la memoria.

Al riavvio tutto ok, comincio ad installare GitLab ma durante il download del pacchetto tutto si freeza e la macchina diventa totalmente irraggiungibile.

Decido quindi di forzare un reset ed il server risale, ma apt comincia a dare errori astrusi cercando di aggiornare le liste dei pacchetti, faccio un po' di prove, cancello i file di cache nel caso fossero corrotti ma niente, come ultimo tentativo provo nuovamente a riavviare.

Al riavvio apt funziona di nuovo e mi rimetto al lavoro ma dopo la configurazione GitLab ha dei seri problemi a partire.

Ipotizzando che a causa del crash durante dell'installazione ci fosse qualche file corrotto, quindi disinstallo GitLab e lo reinstallo da zero ma niente, stessa storia.

Nel frattempo mi rendo conto che anche altri servizi stavano dando problemi, in particolare processi PHP che crashavano in maniera casuale e degli script in cron che mi stavano riempendo di mail di alert per gli errori più disparati.

Un controllo sul syslog e me lo trovo zeppo di errori di glibc del tipo:

*** glibc detected *** /usr/bin/lsof: corrupted double-linked list: 0x00007f1493b2bb20 ***
*** glibc detected *** /usr/sbin/apache2: double free or corruption (!prev): 0x00007f8765cccb40 ***

Che tanto belli non sembrano essere, anzi non lo sono per niente.

Ragiono quindi che la nuova memoria possa essere difettosa, spengo il server e chiedo verifiche, la memoria viene sostituita ed il server riacceso ma...

Kernel Panic. A quanto pare i problemi di memoria devono aver toccato anche i driver del filesystem o del RAID software corrompendo i dati su disco...

Riavvio da cd di recovery, assembro il RAID software, lancio un fsck che mi dice che sì, il filesystem non è "clean" manco un po', e procede con la recovery che ci impiega mezzo secolo e mi riempe lost+found di files corrotti (roba che non la vedevo dai tempi di ext2).

Alla fine mi restituire un filesystem montabile ma della cui integrità ero pesantemente in dubbio.

Mentre ragiono sul da farsi faccio girare un memtest che mi conferma che almeno le nuove memorie sono correttamente funzionanti.

Decido quindi di tagliare la testa al toro e reinstallare il server da zero. Il che non sarebbe di per se un grosso problema, mi sono scritto una procedura brainless ed ho anche un backup aggiornato di tutta /etc, il vero problema è il restore del backup... una decina di GB da uploadare... tramite una ADSL che fa 50KB/sec di upload, quando va bene...

Ciliegina sulla torta: il mattino seguente sarei dovuto partire per il RiminiComix... decido quindi di rimettere in piedi i sistemi essenziali e di lasciare il resto dell'upload, che avrebbe richiesto almeno un paio di giorni, in carico al Raspberry.

Non male per un banale upgrade i RAM... meno male che almeno sono rientrato nella prima categoria: "quelli che hanno un backup"

Cosa ho imparato da questa esperienza?

  • Il backup e bello, il backup è buono, il backup ti fa dormire sonni tranquilli (ma questo si sapeva già).
  • I tempi di restore in caso di upload sono una spina nel fianco, forse dovrei valutare un secondo backup online...
  • rsync è un gran bel tool, specialmente per la compressione dati in fase di upload.
  • Far girare un memtest dopo un upgrade di RAM prima di riavviare il sistema operativo potrebbe non essere un'idea così folle...
  • Un Raspberry che possa essere lasciato acceso e raggiungibile da remoto può essere molto utile.
  • Anche screen è un gran bel tool, quando si tratta di lasciare delle shell remote in esecuzione.
  • GitLab è una figata, prossimamente posterò anche un howto su come installarlo su Debian integrandolo con un Webserver ed un PostgreSQL già esitenti (che io le informazioni le ho dovute mettere penosamente assieme pescandole da mille guide diverse). EDIT: disponibile qui.

Commenta il post

.

Attenzione: tutti i commenti sono soggetti a moderazione e pertanto non appariranno immediatamente.