lavr, а можно чуть поподробнее для тех, кто в бронепоезде, пожалуйста?
Я изначально и загрузился в single user mode, искомая fs (/dev/ad0s1f -> /usr/local) была отмонтирована.
fsck /dev/ad0s1f, как и fsck -y /dev/ad0s1f выдавали нечто вроде "can't read block 3447800 (dma error)"
Хотя там была хардварная ошибка жесткого диска - сектор не читался, но и не помечался бедовым:
ad0: failure - read dma error=40(uncorrectable) status=51(ready,dsc,error)
(это выдавало ядро)
fsck спрашивал: continue [yn]?
Каждый раз при нажатии "y" (или автоматическом -y) fsck продолжал работу,
после чего выскакивала следующая ошибка
ad0: failure - read dma error=1(illegal length)
(ядро)
на что fsck писал
the following sector could not be read: 3447882
, после чего выдавал, что система до сих пор грязная и надо бы перезапустить fsck, и так до бесконечности.
Понятно, что пометка этого сбойного инода через clri спасла бы положение.
Но fsck выдает (видимо) физический номер блока диска, по крайней мере он больше, чем кол-во логических двухкилобайтовых блоков на том (3гбайта) разделе. Каким образом надо было делать пересчет? Что почитать на этот предмет?
в man clri, man fsck ничего подобного не описано.
Положение спасло вот это сообщение http://solaris.opennet.ru/tips/info/460.shtml
dd сбойного раздела в файл, а потом монтирование его через
mdconfig -a -t vnode -f /mnt/usr_local.img
mount /dev/md0 /usr/local
далее dump | restore успешно сдампили данные на новый винт с этого раздела.
Спасибо Аноним-у за ссылку и tips-ы и uldus-у за сам tips :)