1. Делаем dd, дописывая в файл
dd if=/dev/sda >> /tmp/data 2> /tmp/tst
2. если виснет - Проверяем состояние.
var=$((time sh -c "dd if=/dev/zero of=ddfile bs=512 count=125 && sync") 2>&1)
3. узнаем где,
dd: reading `/dev/sda': Input/output error 116960+0 records in 116960+0 records out 59883520 bytes (60 MB) copied, 12.385 s, 4.8 MB/s #если в строке с именем диска встречатся error awk '/sda/ {print($5)}' /tmp/tst #тогда узнаем где #отрезаем последний символ два раза sed 's/.$//' sed 's/.$//'
4. останавливаем диск,
# echo 1 > /sys/block/sr0/device/delete
выключаем ждем и включаем -
wget http://10.9.8.5/port_3480/data_request?id=lu_action&DeviceNum=4&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1&output_format=xml
5. запускаем снова,
# echo "- - -" > /sys/class/scsi_host/host1/scan
6. возобновляем dd
dd if=/dev/sda skip=blabla >> /tmp/data 2> /tmp/tst
Скрипт:
#!/bin/sh ####################################### start_pos=$1 outputfile=$2 flagfile=/home/mike/out propusk=8 volume=488397168 ####################################### # выключаем диск и включаем назад echo 1 > /sys/block/sdb/device/delete curl -s "http://192.168.10.156/port_3480/data_request?id=lu_action&DeviceNum=4&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0" > /dev/$ echo OFF sleep 5 curl -s "http://192.168.10.156/port_3480/data_request?id=lu_action&DeviceNum=4&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1" > /dev/$ echo ON sleep 5 echo "- - -" > /sys/class/scsi_host/host1/scan while true do count=$(echo $volume - $start_pos | bc -l) echo "Осталось: " $count dd if=/dev/sdb skip=$start_pos count=$count >> $outputfile 2> $flagfile if [ $(awk '/sdb/ {print($5)}' $flagfile) = 'error' ] then #сообщаем где echo "ERRORR on " $(awk '/records in/ {print($1)}' $flagfile) start_pos=$(echo $(echo $(echo $(awk '/records in/ {print($1)}' $flagfile) | sed 's/.$//') | sed 's/.$//') + $start_pos + $propusk | bc -l) echo "Начинаем с: " $start_pos dd if=/dev/zero count=$propusk >> $outputfile 2> $flagfile # выключаем диск и включаем назад echo 1 > /sys/block/sdb/device/delete curl -s "http://192.168.10.156/port_3480/data_request?id=lu_action&DeviceNum=4&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0" > /dev/null && echo OFF sleep 5 curl -s "http://192.168.10.156/port_3480/data_request?id=lu_action&DeviceNum=4&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1" > /dev/null && echo ON sleep 5 echo "- - -" > /sys/class/scsi_host/host1/scan fi done
Discussion