Как выполнить верифицированную блочную флэш-блокировку устройства?

373
user2284570

У меня есть специальное флэш-устройство, где каждая запись в физический блок должна быть проверена (хотя я не обращаюсь к нему как mtd). Потому что физический блок всегда мигает, но запись данных не всегда работает.
Так что это означает, что если я выполню простую непроверенную копию следующим образом:

dd if=backup of=/dev/sdb1 

У меня будет меньшинство блоков, где запись была бы успешной, и большинство, где было бы успешным только мигание (что означает, что некоторые блоки остались заполненными 0xFF).
Простая повторная попытка выполнения команды не работает, поскольку ddона также переписывает успешные блоки, что означает, что некоторые предыдущие записи будут преобразованы в неудачные записи (блок с ранее действительными данными будет мигать, но запись не удастся, что приведет к 0xFFзаполнению).

Таким образом, мое блочное устройство должно обрабатываться с проверенной копией: после каждого доступа к записи блок должен сравниваться с to be copied dataи запись данных в такой блок должна быть повторена до успешного завершения, чтобы обработать следующий блок.

0
Это похоже на сжигание .iso. За исключением каждых 512 байтов, физические блоки высвечиваются индивидуально перед каждой записью. Причина такой обработки в том, что мне не нужен специальный драйвер: поэтому, когда ядро ​​запрашивает запись, именно прошивка устройства обрабатывает мигание соответствующей области на mtd, а также преобразовывает последовательный блочный доступ в доступ mtd (как с картой SD. ). user2284570 6 лет назад 0
МЕДЛЕННЫЙ путь - `man dd` - считать, пропускать, искать и связанные с ним аргументы * _bytes. Hannu 6 лет назад 0
@ Ханну, это намного больше, чем медленный путь: это ежегодный путь! Есть 500Gb для копирования. Представьте себе время, если нужно создать несколько процессов каждые 512 байт. user2284570 6 лет назад 0
Ну, я предполагаю, что может потребоваться некоторый довольно простой C-код, поскольку все является файлом. Считайте данные в буфере, ищите правильную позицию, пишите, ищите, читайте и сравнивайте. Повторяйте, пока не сможете прочитать исходные данные, перейдите к следующему буферу, заполненному данными. Примечание: я не пробовал. Hannu 6 лет назад 0

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