Crazy backup! Potrei lanciarmi in un doverosissimo rant riguardo al fatto che la compagnia sembra incapace di fornirmi l'hardware su cui lavorare. Per farla breve, le modifiche che devo apportare al bootloader di quest'accrocchio vanno in effetti replicate su qualcosa come una ventina di boards differenti, e fatta la prima, reperire la seconda e stato sin qui un'esperienza memorabile, in senso negativo. Senza entrare troppo in dettaglio, il piccolo laboratorio degli embeddari dispone di una manciata di board, che risultano infine essere piu o meno tutte scassate, a tratti irrecuperabili. Perche le tengono? Beh, perche un giorno potremmo volerle aggiustare! Se solo ricordassimo perche sono rotte. Ne ho viste passare gia alcune: quella con la memoria flash rotta, quella con la RAM rotta (!), quella che se trasferisci piu di TOT megabytes si introia lo stack TCP. Ieri sono stato in ufficio, ed ho speso una mattinata a imprecarci sopra. Verso mezzogiorno arriva Gandalf (da Est, beninteso). Mi conferma che sono spesso rotte, e mi offre il suo aiuto piu in la nel pomeriggio... Ora, siccome non mi piace stare con le mani in mano, vedo se riesco a mettere le mani su qualche hardware, sfruttando il fatto che ho conosciuto un tizio che si occupa di testing. Visto che il suo team dovrebbe in effetti testare la feature su cui sta lavorando, forse *LUI* ha una board che funziona, o sa dove reperirla. Scomodo quattro o cinque persone transitivamente, e riesco infine ad acciuffarne una. Viene usata dalla gente che fa testing, e quindi sappiamo che funziona! Oh che bello. Prima di ranzarla brutalmente (il mio task consiste nell'implementare una cancellazione sicura, quindi non sarebbe in se sbagliato, ma...) mi assicuro che il brav'uomo che me l'ha prestata non gradisca per caso un back-up. E mi viene detto che si, sarebbe utile che tornasse in stato funzionante a fine operazioni. Benissimo. Fare il backup del bootloader e piuttosto semplice, in quanto la flash che lo contiene e accessibile in userspace. Purtroppo SSH non e disponibile (non posso dunque fare `ssh root@host cat /dev/mtdblock0 > ./mtdblock0), ma posso sempre fane una copia sul filesystem e spostarla via FTP. Fare un backup del filesystem e un tantino piu problematico, visto che salvare il dump sul filesystem e una situazione implicitamente catch22. Forse che sarebbe utile installare SSH... peccato che questa baracca non riesce ad aggiornare i repository, e non ho voglia di scoprire il perche. Vedo che xinetd e installato sulla board, e mi viene un'idea malsana. 1. preparo un allegro script tipo questo: . # more /usr/local/sbin/dump_fs . #!/bin/sh . . exec 2>/dev/ttyS0 . dd if=/dev/mmcblk0 2. configuro xinet circa cosi: . # more /etc/xinit.d/magic . service ... . { . socket_type = stream . protocol = tcp . wait = no . user = root . server = /usr/local/sbin/dump_fs . disable = no . } 3. uso netcat per trasferire l'obbrobrioso accrocchio . $ nc $board_ip $port > ./dev.mmcblk0 (29G / (11MB/s)) secondi dopo, ovvero nel giro di ~43 moderatamente lunghi minuti ho il mio dannato backup. Siccome lo script gira l'output su /dev/ttyS0, ed io sono attaccato alla TTY via seriale, posso semplicemente mandare un kill -USR1 al processo dd per avere un'idea di quanto manca al completamento del backup: . while :; do kill -USR1 4013; sleep 1; done