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 :p.

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! =D> 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. 8)