URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 73675
[ Назад ]

Исходное сообщение
"Утилита DD и ошибка LBA"

Отправлено ALUM , 24-Апр-07 09:32 
копирую диск:
/bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M

через пару минут работы ошибка:
INPUT/OUTPUT ERROR in LBA #12702592

ок, делаем так:
/bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M conv=noerror

больше ошибок нет, всё скопировалось

основываясь на том что, ошибка в начале диска, есть предположение, что это SWAP-раздел. Да и хер бы с ним!

ВОПРОС:
КАК УЗНАТЬ ПО НОМЕРУ LBA-блока, ЧТО ТАМ ЗА ФАЙЛЫ?


Содержание

Сообщения в этом обсуждении
"Утилита DD и ошибка LBA"
Отправлено DN , 24-Апр-07 14:09 
>копирую диск:
>/bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M
>
>через пару минут работы ошибка:
>INPUT/OUTPUT ERROR in LBA #12702592
>
>ок, делаем так:
>/bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M conv=noerror
>
>больше ошибок нет, всё скопировалось
>
>основываясь на том что, ошибка в начале диска, есть предположение, что это
>SWAP-раздел. Да и хер бы с ним!
>
>ВОПРОС:
>КАК УЗНАТЬ ПО НОМЕРУ LBA-блока, ЧТО ТАМ ЗА ФАЙЛЫ?

Может лучше по томам копировать dump/restore ?


"Утилита DD и ошибка LBA"
Отправлено lavr , 24-Апр-07 14:17 
>копирую диск:
>/bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M
>
>через пару минут работы ошибка:
>INPUT/OUTPUT ERROR in LBA #12702592
>
>ок, делаем так:
>/bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M conv=noerror
>
>больше ошибок нет, всё скопировалось

кто это вам сказал что ошибок нет?! Если была I/O ошибка, то тут уж лучше копировать
с маленьким bs=512 и conv=noerror,sync

noerror - означает НЕ останавливать dd операцию при ошибках.

>основываясь на том что, ошибка в начале диска, есть предположение, что это
>SWAP-раздел. Да и хер бы с ним!
>
>ВОПРОС:
>КАК УЗНАТЬ ПО НОМЕРУ LBA-блока, ЧТО ТАМ ЗА ФАЙЛЫ?

много считать - скока секторов в LBA, затем для каждой FS высчитывать какому относительному начальному и конечному секторам FS соответствует абсолютный
короче убиться можно


"Утилита DD и ошибка LBA"
Отправлено ALUM , 25-Апр-07 09:25 
>тут уж лучше копировать
>с маленьким bs=512 и conv=noerror,sync

А что делает "SYNC" ? Переводил, переводил - ничего не понял. Заметил, что сильно замедляет копирование.


"Утилита DD и ошибка LBA"
Отправлено lavr , 25-Апр-07 11:50 
>>тут уж лучше копировать
>>с маленьким bs=512 и conv=noerror,sync
>
>А что делает "SYNC" ? Переводил, переводил - ничего не понял. Заметил,
>что сильно замедляет копирование.

раздел conv, подраздел noerror - если задана опция sync, то при ошибках, все кривые
или отсутствующие данные во входном буфере, будут заменены на Null в выходном, в ином
случае в выходном буфере будет чехарда, точнее "жопа"

dd читает из устройства во входной буфер и затем пишет данные в выходной буфер и из него
на выходное устройство. Итого, допустим у нас blocksize=1m - возникает ошибка, что
будет в выходном записанном 1m - токма богу известно.
Отсюда, первое копирование можно делать в /dev/null для проверки на BAD block:

dd if=dev1 of=/dev/null bs=1m - только чтобы убедиться в целостности устройства dev1
если ошибки, некорректируемые, то следующее копирование производим в образ с маленьким
blocksize и conv=noerror,sync
Чем меньше blocksize - тем больше уцелевших данных мы сможем сохранить на выходе.
Долго?! Да. Но более надежно, правда если диск посыпался и тьма bad'ов - то тут уж
ниче не поможет. :(


"Утилита DD и ошибка LBA"
Отправлено ALUM , 25-Апр-07 13:01 
Спасибо за мегаответ!

Мысли вот какие:
Поскольку при копированиии с bs=1M ошибка вылетала только 1 раз на весь диск (по прикидке - в SWAP разделе):

# /bin/dd if=/dev/ad4 of=/dev/ad5 bs=1M
dd: /dev/ad4: Input/output error
6202+0 records in
6202+0 records out
6503268352 bytes transferred in 114.375235 secs (56859060 bytes/sec)
#

на сис. консоль в этот момент вылезает ошибка ЯРКИМ БЕЛЫМ шрифтом:
"kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=12702592"

Хочу теперь этот мегабайтный кусок посекторно пройтись, что вытащится - то и хорошо. И на том забить на это БОЛД.

ВОПРОСЫ:
Как понять, что такое LBA и с как его курить? Когда-то во времена ДОС 6.22 увлекался АСМом - ловко умел вычислять всякие сектора-цилиндры, сейчас всё похерено.

Надо вычислить начальное смещение и кол-во секторов, ну хотя б примерно. А то при bs=512 весь диск мурыжить тоскливо, 160 Гигов, один гиг почти 30 минут копируется. Ошибка где-то в районе 4..5..6 гига от начала.

Мегабайтный битый кусок посекторно по 512 байт пройдусь, что вытащится - то и хорошо. И на том забъю на это БОЛД.


"Утилита DD и ошибка LBA"
Отправлено ALUM , 25-Апр-07 13:41 
подобрал смещение и длину, при которой битый диапазон перекрывается:

# /bin/dd if=/dev/ad4 of=/dev/ad5 bs=512 iseek=12000000 oseek=12000000 count=1024000 conv=noerror,sync

kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=12702677
kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702678
kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702678
kernel: ad4: FAILURE - READ_DMA timed out
kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702680
kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702680
kernel: ad4: FAILURE - READ_DMA timed out
kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702682
kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=1<ILLEGAL_LENGTH> LBA=12702682
kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=1<ILLEGAL_LENGTH> LBA=12702683
kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702684
kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702684
kernel: ad4: FAILURE - READ_DMA timed out
kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702686
kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702686
kernel: ad4: FAILURE - READ_DMA timed out
kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702688
kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702688
kernel: ad4: FAILURE - READ_DMA timed out
kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=1<ILLEGAL_LENGTH> LBA=12702690

Итого, не так уж и много битых...

12702677
12702678
12702680
12702682
12702684
12702686
12702688
12702690


"Утилита DD и ошибка LBA"
Отправлено lavr , 25-Апр-07 15:12 
>подобрал смещение и длину, при которой битый диапазон перекрывается:
>
># /bin/dd if=/dev/ad4 of=/dev/ad5 bs=512 iseek=12000000 oseek=12000000 count=1024000 conv=noerror,sync
>
>kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=40<UNCORRECTABLE> LBA=12702677
>kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702678
>kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702678
>kernel: ad4: FAILURE - READ_DMA timed out
>kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702680
>kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702680
>kernel: ad4: FAILURE - READ_DMA timed out
>kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702682
>kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=1<ILLEGAL_LENGTH> LBA=12702682
>kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=1<ILLEGAL_LENGTH> LBA=12702683
>kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702684
>kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702684
>kernel: ad4: FAILURE - READ_DMA timed out
>kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702686
>kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702686
>kernel: ad4: FAILURE - READ_DMA timed out
>kernel: ad4: TIMEOUT - READ_DMA retrying (2 retries left) LBA=12702688
>kernel: ad4: TIMEOUT - READ_DMA retrying (1 retry left) LBA=12702688
>kernel: ad4: FAILURE - READ_DMA timed out
>kernel: ad4: FAILURE - READ_DMA status=51<READY,DSC,ERROR> error=1<ILLEGAL_LENGTH> LBA=12702690
>
>Итого, не так уж и много битых...
>
>12702677
>12702678
>12702680
>12702682
>12702684
>12702686
>12702688
>12702690

печально, хотя и не все uncorrectable, мб контроллер с диском неудачно в UDMA общаются,
например понизить режим UDMA для этого диска или проверить кабель, а то и бывает мощности
БП не хватает.

LBA - это абсолютная нумерация, а в FS - используется относительная, относительно начала,
те никакой формулы для однозначного перевода нет

PS. Все это уже здесь не раз расписывалось, попробуйте поиск