mercoledì 23 marzo 2011

downloadfromlist.sh - Salvare contenuti web

Allora ripartiamo.
Ho ripensato a come scaricare i contenuti da internet (pagine, immagini, documenti), praticamente ho rivisto e corretto lo script per la storicizzazione dei contenuti.

Anzitutto, non so che cosa e quanti contenuti voglio scaricare, per questo motivo ho pensato ad un elenco che contenesse
  • URL da scaricare
  • NOME del file scaricato, che nome deve avere una volta scaricato, uguale alla "url" in certi casi e` improponibile, specialmente se contiene caratteri interrogativi o altro
  • TIPO del file che sto` scaricando, per esempio: jpg, pdf, html
E questo e` diventato un file che possiamo chiamare "elenco.txt" e potrebbe contenere questo:
http://srv2.realcam.it/live/pub/12-4.jpg Canazei-Forcella_Pordoi- jpg
http://srv2.realcam.it/live/pub/12-6.jpg Canazei-Marmolada- jpg
http://srv2.realcam.it/live/pub/12-10.jpg Canazei-Lago_e_Passo_Fedaia- jpg
http://webcam.altabadia.org/cam/meteoeye3.jpg Colfosco-Gruppo_Sella_e_Passo_Gardena- jpg
http://www.belledolomiti.it/res/webcam/original/marmolada.jpg Marmolada-Marmolada- jpg
oppure questo:
http://www.dolomitisuperski.com/valfassa/it-IT/previsioni-meteo-val-di-fassa-905IT.html Val_di_Fassa_Meteo- html
http://www.dolomitisuperski.com/valfassa/it-IT/906IT.html Val_di_Fassa_Piste_e_Impianti- html
http://www.dolomitisuperski.com/altabadia/it-IT/previsioni-meteo-alta-badia-644IT.html Alta_Badia_Meteo- html
http://www.dolomitisuperski.com/gardena/it-IT/previsioni-meteo-val-gardena-731IT.html Val_Gardena_Meteo- html
http://www.dolomitisuperski.com/arabba/it-IT/previsioni-meteo-arabba-1080IT.html Arabba_Meteo- html
http://www.dolomitisuperski.com/marmolada/it-IT/previsioni-meteo-marmolada-1171IT.html Marmolada_Meteo- html
http://www.dolomitisuperski.com/it-IT/previsioni-meteo-1939IT.html Dolomiti_Superski_Meteo- html
http://www.dolomitisuperski.com/it-IT/104IT.html Dolomiti_Superski_Piste_e_Impianti- html
http://www.dolomitisuperski.com/it-IT/1971IT.html Dolomiti_Superski_Neve- html
Chiamiamoli "hourlist.txt" il primo e "daylist.txt" il secondo, vedremo poi perche`.

Lo script che ho creato, legge un file di input e lo passa ad una funzione che interpreta la riga ricevuta come parametri per i comandi che contiene, ho aggiunto anche una verifica che la riga letta contenga tutti e tre i parametri.
Visto che il suo utilizzo deve prestarsi al download di contenuti nel tempo, cioe`, scaricare lo stesso gruppo di file (il file elenco) anche piu` volte nell'arco della giornata, per non sovrascrivere i precedenti ho fatto in modo che aggiungesse al "nomefile" da memorizzare richiesto dal file di input, la data completa di ore e minuti.

downloadfromlist.sh:
#!/bin/bash

# Questo batch legge dallo standard input una linea alla volta,
# scaricando la url specificata come primo parametro, assegnandogli
# il nome specificato come secondo, e l'estensione come terzo.
# Aggiunge inoltre ANNO MESE GIORNO ORA MINUTI al nome file salvato.
#
# Il file di input deve quindi essere strutturato in questo
# modo:
#       URL NAME EXT
#
# Il comando dev'essere utilizzato cosi`: $0 < inputfile

