Flash технология покорена!
Flash

Каждому работающему за компьютером известна эта удобнейшая вещь – «флешка». Когда они появились, они стоили довольно больших денег и считались экзотикой, и им не пророчили такого светлого будущего – распространения какое они получили в наши дни. Сейчас «флешки» полностью вытеснили из компьютеров традиционные загрузочные и «спасительные» приводы – флоппи-дисководы. Старичкам-дискетам уже невозможно конкурировать ни по скорости ни по объему ни по цене со своими твердотельными собратьями. Но мало кто знает КАК на самом деле работает эта компактная и удобная штучка – накопитель на твердотельной FLASH-памяти. И соответственно очень многие не догадываются насколько ненадежным по сравнению даже с той же дискетой может оказаться современный флеш - диск. Итак, небольшой экскурс в принципы работы «флешки».

Любая «флешка», будь то USB накопитель или MMC для телефона или CF для фотоаппарата или еще какая другая – строится по одному принципу и всегда состоит из 2 основных узлов – контроллера и микросхемы – накопителя данных. Контроллер выполняет функцию согласования интерфейсов, управление размещением данных дефект-менеджментом короче занимается всеми интеллектуальными функциями.  Есть некоторые типы «флешек» которые не имеют контроллера а лишь несут в себе «голый» чип памяти. Контроллер в данном случае встроен в устройство к которому такая флешка подключается и убран из нее лишь в целях удешевления, однако надежности это не добавляет. К таким относятся SmartMedia и xD. На рисунке слева показан контроллер одной из USB «флешек». В данном случае он состоит из нескольких микросхем что не меняет сути. Но самой главной микросхемой в любом накопителе является NAND-чип, хранящий данные. Как правило эта микросхема выглядит так как показано на следующем рисунке, ее можно встретить во всех «флешках», mp3, mp4-плеерах.

Все эти микросхемы (ну или почти все, есть маааленькое исключение на примере Renesas с его хитрым AG-AND) сделаны по технологии NAND, что расшифровывается как Not-AND, по-русски НЕ – И. Это – метод и структура ячейки хранящей минимальную единицу информации. Тем кто хочет подробнее ознакомиться с предметом – гугль (www.google.com) в руки – там очень много информации на эту тему. Для ленивых дам одну интересную ссылку http://www.gaw.ru/html.cgi/txt/publ/memory/nand.htm. Там все разжевано.

            Но вернемся к нашим баранам то бишь к «флешкам». У NAND чипов много плюсов – высокая скорость чтения и записи, быстрое стирание, возможен быстрый произвольный доступ как по чтению так и по записи. Но есть и один очень существенный минус – ограниченный ресурс ячеек памяти по циклам стирания. Для большинства производителей этот параметр гарантируется на уровне 100 000 циклов стирания. Это означает что после данного количества стираний ячейка перестанет стабильно хранить записанное в нее значение. Вы можете сказать – «да что там 100 тысяч! Я за всю жизнь столько не запишу!» однако не спешите с выводами. Если работать с флеш-диском как резервным накопителем то действительно этого ресурса хватит надолго. Но все чаще флеш-диски используются как загрузочные носители, как хранилище динамически меняющихся данных (к примеру, база данных 1C-бухгалтерии). В таком режиме работы ресурс в 100 000 циклов расходуется в считанные дни. Десятки часов. По этому поводу тоже можно в Интернете почитать множество исследований и расчетов.

            Для того чтобы бороться с этим неприятным эффектом была придумана хитроумная технология под названием Wear leveling. Эта технология призвана увеличить срок службы накопителей на FLASH микросхемах методом равномерного использования всех ее ячеек памяти. Ресурс каждой ячейки мы конечно не можем увеличить но сделать кое-что для увеличения срока службы всего устройства можем. Как известно, большинство всех видов накопителей используются не на всю свою емкость – чаще даже не наполовину. И наиболее используемой частью любого накопителя является его начало – это как дно сосуда – если наливаешь в него воду – дно всегда будет укрыто водой. Но до краев сосуд наполняется редко. Так и с накопителями – начало всегда в использовании, конец почти всегда пустой. Идея технологии wear leveling заключается в том чтобы создать при каждом изменении данных пользовательской области данных ФИЗИЧЕСКИ в микросхему памяти записывать данные в РАЗНЫЕ ячейки памяти. И все ячейки памяти микросхемы включить в общую ротацию. Это значит что независимо от  того сколько мы храним данных на накопителе – при каждом изменении данных будут использоваться новые ячейки памяти, благодаря чему общий ресурс работы устройства возрастет в десятки раз.

            Данная технология оказалась просто спасением всей отрасли. Первые «флешки» малой емкости делались без применения этой «волшебной» технологии и действительно при активном использовании быстро «протирались» вначале диска. Все что выпускается сейчас – использует в какой-то вариации данный метод.

            Все бы хорошо, но эта технология, добавив надежности касательно ресурса микросхем, по иронии и по принципу своей работы снизила надежность устройства. У любого флеш-диска появилась сложная программа управления, следящая за количеством использований каждой ячейки памяти, появилось множество алгоритмов – реализаций технологии Wear leveling, и не все эти алгоритмы надежны. Плюс любой из этих алгоритмов добавляет накопителю инерционность – после модификации пользовательских данных контроллер должен сохранить свои таблицы и микропрограммы в ту же микросхему памяти. И если по причине внезапного отключения питания или сбоя контроллера он этого не сделает – возникнет несоответствие микропрограмм и пользовательских данных, записанных в память. При следующем включении такой накопитель уже не заработает – контроллер не смог найти правильные микропрограммы и собрать свой виртуальный «транслятор». Все, флешка в ОС определяется как 0 размера либо  обращение к любому ее сектору вызывает ошибку.

            В данной ситуации пользовательские данные все еще есть в микросхеме памяти и их можно оттуда достать, но контроллер нам в этом уже не помощник – он сдался в момент включения питания «флешки» и сообщил вам об этом отсутствием доступа к данным. Единственный метод достать что-либо из данных – добраться до микросхемы памяти, считать ее на внешнем программаторе, и затем расшифровать полученный «сырой» образ с помощью утилит-сборщиков, которые пишутся под конкретный алгоритм и контроллер. Да, в результате возможны потери каких-то частей данных, но бОльшую часть обычно удается восстановить.

            Около 1.5 лет мы занимались разработкой «железа» и ПО для считывания и восстановления информации с флеш-накопителей, и теперь в достаточно короткий срок готовы восстановить данные практически с любой «флешки», максимум за несколько дней если контроллер нам неизвестен или пару часов если контроллер уже известен и для него имеется реализованное ПО. Обращайтесь :)

 

Орлов Сергей, 23 марта 2007 г.