Pagina 1 di 1
MV saltare file danneggiati
Inviato: sab 17 nov 2012, 15:31
da darkstaring
Seraaa...
Ho un' harddisk con partizione ntfs danneggiata... ho provato ad eseguire chkdsk da windows e ntfsfix con linux.. ma non riesco a riparare il filesystem...
Ora vorrei salvare tutti i file non danneggiati su un'altro disco ma se eseguo solo "mv -R" quando trovo un file danneggiato l' hd si blocca e la copia non và più avanti..
Esiste un parametro da dare a mv che salti i file danneggiati?? sul man non ho trovato niente..
Altri consigli???
Grazie
Re: MV saltare file danneggiati
Inviato: lun 19 nov 2012, 9:09
da useless
Prova a usare cp invece che mv! Nel caso peggiore puoi farti un'immagine del disco con dd_rescue.
Re: MV saltare file danneggiati
Inviato: lun 19 nov 2012, 22:25
da darkstaring
Eviterei di far la copia di tutta la partizione..l'hard disk è dà 500Gb e i files da copiare sono pochissimi, con dd copierei anche i settori che non fanno parte di un file?
io preferirei copiare o spostare i files presenti e non i settori, magari mantenendo la struttura delle directory...
la cosa ideale sarebbe qualcosa del tipo ignora se il file è danneggiato.. ho cercato con mv,cp, rsync ma sembra non ci sia un'opzione che lo permetta.
è possibile fare un controllo di integrità del file prima di copiarlo?
Re: MV saltare file danneggiati
Inviato: mar 20 nov 2012, 8:58
da useless
Con dd/dd_rescue copieresti il block device, quindi tutto tutto tutto, ma a mio avviso è la soluzione migliore, così poi recuperi i dati con comodo e senza timore che il disco muoia da un momento all'altro.
Mi sembra che cp non si interrompa se durante la copia di un file si verifica un errore, ma non sono sicuro. Se i file da copiare sono pochissimi puoi fare trial-and-error a mano
.
Per fare un controllo di integrità puoi provare qualcosa del genere:
Codice: Seleziona tutto
#!/bin/sh
if cat "$1" > /dev/null
then
mkdir -p "$(dirname "$1")" # Non sono troppo sicuro di questo!
exec cp "$1" "$2"
else
echo "File $1 illeggibile"
exit 1
fi
Ma non è detto che funzioni, probabilmente dipende dal tipo di errore che si verifica, e non sono troppo sicuro che crei bene le sottodirectory. Questo dovresti lanciarlo tramite find all'interno della directory da salvare, tipo:
Codice: Seleziona tutto
find "/mnt/discomorto" -type f -exec script.sh "{}" /mnt/dovecopiareifilebuoni \;
Ma chi lo sa se funzionerà? Insomma, prendilo più che altro come spunto su cui lavorare
.
In ogni caso, ti consiglio di montare il disco morto in readonly (-o ro)!!!
Edit: Ripensandoci, ecco una versione un po' più furba dello script, usala a tuo rischio e pericolo:
Codice: Seleziona tutto
#!/bin/sh
mkdir -p "$(dirname "$1")" # Non sono troppo sicuro di questo!
if ! cp "$1" "$2"
then
echo "File $1 illeggibile"
rm "$2/$(dirname "$1")" # Funzionerà???
exit 1
fi
Re: MV saltare file danneggiati
Inviato: mer 21 nov 2012, 14:06
da ZeroUno
find /mnt/discomorto -type d -exec mkdir -p "{}" \;
find /mnt/discomorto -type f -exec mv -v "{}" "/mnt/dovecopiareifilebuoni/{}" \; > fileok.log 2>filebad.log
oppure
find /mnt/discomorto -type d -exec mkdir -p "{}" \;
find /mnt/discomorto -type f -ls -exec dd if="{}" of="/mnt/dovecopiareifilebuoni/{}" conv=noerror \; >mv.log 2>&1
nel secondo caso se il file è danneggiato lui lo copia lo stesso mettendo degli zeri al posto dei settori danneggiati.
Ma, in entrambi i casi, aspettati tempi mooolto lunghi sui file che si trovano sui settori danneggiati.
se vuoi una barra di avanzamento sul singolo file usa
bar
find /mnt/discomorto -type f -ls -exec bar -if "{}" -of "/mnt/dovecopiareifilebuoni/{}" --display-bar \;
quest'ultimo a differenza di dd non gestisce gli errori alla dd ma almeno sai a che velocità ti sta copiando.
nota: tutte le soluzioni NON sono testate!!!
Re: MV saltare file danneggiati
Inviato: gio 22 nov 2012, 13:00
da useless
ZeroUno ha scritto:
find /mnt/discomorto -type d -exec mkdir -p "{}" \;
find /mnt/discomorto -type f -ls -exec dd if="{}" of="/mnt/dovecopiareifilebuoni/{}" conv=noerror \; >mv.log 2>&1
Ottima idea!
Alla fine è come il mio script ma decisamente più comodo. Se sostituisci dd_rescue a dd, con opportuni valori di -B e -b puoi anche cavartela (relativamente) in fretta.