Valokuvien pelastus muistikortilta

Yllättäen tuli ongelmia muistikortin kanssa ja jouduin etsimään Linuxilla toimivaa kuvien pelastusohjelmaa. Vaihtoehtoja ei pahemmin ollut, mutta Flashrecover hoiti homman riittävän hyvin.

Pelkkä kuvien pelastus itsessään oli hyvin yksinkertainen:

  1. Kortinlukijan avulla luetaan muistikortista image dd-ohjelmalla. (dd if=/dev/sda of=kortti.img)*
  2. Käsitellään image Flashrecoverilla. (flashrecover.pl kortti.img)
  3. Ohjelma tallentaa kaikki löydetyt kuvatiedostot työhakemistoon, joten enää tarvitsee jollakin kuvienselailuohjelmalla napsia käyttökelpoiset talteen.
  4. Lopuksi kirjoitin kortin täyteen nollaa, jotta myöhemmin vastaava pelastusoperaatio olisi vähän nopeampi. (dd if=/dev/zero of=/dev/sda)* (Luonnollisesti tämä kannattaa tehdä vasta sitten, kun homma on varmasti ohi… ;-) )

* /dev/sda on kortinlukijan laitetiedosto, joka saattaa vaihdella laitteistosta riippuen.

Kaikki kuvat löytyivät ja lisäksi löytyi luonnollisesti paljon aiemmin poistettuja kuvia. Ainut ongelma oli Exif-tietojen puuttuminen kuvista. Ohjelma oli kuvien lisäksi tallentanut exif-tiedot sisältäviä tiedostoja, jotka oli nimetty: Damaged{numero}.jpeg.

Exif-tietojen kopiointi pelastettuihin kuviin onnistui jhead -ohjelmalla.

Kopiointia ei kumminkaan tarvinnut tehdä yksitellen jokaista tiedostoa varten vaan, kun ehjät kuvatiedostot, jotka ohjelma oli nimennyt muotoon Cluster{numero}.jpeg ja exif-tiedot sisältävät tiedostot järjesti lopussa olevan numeron perusteella, menivät saman kuvan kuvatiedosto ja exif-tiedosto sopivasti peräkkäin, joten tiedot oli helppo kopioida seuraavanlaisella skriptillä:

! /bin/bash

Järjestetään lopussa olevan numeron perusteella,

joka alkaa 8. merkistä.

tiedostot=(ls *jpeg | sort -k 1.8n) count=$[ls *jpeg 2> /dev/null | wc -l - 1]

Käydään läpi kaikki tiedostot ja mikäli Damaged- ja

Cluster-alkuiset tiedostot ovat peräkkäin, kopiodaan

exif-tiedot

for i in seq 0 $count; do if [[ ${tiedostot[$i]} == Damaged* ]]; then if [[ ${tiedostot[$i+1]} == Cluster* ]]; then echo “Kopioidaan exif: ${tiedostot[$i]} -> ${tiedostot[$i+1]}” jhead -te ${tiedostot[$i]} ${tiedostot[$i+1]} fi fi done

Loppuen lopuksi sain siis kuvat ihan normaalia kamerasta kiskottua vastaavaan muotoon, mutta olihan tässä työtä jonkin verran. :-)

Päivitetty 6.11.2013

Aiemmin linkittämäni littlethorpe.net sivusto on lakannut vastaamasta ehkä jo joiamia vuosia sitten, joten korvasin linkin Archive.org -palvelun versiolla.

Huomasin ongelman käydessäni blogiarkistoja läpi Utterson -skriptillä.

blog comments powered by Disqus