hdd-fixBlocks/fixBlocks.sh

66 lines
1.4 KiB
Bash
Raw Normal View History

2020-02-23 21:45:10 +03:00
#!/bin/bash
2020-03-18 21:01:26 +03:00
#info @ EOF
2021-01-24 09:31:08 +03:00
#Скриптец проходится по ошибкам на диске и затирает их ddшкой.
#ACHTUNG! данные на диске могут быть утеряны!
2021-02-22 12:42:17 +03:00
#Написано для диска sdba с одним разделом sdb1 на весь диск
2021-01-24 09:31:08 +03:00
2021-02-22 12:42:17 +03:00
DISK="/dev/sdb"
2020-03-18 21:01:26 +03:00
2021-02-22 12:42:17 +03:00
block=$(smartctl --all $DISK | grep 'Short offline' | grep '# 1' | awk '{print $10}')
2020-02-23 21:45:10 +03:00
echo "Fixing: " $block
calcForm="(($block-2048)*512)/4096"
ddblock=$(echo $calcForm | bc)
#echo '(($block-2048)*512)/4096'
2021-02-22 12:42:17 +03:00
echo "seek (dd): " $ddblock
dd if=/dev/random of=$DISK'1' bs=4096 count=1 seek=$block
2020-02-23 21:45:10 +03:00
echo ""
let ddblock+=1
2021-02-22 12:42:17 +03:00
echo "seek (dd): " $ddblock
dd if=/dev/random of=$DISK'1' bs=4096 count=1 seek=$block
2020-02-23 21:45:10 +03:00
echo ""
let ddblock-=2
2021-02-22 12:42:17 +03:00
echo "seek (dd): " $ddblock
dd if=/dev/random of=$DISK'1' bs=4096 count=1 seek=$block
2020-02-23 21:45:10 +03:00
echo ""
2021-02-22 12:42:17 +03:00
smartctl -t short $DISK -q errorsonly
2020-02-23 21:45:10 +03:00
sleep 10
echo "New badblock: "
2021-02-22 12:42:17 +03:00
smartctl --all $DISK | grep 'Short offline' | grep '# 1' | awk '{print $10}'
2020-02-23 21:45:10 +03:00
exit 0
#######
2020-03-18 21:01:26 +03:00
SRC: https://linoxide.com/linux-how-to/how-to-fix-repair-bad-blocks-in-linux/
2020-02-23 21:45:10 +03:00
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
L=99846
(standard_in) 1: syntax error
l=99846
s=2048
b=4096
(l-s)*512
50072576
50072576/b
12224
l=109614
((l-s)*512)/b
13445
l=128153
((l-s)*512)/b
15763
l=484030
((l-s)*512)/b
60247