Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://www.arcetri.astro.it/irlab/doc/library/linux/AppLinux/al258.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:58 1999
Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 13:25:27 2007
Êîäèðîâêà:
Appunti Linux: Emergenza [inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

199. Emergenza

Nel momento nell'imprevisto si puÐ agire solo se si Õ stati previdenti, pensando ai tipi di situazioni che si possono presentare e preparando gli strumenti necessari in anticipo. Le copie di sicurezza sono la prima cosa da fare per prepararsi ai guai, ma da sole non bastano: occorrono altri strumenti per rimettere in sesto un sistema prima di poter effettuare un eventuale recupero dalle copie.

199.1 Dischetti

Di fronte a un qualunque problema di una gravitÞ tale da non permettere l'avvio di un sistema locale, l'unica possibilitÞ di intervenire Õ data da strumenti su dischetti. Esistono diversi tipi di dischetti che possono essere stati preparati in precedenza:

199.1.1 Dischetti di avvio

Un dischetto di avvio puÐ essere utile quando, per qualche motivo, il metodo normale di caricamento del sistema operativo non funziona piÛ. Esistono almeno tre tipi di dischetti di questo tipo:

199.1.1.1 Settore di avvio senza il kernel

La prima soluzione, quella del dischetto senza kernel, non Õ adatta per avviare un sistema in difficoltÞ: Õ solo un modo per verificare una configurazione di LILO quando non si vuole interferire con l'MBR del disco fisso. In pratica si ottiene semplicemente indicando nel file /etc/lilo.conf la riga boot=/dev/fd0, come nell'esempio seguente:

boot=/dev/fd0
prompt
timeout=50
image=/boot/vmlinuz
    label=linux
    root=/dev/hda2
    read-only

Quando viene avviato l'eseguibile lilo con questa configurazione, si ottiene la scrittura del primo settore del primo dischetto (il dischetto deve essere stato inizializzato in precedenza, che puÐ anche non contenere alcun filesystem). Ma in questo modo si intende che i file per il caricamento del sistema si devono trovare nella directory /boot/ del momento in cui si esegue lilo, e quindi nel filesystem in funzione in quel momento e non nel dischetto. Inoltre, anche il kernel /boot/vmlinuz si intende contenuto in quel filesystem e non nel dischetto.

Quando si avvia con un dischetto fatto in questo modo, il programma contenuto nel primo settore va alla ricerca del kernel, e degli altri file necessari per il caricamento del sistema, nel disco fisso nel momento dell'utilizzo di LILO. Se il sistema non si avvia perchÈ questi file o il kernel sono stati spostati, a nulla serve un dischetto fatto in questo modo.

199.1.1.2 Settore di avvio e kernel

Per fare in modo che il dischetto avvii un kernel contenuto al suo interno, Õ necessario che questo dischetto contenga un filesystem, che vi sia stata copiata la directory /boot/ con il suo contenuto, la directory /etc/ con il file lilo.conf e che sia stata riprodotta la directory /dev/ con il file di dispositivo fd0 (assieme agli altri file di dispositivo necessari a individuare i dischi o le partizioni a cui si vuole fare riferimento). Quindi Õ sufficiente eseguire lilo con l'opzione -r, come descritto nella sezione 9.2.6.

Esiste anche la possibilitÞ di usare SYSLINUX, che permette di realizzare un dischetto con le stesse caratteristiche, e con meno difficoltÞ. SYSLINUX Õ descritto nel capitolo 9.

Rispetto alla prossima tecnica, un dischetto contenente LILO e il kernel, come appena descritto, Õ uno strumento di avvio piÛ completo perchÈ permette di specificare, sia attraverso la configurazione del file /etc/lilo.conf che per mezzo del cosiddetto bootprompt, alcuni parametri di avvio particolari del quale il proprio sistema potrebbe avere bisogno.

199.1.1.3 Immagine del kernel

L'ultima possibilitÞ Õ la piÛ semplice, e sotto questo aspetto anche la piÛ sicura: il file del kernel viene copiato sul dispositivo del dischetto, senza fare uso di alcun filesystem. Si puÐ utilizzare uno dei due modi seguenti.

cp vmlinuz /dev/fd0

dd if=vmlinuz of=/dev/fd0

Evidentemente, il file del kernel Õ speciale perchÈ riesce ad avviare se stesso. Il kernel da solo, perÐ, potrebbe non sapere quale dispositivo contiene il filesystem principale da montare al momento dell'avvio. õ necessario utilizzare il programma rdev per inserire questa e altre notizie nel kernel.

Supponendo che si debba avviare la partizione /dev/hda2, inizialmente in sola lettura, si procede come segue per fare queste annotazioni in un kernel copiato in un dispositivo /dev/fd0.

rdev /dev/fd0 /dev/hda2

rdev -R /dev/fd0 1

199.1.2 Dischetti di una distribuzione

La maggior parte delle distribuzioni GNU/Linux predispone dei dischetti di emergenza che consentono generalmente di accedere al disco fisso e di fare delle piccole riparazioni.

Tra tutti, i dischetti piÛ rudimentali sono quelli della distribuzione Slackware. La loro semplicitÞ Õ da considerare un pregio, dal momento che utilizzandoli ci si trova di fronte un sistema GNU/Linux piÛ o meno tradizionale, senza ottimizzazioni particolari.

199.1.3 Dischetti realizzati appositamente

Ogni sistema ha le proprie caratteristiche ed esigenze. I dischetti di emergenza preparati da altri, oppure ottenuti da una distribuzione GNU/Linux, possono adattarsi a un certo insieme di situazioni, ma non a tutte.

Quando si vuole essere sicuri di avere gli strumenti giusti al momento giusto, occorre che questi siano stati preparati e collaudati bene, in modo da non sprecare tempo inutilmente. In sostanza, la realizzazione o la personalizzazione di dischetti di emergenza Õ una tappa importante per chi vuole amministrare seriamente il proprio sistema.

199.2 Personalizzazione di dischetti di emergenza

L'utilizzo di dischetti di emergenza preparati da altri Õ un buon punto di partenza, ma le particolaritÞ che ogni sistema puÐ avere consigliano almeno una personalizzazione del kernel.

199.2.1 Loopback block device

Per poter costruire o almeno personalizzare dei dischetti di emergenza Õ particolarmente utile attivare nel kernel la gestione diretta delle immagini di questi: Loopback device support ( 19.2.6).

In questo modo, un'immagine non compressa di un dischetto puÐ essere montata con un comando simile a quello seguente:

mount -o loop -t <tipo-di-filesystem> <file-immagine> <punto-di-innesto>

199.2.2 disco RAM

Il filesystem principale puÐ essere caricato in memoria centrale (RAM) e montato da lË. Si ottiene un cosiddetto disco RAM. A parte ogni considerazione sui vantaggi che questo puÐ avere nelle prestazioni del sistema, si tratta di una modalitÞ quasi obbligata per l'utilizzo di dischetti di emergenza. Infatti, un disco RAM puÐ essere ottenuto a partire da un'immagine compressa: Õ il kernel stesso che l'espande in memoria all'atto del caricamento. Quindi, si puÐ fare stare in un dischetto un'immagine di dimensioni superiori alla sua capacitÞ.

Oltre a questo vantaggio, che perÐ richiede la presenza di molta memoria RAM, un dischetto contenente un filesystem che Õ stato trasferito nella RAM, puÐ essere rimosso subito dopo il suo caricamento, permettendo il riutilizzo dell'unitÞ a dischetti, magari per accedere ad altri programmi di utilitÞ non inclusi nel disco RAM.

Per la gestione di un disco RAM occorre che il kernel sia configurato appositamente: RAM disk support ( 19.2.6).

199.2.3 Scostamento (offset)

Quando il kernel carica un disco RAM da un'immagine contenuta in un dischetto, deve conoscere la posizione di inizio di questa immagine. CiÐ Õ importante quando sia il kernel che l'immagine da caricare risiedono nello stesso dischetto. Quando l'immagine da caricare nel disco RAM Õ contenuta in un dischetto separato, questa si troverÞ normalmente a partire dall'inizio di questo, cioÕ da uno scostamento pari a zero.

199.3 Dischetti Slackware

I dischetti della distribuzione Slackware sono i piÛ semplici ed efficaci in situazioni di emergenza. Per essere avviati necessitano di un dischetto di avvio (boot) contenente il kernel, ma questo puÐ essere eventualmente predisposto localmente in modo da avere a disposizione la configurazione piÛ adatta al proprio sistema. Questi dischetti sono reperibili normalmente presso gli indirizzi seguenti:

http://metalab.unc.edu/pub/Linux/distributions/slackware/current/rootdsks/

http://metalab.unc.edu/pub/Linux/distributions/slackware/current/bootdsks.144/

Il dischetto migliore per la soluzione di problemi Õ rappresentato dall'immagine compressa rescue.gz. Se si intende utilizzare anche un dischetto di avvio ottenuto dalla distribuzione, occorre sceglierlo in base alle indicazioni che si trovano nei file di testo inclusi nelle directory indicate.

L'immagine rootdsks/rescue.gz Õ compressa, e contiene in pratica un disco in formato Second-extended (Ext2) di qualche Mbyte. Questo implica che per poterne fare uso occorre molta memoria RAM.

Nelle prime versioni della distribuzione Slackware era distribuita un'immagine rescue.gz molto piÛ piccola, che poteva essere espansa e collocata comodamente su un dischetto da 1440 Kbyte. Questa immagine Õ ancora disponibile e si trova nel percorso rootdsks/obsolete/rescue.gz. Il fatto di poterla decomprimere su un dischetto da 1440 Kbyte permette di evitare il caricamento nella RAM. Per elaboratori aventi fino a 8 Mbyte di memoria RAM, questo Õ l'unico dischetto di emergenza che possa essere utilizzato ragionevolmente.

Se si intende utilizzare l'immagine rootdsks/obsolete/rescue.gz, Õ necessario avviare con un kernel in grado di gestire i vecchi binari a.out.

199.3.1 Organizzazione dei dischetti Slackware

Come giÞ accennato, la distribuzione Slackware mette a disposizione immagini di dischetti di avvio, contenenti essenzialmente il kernel, e di dischetti contenenti il filesystem principale (root).

Le immagini per l'avvio rappresentano dischetti con un filesystem normale, contenente un settore di avvio, la directory /boot/ e il kernel. Si tratta in pratica di dischetti realizzati in modo analogo a quanto descritto in precedenza nella sezione 199.1.1, quando si faceva riferimento a dischetti contenenti questi elementi. Le immagini dei dischetti di avvio, anche se non sono di dimensioni pari a quelle di un dischetto normale, non dovrebbero essere compresse, e si possono copiare semplicemente sul dispositivo del dischetto di destinazione.

dd if=net.i of=/dev/fd0

Le immagini dei dischetti contenenti il sistema minimo (root), sono invece dischetti di qualche Mbyte, compressi in modo da poter essere collocati all'interno di un dischetto da 1440 Kbyte, costringendo perÐ all'uso di un disco RAM.

199.3.2 Utilizzare un kernel personalizzato

Per abbinare un kernel personalizzato a un dischetto contenente il sistema minimo della distribuzione Slackware, si potrebbe ricostruire un dischetto di avvio seguendo le stesse modalitÞ usate dalla distribuzione stessa, oppure in maniera piÛ semplice, copiando il kernel in un dischetto direttamente attraverso il suo dispositivo e poi intervenendo con il programma rdev. Quest'ultima Õ la modalitÞ che viene descritta.

dd if=zImage of=/dev/fd0

La copia di un kernel in un dischetto, attraverso il suo dispositivo, genera il solito dischetto di avviamento giÞ descritto tante volte. Questo kernel su dischetto deve perÐ essere informato di dove e come fare il caricamento del sistema. Il filesystem principale viene caricato da un dischetto, quindi si scrive questo messaggio nel kernel attraverso rdev.

rdev /dev/fd0 /dev/fd0

I dischetti contenenti il sistema minimo della distribuzione Slackware non prevedono il controllo del filesystem e il successivo montaggio in lettura e scrittura. In pratica, il filesystem principale deve essere montato inizialmente in lettura-scrittura.

rdev -R /dev/fd0 0

Infine si deve specificare che:

Per fare questo si agisce su una serie di bit configurabili attraverso rdev con l'opzione -r:

Se si vuole utilizzare il disco RAM si deve utilizzare rdev nel modo seguente:

rdev -r /dev/fd0 49152

infatti, 2^15 + 2^14 + 0 = 49152.

Se invece non si vuole il disco RAM si deve utilizzare rdev nel modo seguente:

rdev -r /dev/fd0 32768

infatti, 2^15 + 0 + 0 = 32768.

199.4 Kernel per dischetti di emergenza

Quando si configura un kernel da utilizzare assieme a dischetti di emergenza, occorre tenere presente che non Õ ragionevolmente possibile utilizzare i moduli, ed Õ importante attivare determinate caratteristiche che di solito non vengono considerate per i sistemi normali.

199.4.1 Tastiera

Quando si usano dei dischetti di emergenza si hanno giÞ molte limitazioni, e a queste si aggiunge anche la scomoditÞ di una tastiera che non combacia con quella USA.

Si puÐ risolvere il problema direttamente nel kernel senza dover tentare di inserire il programma loadkeys in dischetti giÞ troppo piccoli. õ sufficiente trovare il file della mappa della tastiera italiana (di solito si tratta del file it.map collocato nella directory /usr/share/keymaps/<piattaforma>/qwerty/, oppure /usr/lib/kbd/keymaps/<piattaforma>/qwerty/) e quindi generare il sorgente defkeymap.c. Si procede come segue, nel caso si utilizzi la piattaforma i386.

cd /usr/src/linux/drivers/char

loadkeys --mktable /usr/share/keymaps/i386/qwerty/it.map > defkeymap.c

La compilazione successiva di un nuovo kernel utilizzerÞ la mappa italiana come predefinita e non ci sarÞ bisogno di utilizzare loadkeys.

199.5 Cavi

Quando si ha la disponibilitÞ di piÛ elaboratori, Õ probabile che il danno presentatosi su uno di questi non si sia riprodotto in tutti. Una piccola rete locale potrebbe essere di aiuto in situazioni di emergenza e in sua mancanza potrebbero andare bene anche dei cavi paralleli PLIP.

Questo tipo di cavo viene descritto nell'appendice B. La sua realizzazione non Õ difficile: basta un piccolo saldatore, un po' di stagno, due connettori maschi DB-25 e una piattina multipolare con almeno 13 fili. La schermatura non Õ necessaria.

Con i dischetti della distribuzione Slackware, preferibilmente con l'immagine resque.gz, Õ possibile stabilire una semplice connessione con un server NFS.

199.5.1 Ethernet

Attraverso una connessione Ethernet, con un'interfaccia riconosciuta come eth0, si puÐ agire come nell'esempio seguente. Si suppone in particolare che l'indirizzo di rete sia 192.168.1.0, che la maschera di rete sia 255.255.255.0 e di poter utilizzare l'indirizzo IP 192.168.1.17 per l'elaboratore avviato con i dischetti di emergenza.

ifconfig eth0 192.168.1.17 netmask 255.255.255.0

route add -net 192.168.1.0 netmask 255.255.255.0

Per verificare la connessione si puÐ fare un ping verso l'elaboratore da raggiungere: potrebbe trattarsi dell'indirizzo 192.168.1.1.

ping 192.168.1.1

Se tutto Õ andato bene si puÐ procedere. Si suppone che l'elaboratore 192.168.1.1 metta a disposizione il suo filesystem a partire dalla directory radice.

mount -t nfs 192.168.1.1:/ /mnt

199.5.2 PLIP

Nel caso di una connessione PLIP, la procedura Õ un po' differente. In particolare bisogna ricordare che l'elaboratore dal quale si vogliono attingere i dati attraverso il protocollo NFS, deve avere un kernel compilato in modo da gestire questo tipo di connessione.

Si fa riferimento allo stesso esempio riportato nella sezione precedente. L'unica differenza sta nell'interfaccia usata per la comunicazione: si suppone che sia stata riconosciuta la plip1 da entrambi i lati.

Il procedimento di connessione va fatto da entrambi i capi, infatti, raramente un elaboratore ha una connessione PLIP stabile, e di conseguenza non si trova ad avere un indirizzo e una tabella di instradamento giÞ pronti.

Dal lato dell'elaboratore avviato con i dischetti si procede come segue:

rescue# ifconfig plip1 192.168.1.17 pointopoint 192.168.1.1

rescue# route add -host 192.168.1.17 plip1

rescue# route add -host 192.168.1.1 plip1

Dal lato dell'elaboratore server si effettua l'operazione inversa.

server# ifconfig plip1 192.168.1.1 pointopoint 192.168.1.17

server# route add -host 192.168.1.1 plip1

server# route add -host 192.168.1.17 plip1

Per verificare la connessione si puÐ fare un ping.

rescue# ping 192.168.1.1

Se tutto Õ andato bene si puÐ procedere montando il filesystem di rete.

rescue# mount -t nfs 192.168.1.1:/ /mnt

199.5.3 Considerazioni accessorie

Il dischetto di emergenza ha bisogno di un altro punto di innesto per accedere a un disco fisso locale. õ sufficiente creare un'altra directory.

Quando si accede a un server NFS e non Õ possibile farlo mantenendo i privilegi dell'utente root, una semplice copia attraverso cp -dpR non da un risultato garantito: alcuni file potrebbero risultare inaccessibili in lettura. La cosa si risolve facilmente impacchettando quello che serve nell'elaboratore di origine e dando a questo archivio tutti i permessi necessari.

199.6 Utenti e gruppi

Quando si utilizza un sistema operativo minimo, avviato attraverso dischetti di emergenza, per recuperare i dati da uno o piÛ archivi, occorre fare mente locale al problema dell'abbinamento utenti/gruppi, UID/GID.

Trattandosi di un sistema minimo, conterrÞ alcuni nomi di utenti e di gruppi, presumibilmente non «umani», ma comunque esistenti. Solitamente, questi nomi di utenti e di gruppi sono standardizzati, tuttavia il loro abbinamento con numeri UID/GID non Õ sempre uniforme. A questo punto, se si recuperano i dati di un sistema in cui questi nomi non corrispondono esattamente, si rischia di riprodurre una copia differente, che non sarÞ valida quando il sistema normale sarÞ ripristinato.

Se non ci sono alternative, si puÐ accettare l'inconveniente, riavviare il sistema rigenerato e ripetere il recupero. In questo modo, i file verranno sovrascritti e le proprietÞ saranno abbinate in base ai nuovi file /etc/passwd e /etc/group.

In generale, proprio per questo problema, sarebbe opportuno che il dischetto di emergenza contenesse esclusivamente l'indicazione dell'utente e del gruppo root, eliminando qualunque altro tipo di utente di sistema.

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]