User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

linux_faq:восстановление-виснущего-диска

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

Enter your comment. Wiki syntax is allowed:
M M F A A
 
linux_faq/восстановление-виснущего-диска.txt · Last modified: 2016/10/05 13:42 by mike