# Funzione download e rinomina file
fundwload () {
    # Help
    if [[ $# -ne 3 ]]
        then
            echo "Attenzione, il file di input specificato non contiene tutti i parametri necessari"
            exit 2
    fi
    wget -U mozilla $1 --output-document=$2$(date +%Y%m%d%H%M).$3
}

# Help
if [[ $# -ne 0 || $1 = "-h" ]]
    then
    echo "uso: $0 < inputfile"
    echo "oppure"
    echo "uso: cat inputfile | $0"
    echo ""
    echo "Se non specificata redirezione accetta input manuale"
    exit 1
fi

# Lettura standard input e chiamata alla funzione
while read line
    do
        if [ "$line" != "" ]
            then
                fundwload $line
        fi
done
Io lo utilizzo, col demone "cron", scaricando giornalmente alle ore 12 circa i bollettini meteo, mentre le immagini delle webcam ogni mezz'ora dalle 8 alle 18e30 (ci si potrebbe anche fare un filmato :) ).
Rimane il problema degli scaricamenti "doppi", specialmente nel caso delle immagini webcam, potrebbero non essere state aggiornate nell'ultima mezz'ora (o anche piu`), per eliminare i files superflui a fine giornata ripulisco col programma "fdupes".
Il mio "crontab file" probabilmente chiarisce meglio:
*/30 8-18 * * * cd /home/davide/Documents/Dropbox/Snowboard-Bollettini && /home/davide/Documents/Dropbox/Snowboard-Bollettini/downloadfromlist.sh < /home/davide/Documents/Dropbox/Snowboard-Bollettini/hourlist.txt
2 12 * * * cd /home/davide/Documents/Dropbox/Snowboard-Bollettini && /home/davide/Documents/Dropbox/Snowboard-Bollettini/downloadfromlist.sh < /home/davide/Documents/Dropbox/Snowboard-Bollettini/daylist.txt
2 19 * * * fdupes -dN /home/davide/Documents/Dropbox/Snowboard-Bollettini

Direi una procedura/script decisamente piu` snella e pulita delle precedenti.

lunedì 21 marzo 2011

Script per download e storicizzazione contenuti web (Upgrade)

Ho aggiornato lo script che utilizzo per il download dei bollettini nivometeo e delle pagine web di cui desidero una storicizzazione.

Nuovo script:
#!/bin/bash

# Questo batch legge dallo standard input una linea alla volta,
# scaricando la url specificata come primo parametro, assegnandogli
# il nome specificato come secondo, e l'estensione come terzo.
# Aggiunge inoltre ANNO MESE GIORNO al nome file salvato.
# Se il file scaricato e` uguale al primo precedente lo scarta.
#
# Il file di input deve quindi essere strutturato in questo
# modo:
#       URL NAME EXT
#
# Il comando dev'essere utilizzato cosi`: $0 < inputfile
#
# NOTE:
# Al primo utilizzo viene generato un file di confronto, e` un file
# vuoto che puo`/deve essere eliminato quando almeno un'altro e`
# stato scaricato e salvato.


# Funzione Contolla Scarica E Salva
funcses () {
    ls $2*
    if [ $? != 0 ]
        then
            touch $2$(date +%Y%m%d -d "-1 day").$3
    fi
    wget -U mozilla $1 --output-document=$2$(date +%Y%m%d)-new.$3
    i=0
    while [ -e $2$(date +%Y%m%d)-new.$3 ]
        do
            if [ -e $2$(date +%Y%m%d -d "-$i day").$3 ]
                then
                    diff $2$(date +%Y%m%d -d "-$i day").$3 $2$(date +%Y%m%d)-new.$3 > /dev/null
                    if [ $? != 0 ]
                        then
                            mv $2$(date +%Y%m%d)-new.$3 $2$(date +%Y%m%d).$3
                        else
                            rm $2$(date +%Y%m%d)-new.$3
                    fi
                else
                    $(( i++ )) 2> /dev/null
            fi
    done
    }

# Help
if [[ $# -ne 0 || $1 = "-h" ]]
    then
    echo "uso: $0 < inputfile"
    echo "oppure"
    echo "uso: cat inputfile | $0"
    echo ""
    echo "Se non specificata redirezione accetta input manuale"
    exit 1
fi

# Lettura standard input e chiamata alla funzione
while read line
    do
        if [ "$line" != "" ]
            then
                funcses $line
        fi
done 
Un paio di note:
  • L'aggiornamento/download e` giornaliero
  • Il download viene confontato col precedente e memorizzato solo se diverso
  • E` consigliabile farlo "girare" col demone "cron"

mercoledì 16 marzo 2011

Script per storicizzazione bollettini nivo-meteo (e non solo)

Aggiornato lo script per la storicizzazione dei bollettini nivo-meteo.
Ho strutturato la cosa in due parti, uno script che esegue il download, il controllo ed il salvataggio del bollettino, un file che contiene l’elenco dei bollettini da manipolare, rendendo piu` comoda l’aggiunta futura di ulteriori bollettini, o il riutilizzo dello script per altri scopi (che ho gia` in mente, ma e` un’altra storia).
Lo script e` scritto in “bash”, ovviamente gira su OS *nix/bsd.

Il file, che ho chiamato “elenco”, e` strutturato e contiene la “url” del file da scaricare, uno spazio vuoto, il “nome” del file di destinazione (come volete che venga nominato), uno spazio, il tipo del file che stiamo scaricando, questo e` il mio attuale:
http://www.sian.it/infoMeteo/stampaBollettinoStampa.do?settore=C&pubblicato=true&outputFormat=2&generatorClass=it.sian.mwablx.web.print.DatiStampaBollettinoDG&chiamata=infoMeteo EmiliaRomagna-Valanghe- pdf
http://www.sian.it/infoMeteo/stampaBollettinoStampa.do?settore=B&pubblicato=true&outputFormat=2&generatorClass=it.sian.mwablx.web.print.DatiStampaBollettinoDG&chiamata=infoMeteo Toscana-Valanghe- pdf
http://www.meteotrentino.it/bollettini/today/valanghe_it.pdf Trentino-Valanghe- pdf
http://www.meteotrentino.it/bollettini/today/generale_it.pdf Trentino-Meteo- pdf
http://www.arpa.veneto.it/upload_arabba/bollettini_meteo/dolomitimeteo/dolomitimeteo.pdf Veneto-Dolomiti-Meteo- pdf
http://www.arpa.veneto.it/upload_arabba/bollettini_meteo/dolomitineve/dolomitineve.pdf Veneto-Dolomiti-Valanghe- pdf

http://www.meteoam.it/?q=printpdf/node/10897 AM-Rischio-Valanghe- pdf
http://www.meteoam.it/?q=node/10897 AM-Rischio-Valanghe- html

Lo script e` questo, i commenti all’interno aiutano a capirne il funzionamento:
#!/bin/bash

# Questo batch legge dallo standard input una linea alla volta,
# scaricando la url specificata come primo parametro, assegnandogli
# il nome specificato come secondo, e l'estensione come terzo.
# Aggiunge inoltre ANNO MESE GIORNO al nome file salvato.
# Se il file scaricato e` uguale al primo precedente lo scarta.
#
# Il file di input deve quindi essere strutturato in questo
# modo:
#       URL NAME EXT
#
# Il comando dev'essere utilizzato cosi`: $0 < inputfile
#
# NOTE:
# Al primo utilizzo viene generato un file di confronto, e` un file
# vuoto che puo`/deve essere eliminato quando almeno un'altro e`
# stato scaricato e salvato.


# Funzione Contolla Scarica E Salva
funcses () {
    if [ -e `find -name $2\* | tail -n 1` ]
        then echo ""
        else touch $2$(date +%Y%m%d -d "-1 day").$3
    fi
    wget -U mozilla $1 --output-document=$2$(date +%Y%m%d)-new.$3
    i=0
    while [ -e $2$(date +%Y%m%d)-new.$3 ]
        do
            if [ -e $2$(date +%Y%m%d -d "-$i day").$3 ]
                then
                    diff $2$(date +%Y%m%d -d "-$i day").$3 $2$(date +%Y%m%d)-new.$3 > /dev/null
                    if [ $? != 0 ]
                        then
                            mv $2$(date +%Y%m%d)-new.$3 $2$(date +%Y%m%d).$3
                        else
                            rm $2$(date +%Y%m%d)-new.$3
                    fi
                else
                    $(( i++ )) 2> /dev/null
            fi
    done
    }

# Help
if [[ $# -ne 0 || $1 = "-h" ]]
    then
        echo "uso: $0 < inputfile"
        echo "oppure"
        echo "uso: cat inputfile | $0"
        echo ""
        echo "Se non specificata redirezione accetta input manuale"
    exit 1
fi

# Lettura standard input e chiamata alla funzione
while read line
    do
        if [ "$line" != "" ]
            then
                funcses $line
        fi
done
L’uso e` semplice:
nomedelloscript < inputfile
oppure:
cat inputfile | nomedelloscript
"nomedelloscript" e` il nome del file dello script (come lo avete chiamato), "inputfile" e` l’esempio "elenco" usato sopra. Nel mio specifico caso, ho nascosto i file in una directory del web server e l’aggiornamento dei bollettini e` effettuato una sola volta al giorno dal demone "crontab":
crontab -l
# m h  dom mon dow   command
1 12 * * * cd /var/www/nivometeo/ && . /var/www/nivometeo/.dwlbnm < /var/www/nivometeo/.elenco
2 12 * * * cd /var/www/nivometeo/ && . /var/www/nivometeo/.changepermission
si puo` notare come abbia chiamato lo script “.dwlbnm” ed il file “.elenco” per l’elenco (appunto), la directory “/var/www/nivometeo” e` dove si trovano i file e dove vengono scaricati e memorizzati i bollettini.

mercoledì 9 marzo 2011

Script Bollettini Nivo-Meteo

Script per scaricare e creare un'archivio storico di bollettini nivo-meteo.
Non sto` a descriverlo perche` mi sembra molto semplice.
#!/bin/bash

wget "http://www.sian.it/infoMeteo/stampaBollettinoStampa.do?settore=C&pubblicato=true&outputFormat=2&generatorClass=it.sian.mwablx.web.print.DatiStampaBollettinoDG&chiamata=infoMeteo" --output-document="EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e EmiliaRomagna-Valanghe-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff EmiliaRomagna-Valanghe-$(date +%Y%m%d -d "-$i day").pdf EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf EmiliaRomagna-Valanghe-$(date +%Y%m%d).pdf
      echo "mv EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf EmiliaRomagna-Valanghe-$(date +%Y%m%d).pdf"
     else
      rm EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: EmiliaRomagna-Valanghe-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget "http://www.sian.it/infoMeteo/stampaBollettinoStampa.do?settore=B&pubblicato=true&outputFormat=2&generatorClass=it.sian.mwablx.web.print.DatiStampaBollettinoDG&chiamata=infoMeteo" --output-document="Toscana-Valanghe-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e Toscana-Valanghe-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e Toscana-Valanghe-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff Toscana-Valanghe-$(date +%Y%m%d -d "-$i day").pdf Toscana-Valanghe-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv Toscana-Valanghe-$(date +%Y%m%d)-new.pdf Toscana-Valanghe-$(date +%Y%m%d).pdf
      echo "mv Toscana-Valanghe-$(date +%Y%m%d)-new.pdf Toscana-Valanghe-$(date +%Y%m%d).pdf"
     else
      rm Toscana-Valanghe-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: Toscana-Valanghe-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget http://www.meteotrentino.it/bollettini/today/valanghe_it.pdf --output-document="Trentino-Valanghe-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e Trentino-Valanghe-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e Trentino-Valanghe-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff Trentino-Valanghe-$(date +%Y%m%d -d "-$i day").pdf Trentino-Valanghe-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv Trentino-Valanghe-$(date +%Y%m%d)-new.pdf Trentino-Valanghe-$(date +%Y%m%d).pdf
      echo "mv Trentino-Valanghe-$(date +%Y%m%d)-new.pdf Trentino-Valanghe-$(date +%Y%m%d).pdf"
     else
      rm Trentino-Valanghe-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: Trentino-Valanghe-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget http://www.meteotrentino.it/bollettini/today/generale_it.pdf --output-document="Trentino-Meteo-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e Trentino-Meteo-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e Trentino-Meteo-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff Trentino-Meteo-$(date +%Y%m%d -d "-$i day").pdf Trentino-Meteo-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv Trentino-Meteo-$(date +%Y%m%d)-new.pdf Trentino-Meteo-$(date +%Y%m%d).pdf
      echo "mv Trentino-Meteo-$(date +%Y%m%d)-new.pdf Trentino-Meteo-$(date +%Y%m%d).pdf"
     else
      rm Trentino-Meteo-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: Trentino-Meteo-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget http://www.arpa.veneto.it/upload_arabba/bollettini_meteo/dolomitimeteo/dolomitimeteo.pdf --output-document="Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e Veneto-Dolomiti-Meteo-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff Veneto-Dolomiti-Meteo-$(date +%Y%m%d -d "-$i day").pdf Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf Veneto-Dolomiti-Meteo-$(date +%Y%m%d).pdf
      echo "mv Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf Veneto-Dolomiti-Meteo-$(date +%Y%m%d).pdf"
     else
      rm Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: Veneto-Dolomiti-Meteo-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget http://www.arpa.veneto.it/upload_arabba/bollettini_meteo/dolomitineve/dolomitineve.pdf --output-document="Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e Veneto-Dolomiti-Valanghe-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff Veneto-Dolomiti-Valanghe-$(date +%Y%m%d -d "-$i day").pdf Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf Veneto-Dolomiti-Valanghe-$(date +%Y%m%d).pdf
      echo "mv Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf Veneto-Dolomiti-Valanghe-$(date +%Y%m%d).pdf"
     else
      rm Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: Veneto-Dolomiti-Valanghe-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget -U mozilla http://www.meteoam.it/?q=printpdf/node/10897 --output-document="AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf"
i=0
while [ -e AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf ]
 do
  if [ -e AM-Rischio-Valanghe-$(date +%Y%m%d -d "-$i day").pdf ]
   then
    diff AM-Rischio-Valanghe-$(date +%Y%m%d -d "-$i day").pdf AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf > /dev/null
    if [ $? != "0" ]
     then
      mv AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf AM-Rischio-Valanghe-$(date +%Y%m%d).pdf
      echo "mv AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf AM-Rischio-Valanghe-$(date +%Y%m%d).pdf"
     else
      rm AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf
      echo "REMOVED: AM-Rischio-Valanghe-$(date +%Y%m%d)-new.pdf"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

wget -U mozilla http://www.meteoam.it/?q=node/10897 --output-document="AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html"
i=0
while [ -e AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html ]
 do
  if [ -e AM-Rischio-Valanghe-$(date +%Y%m%d -d "-$i day").html ]
   then
    diff AM-Rischio-Valanghe-$(date +%Y%m%d -d "-$i day").html AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html > /dev/null
    if [ $? != "0" ]
     then
      mv AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html AM-Rischio-Valanghe-$(date +%Y%m%d).html
      echo "mv AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html AM-Rischio-Valanghe-$(date +%Y%m%d).html"
     else
      rm AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html
      echo "REMOVED: AM-Rischio-Valanghe-$(date +%Y%m%d)-new.html"
    fi
   else
    $(( i++ )) 2> /dev/null
    echo $i
  fi
done

Riferimenti:
http://blog.snowboardactivity.dreamhosters.com/2011/03/13/bollettini-nivometeo/

Test Raid

Anzitutto, stiamo parlando di questa scheda qui:
$ lspci | grep RAID
00:1f.2 RAID bus controller: Intel Corporation 82801GR/GH (ICH7 Family) SATA RAID Controller (rev 01)

Ho avuto la bellissima idea di testare il raid (funzionante) dopo un'aggiornamento a "squeeze".
Spengo, distacco il cavo SATA da uno dei due HDD in mirror, accendo, tutto bene, spengo di nuovo e ripeto per l'altro dico, ancora tutto bene, nel mentre, le schermate di avvio della motherboard mostrano a video indicazioni "degraded" del raid.
Rimetto tutto a posto, riavvio, la motherboard mi dice che i dischi sono da "risincronizzare" (non ricordo il termine esatto), mi scrive che e` un'operazione che non puo` fare, devo farla da sistema operativo.
Una volta avviato il sistema, mi accorgo in effetti della presenza di un "nosync" nel raid dei due dischi.
E qui parte la mia cavolata (forse), vedo che per il "rebuild" del raid il comando e` "dmraid -R noemdelraid", lancio e va in "errore", analizzo velocemente la situazione, il raid ha perso completamente un disco, non convinto di tutto cio`, ho avuto la bellissima idea di riavviare il sistema.
Al riavvio del sistema, i messaggi della motherboard mi dicono che non c'e` un raid, che uno dei due dischi (il secondo ?) e` "unknown" e che l'altro e` "undefined".
Penso, decido e faccio un riavvio del computer tramite una 'knoppix' live, questa mi vede due dischi, ma ci dormo su e al mattino ho un dubbio, uno dovrebbe essere uno dei due del raid, ma l'altro e` il terzo disco, perche` questo pc ha 3 dischi, non due.
Comunque, poi verifichero` questi dischi "visti" dal sistema, ma adesso le vie del ripristino mi sembrano due e devo sceglierne una, tentare un ripristino da utility di motherboard, o tentare un ripristino software, di certo, la prima cosa da fare e` procurarmi un disco da almeno 400GB per salvare i dati di quel disco visto da knoppix (ho il backup, ma uno in piu` non fa` mai male).
Scrivendo e pensando al fatto che da 'knoppix' mi riconosce un raid degradato, penso che optero` per cercare di ripristinare la situazione da sistema operativo, guardando bene (poi ricontrollero`), i comandi dovrebbero essere:
"dmraid -R nomeraid /dev/disco"
il resto, spero, dovrebbe venire da se, cioe`, una volta ripristinata la cosa, la motherboard dovrebbe riconoscere il raid .. o no ?
Ho verificato, i dischi visti dalla "live" sono i due del raid, il terzo e` in LVM, quindi, posso pensare che abbiano perso la 'firma' di dischi in raid.
Ricapitoliamo:
  • /dev/sda1 e /dev/sda2 sembrano funzionare
  • il sistema (motherboard) non li riconosce (unknown e undefined)
  • dmraid vede solo uno dei due
  • il sistema (colpa della motherboard ?) non si avvia

Non so se ricordo/mi sono scritto proprio tutto, ma provo ad elencare i passi eseguiti per il ripristino del raid.
Tutte (o quasi) le operazioni/comandi sono state eseguite con la "Knoppix Live".

# dmraid -s
ERROR: isw: Could not find disk /dev/sdb in the metadata
ERROR: isw: wrong number of devices in RAID set "isw_iehdefhej_raid" [1/2] on /dev/sda
*** Group superset isw_iehdefhej
--> *Inconsistent* Subset
name   : isw_iehdefhej_raid
size   : 781416448
stride : 128
type   : mirror
status : inconsistent
subsets: 0
devs   : 1
spares : 0

# dmraid -r
ERROR: isw: Could not find disk /dev/sdb in the metadata
/dev/sda: isw, "isw_iehdefhej", GROUP, ok, 781422766 sectors, data@ 0

Forse dimentico qualcosa, ho lanciato il comando per la distruzione del raid:
# dmraid -x
ERROR: isw: Could not find disk /dev/sdb in the metadata
ERROR: isw: wrong number of devices in RAID set "isw_iehdefhej_raid" [1/2] on /dev/sda

About to delete RAID set isw_iehdefhej_raid

WARNING: The metadata stored on the raidset(s) will not be accessible after deletion
Do you want to continue ? [y/n] :y

Poi l'ho ricreato col comando:
# dmraid -f isw -C isw_raid --type 1 --disk "/dev/sda /dev/sdb"

Riavviando il sistema, nella schermata della motherboard e` ricomparso il raid, la 'knoppix' dice che si chiama "isw_b....", monto il raid tramite distro live e modifico/correggo il file "/etc/fstab".
Non resta che riavviare ..

martedì 1 marzo 2011

Debian 6, Xen kernel, Nvidia

Ho effettuato l'upgrade senza verificare la combinazione in oggetto, ovviamente cerchi di pensare a tutto, tralasciando l'unica cosa che creera` dei problemi.

Ho effettuato l'upgrade come da manuale, ma visto che l'errore e` sempre in agguato, ho dimenticato una parte, che mi ha fatto perdere un paio d'ore per riavere un sistema avviabile con il nuovo kernel XEN.

Passo al test della macchina virtuale e non funziona (la rete), ho scoperto piu` tardi che era solo a causa delle modifiche al file /etc/network/interfaces apportate da un nuovo "Network Manager" (o robe simili), reimpostato come in precedenza, la virtualizzazione ha ripreso a funzionare.

E cosi` e` passata la prima mezza giornata.

Rimane da configurare la scheda video, mi ricordavo (e` anche scritto in un'altro post di questo blog) di aver installato i driver forniti dal produttore, procedo ..
niente da fare, non va neanche su, insmod/modprobe falliscono il caricamento.
Mi "azzero", cerco informazioni in rete, decido di ripartire installando in "debian-way", il modulo si compila e si carica, ma non funziona, provo di nuovo la "nvidia-way", il modulo (questa volta) si compila e si carica, ma non funziona.
Ho provato e riprovato varie configurazioni "xorg.conf", perche` non avevo errori da verificare nei files di log, finche` non ho buttato l'occhio e analizzato linea per linea il report d'avvio del sistema (dmesg).
A questo punto, una "non" breve ricerca in rete mi ha permesso di capire che avevo un problema, controprova di cio`, avviando con il kernel base, la mia configurazione originale di 'xorg' funziona benissimo.

Mi sa che dovro` rimanere in attesa della risoluzione di questo bug, o cambiare scheda video, o provare a creare un kernel xen personalizzato, ma dubito che quest'ultima soluzione funzioni.

Altra soluzione, trasferisco la macchina virtuale su un 'vero' pc (?!?!).

Certo che, per un utente "medio", tutto questo e`/sarebbe veramente frustrante e disincentivante per l'utilizzo di un sistema operativo alternativo (come Linux), vero che questo utente installerebbe un VMWare o VirtualBOX, ma resta pur sempre un problema quello dei driver di queste schede video, hanno un sacco di lavoro/configurazione manuale per farle funzionare/rendere a dovere.