Archives Mensuelles: septembre 2012

Récupérer des données sur un disque RAID 1 issu d’un synology

Suite à une boulette de ma part mon Synology est HS (ne jamais faire un reboot apres un echec dans la mise à jour de DSM).

Comme j’avais tout un tas de données dessus j’ai cherché à en faire un backup.

Pour ce faire j’ai extrait l’un des disques dur du Synology (Ils sont en RAID 1 – mirroring) et l’ai copié sur un autre disque vierge pour travailler tranquillement . [ merci http://fredo.servehttp.com/html/Astu-19_3.htm]. Les opérations seront faites à partir d’une machine Linux (Ubuntu)

dd if=/dev/sdc of=/dev/sdb bs=64k conv=noerror

J’installe mdadm pour avoir accès au RAID

J’ai rebooté en ayant le seul disque de copie (le disque original est à l’abri), mais le raid ne veux pas démarrer (erreur au démarrage). Je poursuis donc le boot et tente les commandes en manuel [merci http://forum.synology.com/wiki/index.php/How_to_retrieve_data_from_RAID_Volumes_on_Linux] :

mdadm --assemble /dev/md2 /dev/sdb3

Mais le système se plaint de ne pas trouver de superblock.

Pour information un disque synology est découpé en plusieurs partitions :

sdb1 : partition root linux

sdb2 : partition SWAP

sdb3 : partition étendue

sdb5 : partition de données

Tout du moins c’est ce que je croyais avoir compris, d’où un doute sur l’utilisation de sdb3 au lieu de sdb5 (la commande ne donne pas grand chose de mieux avec sdb5 😦 ).

Apres un moment de flottement je tente al technique « hacker », a coup de hexdump

hexdump -C /dev/sdb5 | more

et là je tombe sur une phrase magique

 00022000  06 fd 37 87 20 4c 56 4d  32 20 78 5b 35 41 25 72  |..7. LVM2 x[5A%r|

Synology (du moins chez moi) utilise LVM  (qui n’est pas installé sur ma Linux box)

apt-get install lvm2

Et là

#mdadm -A /dev/md2 /dev/sdb5
mdadm: /dev/md2 assembled from 1 drive - need all 2 to start it (use --run to insist).
Pas de bol il ralle car le RAID n'est pas complet
# mdadm -S /dev/md2
mdadm: stopped /dev/md2
# mdadm -A /dev/md2 --run /dev/sdb5
mdadm: /dev/md2 has been started with 1 drive (out of 2).

Et là maintenant

#pvscan 
  PV /dev/md2   VG vg1   lvm2 [1,36 TiB / 0    free]
  Total: 1 [1,36 TiB] / in use: 1 [1,36 TiB] / in no VG: 0 [0   ]
# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "vg1" using metadata type lvm2
# lvscan 
  ACTIVE            '/dev/vg1/lv' [1,36 TiB] inherit
# mount /dev/vg1/lv /mnt/syno/
# df
[...]
/dev/mapper/vg1-lv   1440839828 1214608956 226128472  85% /mnt/syno

Je respire …

Donc pour résumer, pour accéder à un disque RAID1 (les autres aussi probablement) issu d’un synology, il faut installer les packages mdadm et lvm2. Ensuite il faut réactiver le raid mdadm -A /dev/md2 –run /dev/sdb5.

Je ne sais pas par contre si l’étape pv/vg/lvscan est nécessaire et si le système voit les nouveaux device LVM sans ça.

EDIT: Au boot Ubuntu demande s’il doit démarrer le RAID en mode dégradé, si mdadm et lvm sont installé il arrive à rendre disponible /dev/vg1/lv sans manip supplémentaire

Time Lapse avec Arduino

Un Timelapse ? Késako ?

Il s’agit d’un des premiers montages sérieux (comprendre : réellement utile) que j’ai réalisé avec l’arduino.

Il s’agit de piloter mon appareil numérique (un Canon EOS 350D) et lui faire prendre des photos toutes les n secondes ( n étant paramétrable). Les images prises seront mises bout à bout pour faire un film. Pour rappel une seconde de vidéo en contient 25 (plus ou moins selon les formats). Ce qui veut dire que le temps sera comme accéléré (tout dépend du temps entre chaque prise de vue)

Pour vous mettre en appétit je commence par vous donner le résultat :

Concernant la vidéo il s’agit d’un morceau écrit et interprété par Delphine Desrayaud pour l’occasion (encore merci !!).

Principes du montage

Connections de l’appareil

Mon reflex a une connectique jack stéréo 2.5mm qui permet de connecter un déclencheur souple.
Un déclencheur souple réalise le contact entre la masse et une des voix .
Ce contact réalise soit la mise au point soit le déclenchement.

Pour ce qui est du montage ici je ne m’intéresse qu’au shooting, la mise au point est réalisée manuellement.

Montage pilote

L’effet « interrupteur » est réalisé en alimentant un transistor 2N2222 avec l’Arduino. Le courant passe alors entre les deux autres pâtes du transistor.
Le paramétrage du temps entre deux prises de vue est réalisé au gré d’une résistance variable qui sera mesurée par l’arduino. Pour ce faire j’ai pris un slider de chez DFRobot.
J’ai rajouté 3 leds (rouge, jaune et verte) pour savoir où j’en suit du décompte entre deux prises de vues. Je trouvais utile de savoir si l’appareil va bientôt prendre la prise de vue ou non (vert : au début de l’attente, rouge : ne pas toucher shoot imminent).

PCB Timelapse

PCB Timelapse

Une petite boite pour la route ?

J’ai opté pour une petite boite en carton pour emballer ce petit montage

Shield sur l'arduino dans son ravissant écrin en carton

Shield sur l’arduino dans son ravissant écrin en carton

Code arduino

Le code de l’arduino est visible comme d’habitude ici

Montage des images

Une fois les images récupérées il faut en faire un film, après tout c’est le but de la manoeuvre.

Pour ce faire j’ai utilisé ffmpeg pour faire le montage. Mes images se nommant toutes img_XXXX.jpg ( avec XXXX = numéro croissant)

ffmpeg -f image2 -i img_%04d.jpg -vcodec mpeg4 -b 15M timelapse.avi

Goodies

M’amusant avec ImageMagick, j’avais aussi réalisé une vidéo en SD avec un timestamp sur chaque image

i=0
for file in *.JPG
do
  echo $i
  ((i=$i+1))
  newfile=`printf "imgs_%04d.jpg" $i`
  date=`exiftool -createdate $file | cut -c 46-50`
  convert -resize 720 -crop 720x576+0+0 $file -font Bookman-DemiItalic -draw "text 670,20 '$date'" $newfile
done

ffmpeg -f image2 -i imgs_%04d.jpg -vcodec mpeg4 -b 15M timelapse_timestamp.avi

Et pour remercier ceux qui sont allés jusque ici une seconde vidéo ^^