Hallo allemaal,
Recentelijk begon mijn HDD kuren te vertonen. Hij werd erg traag, was af en toe niet zichtbaar in het OS (W7/Ubuntu) en het opstarten werd erg traag. Hij was toendertijd meestal nog wel zichtbaar in het BIOS. De SMART waarden waren toen nog prima.
De laatste paar dagen is het verergerd. De HDD verschijnt nog maar heel af en toe, en dan voor een korte tijd. Data recovery tools lijken niet te helpen, omdat deze zich vooral op bad sectors focussen. Mijn data is echter nog in goede staat, ik kan er gewoon niet bij omdat de HD lijkt uit te vallen. Na wat geklooi kwam ik erachter dat ik de HD in Ubuntu (af en toe) opnieuw kan starten, en kan proberen mijn data met dd naar een nieuwe HD te kopieren. Echter, de oude HD valt continu uit waardoor gewoon kopieren niet mogelijk is. Om dit op te lossen heb ik het volgende scriptje geschreven:
Dit kopieert mijn data byte voor byte naar een andere schijf. Als de oude schijf uitvalt faalt dd en wordt automatisch geprobeert om de HD opnieuw te starten. In principe werkt dit, echter, het byte voor byte kopieren is erg langzaam en gezien de HD het het grootste gedeelte van de tijd niet doet kan het weken duren voordat ik klaar ben met het overzetten.
Ik heb geprobeerd dit te versnellen met dd bs=1000, en 1000 bytes te skippen in plaats van 1. Helaas werkt niet dit zoals gehoopt: Als dd faalt halverwege het lezen van de 1000 bytes zal het het aantal succesvol gelezen bytes (<1000) appenden op de nieuwe HD. Op dat moment weet ik niet meer hoeveel bytes ik al geschreven heb, en hoeveel bytes ik dus moet skippen bij het inlezen van mijn data. Het inlezen gebeurt immers met een offset ((aantal bytes) * (aantal x gelezen)) en bij het schrijven append dd gewoon alles wat het heeft kunnen lezen.
Heeft iemand een idee hoe ik het bovenstaande script aan kan passen om dit probleem te omzeilen, of zelfs een volledig ander idee om mijn data te redden?
EDIT: Overigens is dit mijn eerste bash scriptje, dus excuses voor de eventuele rommel.
Recentelijk begon mijn HDD kuren te vertonen. Hij werd erg traag, was af en toe niet zichtbaar in het OS (W7/Ubuntu) en het opstarten werd erg traag. Hij was toendertijd meestal nog wel zichtbaar in het BIOS. De SMART waarden waren toen nog prima.
De laatste paar dagen is het verergerd. De HDD verschijnt nog maar heel af en toe, en dan voor een korte tijd. Data recovery tools lijken niet te helpen, omdat deze zich vooral op bad sectors focussen. Mijn data is echter nog in goede staat, ik kan er gewoon niet bij omdat de HD lijkt uit te vallen. Na wat geklooi kwam ik erachter dat ik de HD in Ubuntu (af en toe) opnieuw kan starten, en kan proberen mijn data met dd naar een nieuwe HD te kopieren. Echter, de oude HD valt continu uit waardoor gewoon kopieren niet mogelijk is. Om dit op te lossen heb ik het volgende scriptje geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| while true; do
# Get current byte
skip=$(cat "/dev/shm/bytecount")
echo $skip
# try to dd a single byte
ddret=$(sudo dd if=/dev/sdc of=/home/it/Desktop/savedata bs=1 skip=$skip count=1 oflag=append conv=notrunc iflag=skip_bytes)
ret=$?
if [ $ret = 0 ]; then
# Write success
skip=$((skip + 1))
echo $skip > /dev/shm/bytecount
else
# Write fail
echo "dd failed, restarting HD"
echo "- - -" > /sys/class/scsi_host/host1/scan
fi
done |
Dit kopieert mijn data byte voor byte naar een andere schijf. Als de oude schijf uitvalt faalt dd en wordt automatisch geprobeert om de HD opnieuw te starten. In principe werkt dit, echter, het byte voor byte kopieren is erg langzaam en gezien de HD het het grootste gedeelte van de tijd niet doet kan het weken duren voordat ik klaar ben met het overzetten.
Ik heb geprobeerd dit te versnellen met dd bs=1000, en 1000 bytes te skippen in plaats van 1. Helaas werkt niet dit zoals gehoopt: Als dd faalt halverwege het lezen van de 1000 bytes zal het het aantal succesvol gelezen bytes (<1000) appenden op de nieuwe HD. Op dat moment weet ik niet meer hoeveel bytes ik al geschreven heb, en hoeveel bytes ik dus moet skippen bij het inlezen van mijn data. Het inlezen gebeurt immers met een offset ((aantal bytes) * (aantal x gelezen)) en bij het schrijven append dd gewoon alles wat het heeft kunnen lezen.
Heeft iemand een idee hoe ik het bovenstaande script aan kan passen om dit probleem te omzeilen, of zelfs een volledig ander idee om mijn data te redden?
EDIT: Overigens is dit mijn eerste bash scriptje, dus excuses voor de eventuele rommel.