Commit 3927adcd authored by Vitaly Lipatov's avatar Vitaly Lipatov

fix_disk.sh: updated

parent bff62d42
...@@ -32,8 +32,8 @@ test_block() ...@@ -32,8 +32,8 @@ test_block()
fix_block() fix_block()
{ {
DEV=$1 local DEV=$1
block=$2 local block=$2
# FIXME: possible badblocks always returns true # FIXME: possible badblocks always returns true
# badblocks -b 512 -v -s $DEV $block $block && { echo "Already OK, skipped..." ; [ -z "$FORCE" ] && return ; } # badblocks -b 512 -v -s $DEV $block $block && { echo "Already OK, skipped..." ; [ -z "$FORCE" ] && return ; }
test_block $DEV $block && { echo "Already OK, skipped..." ; [ -z "$FORCE" ] && return ; } test_block $DEV $block && { echo "Already OK, skipped..." ; [ -z "$FORCE" ] && return ; }
...@@ -59,27 +59,34 @@ fix_block() ...@@ -59,27 +59,34 @@ fix_block()
#BLOCKLIST= #BLOCKLIST=
#Buffer I/O error on device sda, logical block 32607659 #Buffer I/O error on device sda, logical block 32607659
dmesg | grep "logical block " | sed -e "s|.*Buffer I/O error on dev.* \(sd[a-z][0-9]*\), logical block \([0-9]*\)|\1 \2|g" | sort -u | \ dmesg | grep "logical block " | sed -e "s|.*Buffer I/O error on dev.* \(sd[a-z][0-9]*\), logical block \([0-9]*\)|\1 \2|g" | sort -u | \
#dmesg | grep "device sd[a-z], logical block " | sed -e "s|.*Buffer I/O error on device \(sd[a-z]\), logical block \([0-9]*\)|\1 \2|g" | sort -u | \
#echo | #echo |
while read devname block ; do while read devname block ; do
#for i in $BLOCKLIST ; do #for i in $BLOCKLIST ; do
echo echo
#FIXME: logical block - 8 sectors (on 64 bit) or 4 sectors (on 32 bit?) #FIXME: logical block - 8 sectors (on 64 bit) or 4 sectors (on 32 bit?)
echo "Logical bad block $block on /dev/$devname ..." echo "List $block bad block on /dev/$devname ..."
#echo "Fixing $block block on /dev/$devname ..."
#fix_block /dev/$devname $block if [ -z "$LIST" ] ; then
echo "Fixing $block block (* 4 + 0...4) on /dev/$devname ..."
fix_block /dev/$devname $(($block*4+0))
fix_block /dev/$devname $(($block*4+1))
fix_block /dev/$devname $(($block*4+2))
fix_block /dev/$devname $(($block*4+3))
fi
done done
# [23743.306922] blk_update_request: critical medium error, dev sdc, sector 510634067 # [23743.306922] blk_update_request: critical medium error, dev sdc, sector 510634067
# [ 6.934350] blk_update_request: I/O error, dev sda, sector 16780432 # [ 6.934350] blk_update_request: I/O error, dev sda, sector 16780432
dmesg | grep -E "(blk_update_request|end_request): (critical medium error|I/O error)" | sed -e "s|.*, dev \(sd[a-z]\), sector \([0-9]*\)|\1 \2|g" | sort -u | \ dmesg | grep -E "(blk_update_request|end_request): (critical medium error|I/O error)" | sed -e "s|.*, dev \(sd[a-z]\), sector \([0-9]*\)|\1 \2|g" | sort -u | \
while read devname block ; do while read devname sector ; do
#for i in $BLOCKLIST ; do #for i in $BLOCKLIST ; do
echo echo
if [ -n "$LIST" ] ; then if [ -n "$LIST" ] ; then
echo "Error with sector $block on /dev/$devname ..." echo "Error with sector $sector on /dev/$devname ..."
else else
echo "Fixing $block block on /dev/$devname ..." echo "Fixing $sector sector on /dev/$devname ..."
fix_block /dev/$devname $block fix_block /dev/$devname $sector
fi fi
done done
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment