Сырье для чтения USB-накопитель или SCSI

748
Balzola

На жестком диске USB жены есть небольшая проблема, когда папка отказывается открываться (файловая система NTFS). Я смог создать образ диска с Linux, но для одного сектора (сектора 4096 байт). Чтение этого сектора не удается:

sudo dd if = / dev / sdb of = пропуск блока = 21647245 bs = 4096 count = 1 dd: ошибка чтения '/ dev / sdb': ошибка ввода / вывода 0 + 0 записей в 0 + 0 записей 0 байт (0 B) скопировано, 22,9317 с, 0,0 кБ / с 

Замена этого сектора нулевыми байтами приводит к тому же симптому, что и в Windows, поэтому сектор, похоже, связан с проблемным каталогом.

При доступе к указанному сектору вывод dmesg выглядит так:

[20381.842495] SD 7: 0: 0: 0: [SDB] Необработанный смысловой код [20381.842506] SD 7: 0: 0: 0: [SDB]  [20381.842510] Результат: hostbyte = DID_ERROR driverbyte = DRIVER_SENSE [20381.842514] SD 7: 0: 0: 0: [SDB]  [20381.842517] Sense Key: Аппаратная ошибка [текущий]  [20381.842531] SD 7: 0: 0: 0: [SDB]  [20381.842535] Add. Смысл: нет дополнительной информации о смысле [20381.842539] SD 7: 0: 0: 0: [SDB] CDB:  [20381.842542] Читать (10): 28 00 01 4a 4f 8d 00 00 01 00 [20381.842557] end_request: ошибка ввода-вывода, dev sdb, сектор 173177960 [20381.842572] Ошибка ввода-вывода в буфер на устройстве sdb, логический блок 21647245 

Есть ли способ прочитать этот сектор, необработанный, без проверки CRC или что-то еще, чтобы попытаться восстановить некоторые поврежденные данные?

Я открыл корпус: жесткий диск является родным USB, нет преобразования USB в SATA.

Редактировать: Пробовал ddrescue, но не смог также восстановить поврежденный сектор. Читая 2Gigs вокруг плохого сектора, пусть головы стабилизируются после поиска:

sudo ddrescue -s 2Gi -o 0 -i 87593373696 / dev / sdb blkk GNU ddrescue 1.19 Нажмите Ctrl-C, чтобы прервать спасено: 2147 МБ, ошибка: 4096 B, текущая скорость: 0 B / s IPOS: 88667 МБ, ошибки: 1, средняя скорость: 8488 КБ / с. opos: 1073 МБ, время выполнения: 4,21 м, успешное чтение: 1,06 м назад Законченный

Чтение назад (флаг -R) тоже не удалось.

Редактировать 2: Мой запланированный второй шаг состоял в том, чтобы использовать судебную экспертизу, чтобы попытаться получить недостающие файлы. Я впервые начал смотреть на MFT вручную, но это быстро становится очень, очень утомительным. Итак, в моем списке были следующие инструменты:

  1. Sleuthkit
  2. NTFS-3g
  3. скальпель
  4. выпросить-NTFS

Sleuthkit не сделал бы ничего полезного, прекратив очень рано жаловаться на ошибки в структурах метаданных.

С помощью Ntfs-3g (сейчас Tuxera) можно смонтировать образ с отладочными данными:

sudo mount -o loop, ro, offset = 258048, debug image2 ./mnt -t ntfs-3g 

Попытка войти в неисправный каталог вызовет ошибку:

Индексный буфер (VCN 0x0) каталога inode 101874 имеет размер (24), отличный от указанного размера каталога (4096). 

Поиск этой ошибки в DuckduckGo привел меня к следующему сообщению: http://www.tuxera.com/forum/viewtopic.php?f=3&t=27054 Оказывается, что люди из Tuxera / ntfs-3g действительно поощряют использование Microsoft CHKDSK для восстановления ошибок NTFS

