Имеем FreeBSD 7.3 и smartd, мониторящий ATA диски.
В определенный момент, SMART тест обнаруживает ошибку на диске /dev/ad0:SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
......
# 4 Extended offline Completed: read failure 90% 33474 3665213Смотрим, что говорит fdisk /dev/ad0:
The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 312576642 (152625 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 1023/ head 254/ sector 63Затем смотрим на вывод disklabel /dev/ad0s1
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 524288 0 4.2BSD 2048 16384 32776
b: 524288 524288 swap
c: 312576642 0 unused 0 0 # "raw" part, don't edit
d: 2097152 1048576 4.2BSD 2048 16384 28552
e: 1048576 3145728 4.2BSD 2048 16384 8
f: 308382338 4194304 4.2BSD 2048 16384 28552Путем простейшей арифметики, вычисляю, что ошибка чтения возникла на разделе e:
Глядя на fstab, сопоставляем /dev/ad0s1e == /tmp
Тестируем раздел при помощи dd if=/dev/ad0s1e bs=256k of=/smb/temp/tmp.bak
2048+0 records in
2048+0 records out
536870912 bytes transferred in 111.588130 secs (4811183 bytes/sec)То есть, все прочиталось без ошибок.
Повторный запуск smartctl -t long /dev/ad0, естественно снова находит ошибку по тому же адресу. Релоцировать сектор SMART не желает:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0И где я дурак?
>[оверквотинг удален]
> VALUE WORST THRESH TYPE
> UPDATED WHEN_FAILED RAW_VALUE
> 5 Reallocated_Sector_Ct 0x0033 100
> 100 036 Pre-fail Always
> -
> 0
> 197 Current_Pending_Sector 0x0012 100 100
> 000 Old_age Always
> - 0
> И где я дурак?здесь: "Путем простейшей арифметики, вычисляю, что ошибка чтения возникла на разделе e:"
ибо адресация в FS относительная, относительно начала FS, а не LBA, к нашему
великому сожалению :(ну и потом, Bad block realloc будет только во время записи и то скорей всего не с первого раза.
Если хочется во время READ ("без потери данных"), то воспользуйтесь Vicrtoria
Smarttools не производит операций realloc или других с HDD, только тесты и выдача значений smart
> ибо адресация в FS относительная, относительно начала FS, а не LBA, к
> нашему
> великому сожалению :(Не понял. У меня на диске только одна партиция - начинается с 63-го сектора.
The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 312576642Насколько я понимаю, относительная адресация разделов в ней как раз и переводится в абсолютную прибавлением 63.
Так как LBA ошибки 3665213, а /tmp начинается с 3145728 и имеет размер 1048576 секторов (512 МiB). Даже если я потерял где-то пару-сотню тысяч секторов, ошибка должна все равно попасть в /dev/ad0s1e.Про запись я в курсе. Я как раз и хочу найти куда писать, чтобы не перекатывать весь диск по нескольку раз.
> Про запись я в курсе. Я как раз и хочу найти куда
> писать, чтобы не перекатывать весь диск по нескольку раз.Дополнение: dd if=/dev/ad0 bs=2048k of=/dev/null
Весь диск прочитан без сообщений об ошибке.
Как такое может быть?
>> Про запись я в курсе. Я как раз и хочу найти куда
>> писать, чтобы не перекатывать весь диск по нескольку раз.
> Дополнение: dd if=/dev/ad0 bs=2048k of=/dev/null
> Весь диск прочитан без сообщений об ошибке.
> Как такое может быть?легко, диск остыл, диск нагрелся и посыпались CRC и тд и тп, современные диски,
редкое г... и большая загадка (броски питания без UPS'а, ужасно сделанные
переходные планки или backplane панели) :)bs сделайте маленьким от 16 до 64k, но это, увы, надолго
Есть номер LBA, если машину можно остановить на 15мин, скачайте Vicroria и
в режиме READ линейное чтение с сектора по сектор раза 3 прогоните.
Лучше конечно весь диск, заодно посмотреть поверхность.
>> Дополнение: dd if=/dev/ad0 bs=2048k of=/dev/null
>> Весь диск прочитан без сообщений об ошибке.
>> Как такое может быть?
> легко, диск остыл, диск нагрелся и посыпались CRC и тд и тп,
> современные диски,
> редкое г... и большая загадка (броски питания без UPS'а, ужасно сделанные
> переходные планки или backplane панели) :)
> bs сделайте маленьким от 16 до 64k, но это, увы, надолгоНа самом деле физически блоки на современных дисках давно уже не 512 байт.
> Есть номер LBA, если машину можно остановить на 15мин, скачайте Vicroria и
> в режиме READ линейное чтение с сектора по сектор раза 3 прогоните.
> Лучше конечно весь диск, заодно посмотреть поверхность.Весь диск, собственно говоря, smartctl -t long как раз и прогоняет.
Мне бы заставить его релоцировать битый сектор, а при чтении он релоцировать не желает.
Проблема в том, что этот сервер я могу из работы больше, чем на полчаса выводить. А для замены есть только с FreeBSD 8.1
Так что, если не смогу релоцировать сектор, придется внепланово переводить его на 8.1
>>> Дополнение: dd if=/dev/ad0 bs=2048k of=/dev/null
>>> Весь диск прочитан без сообщений об ошибке.
>>> Как такое может быть?
>> легко, диск остыл, диск нагрелся и посыпались CRC и тд и тп,
>> современные диски,
>> редкое г... и большая загадка (броски питания без UPS'а, ужасно сделанные
>> переходные планки или backplane панели) :)
>> bs сделайте маленьким от 16 до 64k, но это, увы, надолго
> На самом деле физически блоки на современных дисках давно уже не 512
> байт.о как, это вы о тех что 4k? у вас именно такой?
>> Есть номер LBA, если машину можно остановить на 15мин, скачайте Vicroria и
>> в режиме READ линейное чтение с сектора по сектор раза 3 прогоните.
>> Лучше конечно весь диск, заодно посмотреть поверхность.
> Весь диск, собственно говоря, smartctl -t long как раз и прогоняет.что прогоняет? тест, сам smartmontools никаком с bad block не делает, даже
унутренний механизм realloc заявленный у дисков PATA/SATA непонятно как
работает, как в той сцене: "тут играть, тут не играть..." - короче через
одно место или вовсе не работает, неуправляемый процесс :(> Мне бы заставить его релоцировать битый сектор, а при чтении он релоцировать
> не желает.
> Проблема в том, что этот сервер я могу из работы больше, чем
> на полчаса выводить. А для замены есть только с FreeBSD 8.1
> Так что, если не смогу релоцировать сектор, придется внепланово переводить его на
> 8.1замену надо иметь, в смысле аналогичный диск на подобные случаи, тогда можно подменять
и пускать write без проблем.ps. Если на боевом сервере на дисках пошли сбои, такие диски нужно выводить из работы.
pps. Сектора в LBA вам известны, попробуйте Victoria на другой машине, после чего,
заранее все подготовив - 15 мин вам хватит.