30 de març del 2013

Recuperant dades dun disc dur malmès (2)

Tal com vaig prometre, acabaré l'article sobre com recuperar dades d'un disc dur malmès. Havíem acabat de llegir el suport original (el disc dur) i tenim sobre un ordinador bo la imatge llegida amb ddrescue.

Si, pel motiu que sigui hem fet el procés en dues vegades i tenim dues imatges i dos fitxes de registre, el primer serà unir-los en un de sol:
$ sudo ddrescue -m recovery_2.log hddimage_2.img \
                                   hddimage.img recovery.log
El resultat quedarà unit a hddimage.img i recovery.log.

Quan ja tenim una imatge final (suposem hddimage.img), i si l'estructura de directoris no està corrupte, la podem muntar directament i veure'n el seu contingut amb:
$ sudo mkdir /media/hddrec
$ sudo mount -o loop –t ntfs hddimage.img /media/hddrec
Alternativament, la podem copiar sobre una nova partició d'un disc dur sa (COMPTE, s'esborrarà la partició destí i tot el seu contingut !!!), utilitzant la comanda següent:
$ sudo dd if=hddimage.img of=/dev/sdb1
En aquest cas, s'ha copiat la imatge sobre la primera partició d'un disc extern a /dev/sdb. Lògicament, la partició destí ha de ser més gran, o com a mínim igual, que la partició original.

Si contenia errors, podem provar de reparar-los amb:
$ sudo ntfsfix /dev/sdb1
I si tot va bé, ja la podrem muntar normalment. Com a darrer recurs, sempre podem deixar que sigui un sistema Windows qui provi de fer la reparació de la partició.

Si malgrat tots els esforços no podem reparar la partició per poder-la muntar i veure el seu contingut, sempre ens queda un parell de recursos finals. En primer lloc, tenim foremost:
$ sudo apt-get install foremost
$ sudo foremost -i hddimage.img -o recovery_dir
Aquesta utilitat ens recupera els fitxers que troba a la imatge, llegint-los en brut (identificant capçaleres) i ens els agrupa per tipus. El problema és que perdem l'estructura de directoris i el nom dels fitxers, pel que ens podem trobar amb un mar de directoris i fitxers. Però pot ser el darrer recurs per recuperar aquell full de càlcul, base de dades, o el document de la tesi...

En segon lloc tenim photorec (forma part del conjunt d'eines testdisk). El podem utilitzar amb:
$ sudo apt-get install testdisk
$ sudo foremost -i hddimage.img -o recovery_dir
Funciona de manera similar al foremost, però enlloc d'agrupar els fitxers per tipus ho fa per directoris.

I bé, aquestes són les eines que espero que mai no hàgiu de fer servir. Acabo com vaig començar, amb un savi consell que potser no apreciareu fins que ja sigui massa tard:

Feu còpies de seguretat de les vostres dades !!!


Imatge: 'Flood Files' http://www.flickr.com/photos/11018968@N00/859824333 Trobada a flickrcc.net

26 de març del 2013

Recuperant dades dun disc dur malmès

Feu còpies de seguretat de les vostres dades. Això és la millor garantia de poder recuperar les vostres dades quan el disc dur falli. No si falla. Quan falli.

Feta l'advertència de rigor, vaig a documentar una sessió real de recuperació d'un disc dur d'un portàtil que es va fer malbé per una mala caiguda. Els símptomes inicials eren:
  • El windows (sic, què voleu, el portàtil no era pas meu) no arrenca.
  • Al muntar el disc en una carcassa externa només es pot accedir a la partició de recuperació de fàbrica (típica d'un portàtil), però no a la del sistema i les dades (partició única, ja he dit que el portàtil no era meu!).
Les dades que contenia eren prou valuoses per a la seva propietària, però no prou per portar-lo a una empresa especialitzada. Per sort, tenim grans eines de codi obert amb les quals provar de recuperar les dades en un cas així. En concret, utilitzarem l'eina ddrescue de GNU (compte no confondre amb dd_rescue, que és una eina complement diferent). Això i els consells dels experts. Així que, abans de res, instal·lem l'utilitat esmentada:
$ sudo apt-get install gddrescue
La primera cosa a tenir present a l'hora de recuperar un disc dur malmès, és que aquest pot morir del tot en qualsevol moment. Per tant, és important fer una còpia de les dades que es pugui sobre un altre disc dur, per poder treballar després amb aquesta imatge.

L'aplicació ddrescue ens permet anar recuperant part de les dades del disc dur en diferents sessions i utilitzant diverses estratègies, per anar-les afegint a una imatge que es va completant amb les noves dades. Per això utilitza un fitxer de registre on guarda informació sobre els sectors que ha anat llegint, quins sectors contenen errors, etc...

Per tant, és prioritari llegir de seguida la part corresponent al sistema de fitxers:
$ ddrescue -i0 -s50M /dev/sdc3 hddimage.img recovery.log
Amb aquesta comanda llegim la tercera partició dels disc dur /dev/sdc i creem una imatge hddimage.img i un fitxer de registre recovery.log en el directori actual. En concret llegim 50 MB (-s50M) a partir de l'inici de la partició (-i0).

En cas que es generin errors, cal mirar de salvar com a mínim el primer MB (li deixem fins a tres re-intents de lectura, amb -r3) amb:
$ ddrescue -i0 -s1M -d -r3 /dev/sdc3 hddimage.img recovery.log
En el meu cas vaig poder recuperar aquesta part sense problemes, en qüestió de minuts. A partir d'aquí, cal salvar les dades bones el més ràpidament possible:
$ ddrescue -v -i0 --min-read-rate=1M --no-split \
                           /dev/sdc3 hddimage.img recovery.log
La comanda força una velocitat de lectura mínima de 1 Mbps. És a dir, que es saltarà els sectors malmesos per llegir primer els que són correctes. Si el disc està força bé, anirà ràpid, però en el meu cas, el disc estava "trinxat", amb molts sectors tocats i saltejats, pel que va ser un procés lent. Calculo que ben bé unes 40 hores, que van permetre recuperar un 95% de les dades. Com acostuma a passar, no va poder recuperar els fitxers més preuats.

Tos seguit es llegeix la resta del disc (si encara aguanta):
$ sudo ddrescue -v -i0 /dev/sdc3 hddimage.img recovery.log
$ sudo ddrescue -v -i0 -r3 /dev/sdc3 hddimage.img recovery.log
Les dues comandes proven de llegir la part pendent del disc, la primera directament, la segona amb tres re-intents. Aquest procés va trigar en el meu cas al voltant de 500 hores (més de dues setmanes i mitja, nit i dia funcionant). Creieu-me: feu còpies de seguretat de les vostres dades.

La imatge mostra un moment del procés:

La bona notícia és que es va poder recuperar el 99.9% de les dades, inclosos els fitxers desitjats.

I com que ja m'he allargat molt per un sol article, deixaré per un altre dia com muntar i restaurar imatges, recuperar dades si el sistema de fitxers està malmès i altres cosetes relacionades. Serà aviat. De veritat.

10 de febrer del 2013

L'infern de la conversió de caràcters (codificacions)

Quan obrim un document de text, habitualment el sistema reconeix la codificació de caràcters correcta i ens mostra el seu contingut sense problemes. De vegades, però, no està tant clar i ens ha de preguntar quina codificació de caràcters té el document: UTF-8, ISO8859-1, o encara alguna altra? Sovint podrem resoldre aquests casos amb prova i error, si més no.

Si voleu saber més sobre la codificació de caràcters i el problema que pot suposar, us recomano llegir l'article (està en anglès) "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)" de Joel Spolsky. Absolutament recomanable.

Us explico això perquè fa uns dies, movent una base de dades de LibreOffice a un servidor extern MySQL, em vaig trobar amb un document UTF-8 que contenia caràcters Unicode (del tipus \uXXXX) entre mig. És a dir, una barreja de codificacions de caràcters en el mateix document, pel que no serveixen de res les clàssiques eines de transformació entre codificacions.

Ja em veia substituint els caràcters a mà, quan vaig arribar a la meva salvació: la pàgina http://rishida.net/tools/conversion/. Tal com es veu a la imatge de sota, aquesta web permet transformar codificacions barrejades de caràcters cap a diferents formats.


En el meu cas, vaig enganxar el text problemàtic a "Mixed Input" per recollir els caràcters UTF-8 normals a "Characters".

No cal ni dir que aquesta pàgina ja figura entre les meves adreces d'interès, en un lloc de privilegi.

2 de febrer del 2013

Wifi ON/OFF amb un botó a Gargoyle (TP-Link TL-WR1043ND)

Tal com vaig "amenaçar" després de posar Gargoyle (Openwrt) a un router  TP-Link TL-WR1043ND, penso continuar escrivint sobre el mateix tema. Concretament, avui serà sobre com utilitzar el botó de QSS de l'encaminador per activar/desactivar la xarxa sense fils.


Ja fa molt de temps que procuro tenir la xarxa sense fils desactivada quan no l'utilitzo. Alguns encaminadors porten un botó per fer-ho, però n'hi ha pocs. I el meu flamant TP-Link TL-WR1043ND no és un d'aquests.

Però, justament, la gràcia de posar-hi un firmware de codi obert és la llibertat d'afegir noves funcionalitats. De fet, hi ha un paquet anomenat wifitoggle que hauria de fer la feina, però que fins fa dos dies (literalment) estava trencat. I encara caldrà esperar fins que arribi una versió de Gargoyle on estigui corregit. Així que, de moment, ho solucionarem d'una altra manera.

En primer lloc, accedim a l'encaminador per ssh i creem un script anomenat wifionoff, copiant-lo a /sbin i sense oblidar-nos de fer que sigui executable:
#!/bin/sh

# Copiar a /sbin/wifionoff
# Fer executable amb chmod +x /sbin/wifionoff
# Afegir controls del butons a /etc/config/system

SW=$(uci -q get wireless.@wifi-device[0].disabled)

if [ "$SW" == "0" ] ; then
 echo 0 > /sys/class/leds/tp-link\:green\:qss/brightness
else
 echo 1 > /sys/class/leds/tp-link\:green\:qss/brightness
 echo timer > /sys/class/leds/tp-link\:green\:qss/trigger
 echo 2000  > /sys/class/leds/tp-link\:green\:qss/delay_off
 echo 2000  > /sys/class/leds/tp-link\:green\:qss/delay_on
fi

[ "$SW" == "1" ] && uci set wireless.@wifi-device[0].disabled=0
[ "$SW" == "1" ] || uci set wireless.@wifi-device[0].disabled=1
wifi
Tot seguit, haurem d'afegir controls pels botons a /etc/config/system (editant amb vi):
config 'button' 'wifionoff'              
        option 'button' 'wps'            
        option 'action' 'pressed'        
        option 'handler' '/sbin/wifionoff'
                                          
config led 'led_onoff'                    
        option 'sysfs' 'tp-link:green:qss'
        option 'trigger' 'timer'          
        option 'mode' 'link'              
        option 'default' '1'              
        option 'delayon' '2000'           
        option 'delayoff' '2000'          
I bàsicament ja ho tenim. Reiniciem l'encaminador amb reboot i ara el botó QSS ens permet engegar i parar la xarxa sense fils quan vulguem (sense haver d'utilitzar la interfície web). A més, el LED de dalt de tot, QSS, parpelleja lentament quan la xarxa sense fils està activa.

Útil, veritat?

26 de gener del 2013

Gargoyle (Openwrt) en un router TP-Link TL-WR1043ND

Aquest estiu passat vaig decidir actualitzar el meu encaminador (router) per tenir millor cobertura i prestacions, gràcies a utilitzar un firmware de codi obert basat en Linux. Des de llavors que tinc pendent de parlar-ne, així que aquest serà el primer article d'una petita sèrie.

Sense donar-hi més voltes, us presento l'encaminador escollit:


Es tracta d'un encaminador neutre (sense ADSL) tipus N (fins a 300Mbps), però que opera en la banda dels 2.4GHz. Hauria estat millor un de doble banda, però el preu seria molt diferent i, de totes maneres, tampoc tinc cap dispositiu que hi pugui treballar.

Els motius per a la seva elecció van ser, per ordre d'importància subjectiva:
  • Suporta el firmware de codi obert Openwrt i el seu derivat Gargoyle.
  • Preu ajustat (menys de 45€ des d'Amazon, més transport).
  • 4 ports Gigabit.
  • Wireless N, 300Mbps.
  • Estèticament agradable.
  • Port USB.
El contingut de la caixa el podeu veure en la imatge de sota: el router amb les seves tres antenes, l'alimentador, un cable de xarxa, un CD i 4 fulls d'instruccions i garanties. Res de particular.



El primer accés al router es fa anant a l'adreça:
http://192.168.1.1

Login:  Admin
Password: Admin
A partir d'aquí, anem al menú System Tools -> Firmware Upgrade i seleccionem el firmware descarregat. En el meu cas, actualment Gargoyle 1.5.9 (inicialment 1.4.7).

Aneu amb compte, però, ja que hi ha diverses revisions del maquinari del router, i cal saber exactament el firmware que cal posar, perquè sinó el router es pot quedar bloquejat (tot i que pot ser recuperable amb un cable RS232 i tres soldadures a la placa).

Per tant, abans de fer res, llegiu la magnífica informació de la wiki de suport. I, en cas que tingueu preguntes, no dubteu en consultar-me, que provaré d'ajudar-vos en tot allò que pugui.

En fi, després d'un parell de minuts, l'actualització del firmware estarà completa i ja podrem accedir al router amb:
http://192.168.1.1

Password: password

El primer que haurem de fer és canviar la clau d'accés i configurar l'encaminador segons les nostres necessitats.

Arribats en aquest punt, potser us estareu preguntant si val la pena canviar el firmware original. Mireu la imatge de sota. El firmware original del vostre router us permet controlar l'ample de banda que consumeix cada ordinador de la vostre xarxa?


Amb Gargoyle (o Openwrt) podreu:
  • Conprovar i enregistrar l'ample de banda que consumeix cada ordinador de la xarxa.
  • Tenir més d'una xarxa wifi funcionant al mateix temps en el router (p.e. una de principal i una de secundària per a convidats).
  • Fixar límits i quotes de pujada i baixada per cada ordinador, de tal manera que cap d'ells pugui consumir tot l'ample de banda.
  • Engegar i apagar la xarxa wifi prement un botó (o fins i tot automàticament).
  • Compartir arxius en xarxa endollant un disc dur o llapis USB al router.
  • I moltes altres coses més (servidor web, control domòtic, etc...). Al cap i a la fi, tenim un Linux corrent en el router.
Bé, per avui ja n'hi ha prou. En propers articles aniré documentant algunes d'aquestes possibilitats.espero que ho trobeu interessant.

19 de gener del 2013

Actualització Android 4.1.2 pel Samsung Galaxy S3

Uns mesos després de l'arribada de Jelly Bean, el Samsung Galaxy S3 rep una nova actualització. En aquest cas, rep la versió 4.1.2 d'Android.

En la imatge, a l'esquerra, es pot veure la mida de l'actualització, al centre tenim detalls de la nova versió, un cop ja la tenim instal·lada, i finalment a la dreta es pot veure en funcionament una de les principals novetats d'aquesta versió: la finestra múltiple.

Aquesta nova versió porta novetats interessants, moltes d'elles provinents del Galaxy Note 2:
  • Finestra múltiple per mantenir obertes dues aplicacions i canviar ràpidament entre elles (s'activa prement la tecla de tornar enrere un parell de segons).
  • Galeria de fotos millorada.
  • Millores a l'aplicació de càmera.
  • Noves aplicacions Paper Artist (efectes creatius per fotos) i Group Cast (compartir documents, presentacions or imatges en temps real amb un grup d'amics).
  • Altres millores en NFC, resposta tàctil, reconeixement de posició, etc...
En resum, una actualització interessant que ja està arribant als mòbils lliures. Tant de bo Samsung Espanya tractés igual de bé els seus clients. Llavors tot seria perfecte.

12 de gener del 2013

LibreOffice Calc: buscar la posició d'una cel·la en una columna

Seguint amb els articles sobre el LibreOffice Calc, avui explicaré com buscar informació en una taula a partir de les dades que tenim en una cel·la. No sé si s'entén alguna cosa.

Millor posem un exemple. Tenim una llista amb informació de conjunts de LEGO en un full de càlcul, on en cada línia hi ha diversa informació sobre una caixa concreta:


Ara, en un altre full, volem indicar quins conjunts hem regalat a cada nen, per evitar repetir regals en un futur. Evidentment, podem anar repetint la informació copiant-la a mà del primer full, però hi ha una manera automàtica de fer-ho: amb la funció CONSULTAV:


El significat dels arguments és el següent:
  • Criteri de cerca: el valor de referència que es buscarà en la primera columna de la matriu indicada. En l'exemple, el contingut de la cel·la B3.
  • Matriu: lloc on estan les dades que busquem. En l'exemple, es troben en el full 'LEGO Sets'.
  • Índex: número de columna a retornar, dins la matriu. En l'exemple, la primera correspon a '# Set', la segona a 'Família', que és la que ens interessa.
El funcionament és el següent: es busca el contingut indicat en el criteri de cerca (el contingut de la cel·la B3, el valor 7654) en la primera columna de la matriu indicada. Si es troba el valor (en aquest cas està a la fila 23), es retorna el contingut de la columna indicada en l'índex de la mateixa fila (en l'exemple, el text 'Star Wars').

D'aquesta manera, podem continuar omplint el full, utilitzant una fórmula similar però amb índex 3 per retornar la descripció. Així, si canviem el número de set, automàticament ens canviarà la família i la descripció:



Fixeu-vos com hem bloquejat la matriu i el criteri de cerca afegint un '$' davant de l'indicador de fila i columna, per tal de poder copiar les fórmules sense problemes en les files següents. També podeu veure en la fila 5 el resultat que es retorna quan no existeix el valor buscat.

Bé, d'entrada pot semblar complicat, però no hi ha res com experimentar una mica per veure-ho clar. Quan ho domineu, no podreu viure sense ! Ja ho veureu.