Запуск chkdsk на диске был моим третьим и последним запланированным шагом, однако его следует попробовать намного раньше, зная, что он МОЖЕТ быть запущен на образе диска, используя, например, OSFMount ( http://www.osforensics.com/tools/mount- disk-images.html ).

Большинство отсутствующих файлов и каталогов (если не все) были восстановлены программой chkdsk / f на смонтированном образе диска. Более ста ошибок (большинство из которых являются потерянными файлами) были исправлены.

Изменить 3: Я принимаю ответ псуси. Несмотря на то, что это оказалось невозможным, попытка чтения поврежденных секторов, безусловно, является наиболее неопределенным и сложным способом восстановления данных со слегка поврежденного жесткого диска.

1

1 ответ на вопрос

1
psusi

No, it isn't possible. There is a SCSI command to do this, but you would still only be getting garbage, and it isn't supported on consumer level drives, especially not USB. Whatever was in that sector is gone.

Это не обязательно будет мусором. В противном случае это могут быть хорошие данные с одним плохим битом, который не проходит CRC. Некоторое время назад я мог использовать универсальный scsi-драйвер linux и связанную с ним утилиту для выдачи команд непосредственно на устройство (я занимался программированием scsi-level 18 лет назад). Если есть такие необработанные команды, может быть полезно попробовать. Otheus 8 лет назад 0
Это на самом деле то, что я хотел бы сделать :) и сам решить, является ли чтение данных полным или только частичным мусором ... Balzola 8 лет назад 0
@ Отеус, нет, так не работает. До CRC есть ECC. До определенного количества плохих битов, он исправляет, но как только вы пройдете через это, он начнет выплевывать мусор. psusi 8 лет назад 0
@psusi ECC на диске? У вас есть ссылка на это? Otheus 8 лет назад 0
@Otheus, http://en.wikipedia.org/wiki/Hard_disk_drive psusi 8 лет назад 0
Шутки в сторону? Вся статья в Википедии? Даже не статья или подраздел? Otheus 8 лет назад 0
@ Отеус, тебе действительно нужно так много рук? Вы не могли потрудиться найти на странице CRC? psusi 8 лет назад 0
Если вы знаете о дисководах из Википедии, у меня для вас плохие новости. Если вы не можете ссылаться на определенный раздел, я буду считать, что вы не знаете, о чем говорите. Otheus 8 лет назад 0
@ Отеус, я указал вам туда, чтобы показать, насколько это общеизвестно и как легко вы могли бы его найти, если бы вас это беспокоило. Теперь ясно, что вы предпочитаете участвовать в атаках ad hominum, а не изучать что-то на самом деле. psusi 8 лет назад 0
Прости @psusi, прими мой более примирительный тон. ECC в целом не работает так, как вы предлагаете. Я знаю - без Википедии - что жесткие диски используют _multiple уровней_ проверок и исправлений ошибок. Но: CRC выполняются для _blocks_, в то время как ECC находится на уровне битов или байтов. Если _you_ знает_ ECC также происходит на более широком уровне, я бы хотел, чтобы спецификации mfr обещали это. В противном случае, предположим, что ошибки n + 1 приведут к сбою CRC, и, если вам повезет, n - это минимум, который помешает ECC, но не сработает CRC. Обычно минимум для n составляет 1 бит в 512 байтах из 10 битов, то есть 2 неправильных бита в 5120. Otheus 8 лет назад 0
@Otheus, нет .. ECC также выполняется на блоках (по крайней мере, тип Рида-Соломона, используемый на жестких дисках). Они предназначены для исправления более длинных пакетов ошибок, а не одной нечетной ошибки, разбросанной тут и там (как код Хэмминга). Единственный способ, с помощью которого емкости жестких дисков можно масштабировать так, как они это делали за последние 15–20 лет, - это исправлять многочисленные ошибки, присущие упаковке битов все ближе друг к другу, а не только один плохой бит в 512 байтах. psusi 8 лет назад 0