Комментарии 282
Можно просто оставлять флешку, вставленной в порт, а в биос включить режим зарядки от USB при выключенном ПК.
Когда школьник покупает флешку 32ГБайта, а обнаруживает, что на ней только 29 ГБайт, школьник еще не знает, что недостающее место не китайцы на фабрике украли, а разработчики алгоритма FTL.
Начнем с простого, что не стоит все списывать систему трансляции и ее нужды. Разница в емкости в первую очередь продиктована разными единицами измерения.
Гигабайт — это 1 000 000 000 байт
Гибибайт — это 1 073 741 824 байт
Накопитель емкостью 32 гигабайта 32 000 000 000 байт.
32 000 000 000 / 1 073 741 824 = 29,8 гибибайта.
Рано или поздно сложится ситуация, когда у нас больше нет свободных блоков, в которые можно писать страницы.
В принципе невозможная ситуация, чтобы не было блоков для записи при наличии свободного пространства в логическом диапазоне.
Как-то немного затрагивал алгоритм работы одного из NAND контроллеров используемых в USB flash .
Если кратко, то в логическом банке число включаемых блоков в трансляцию всегда меньше количества блоков. Всегда есть полностью свободные блоки. Это можете увидеть из материала моей публикации.
Возможны разные подходы при записи данных в зависимости от их объема.
1) в одном случае дополнение данных в блоке будет как чтение блока в буфер, внесение изменений в данные, выбор блока в банке с наименьшим числом записей и запись изменнного содержимого в новый блок, очистка старого блока.
2) при мелких дополнениях некоторые фирмвари не спешат переписывать большие объемы данных и формируют блоки-блоки апдейты, которые отдельными страницами накладывают на логическую трансляцию (т.е. точечные подмены при трансляции для страниц разных блоков)
Проблема нехватки «личного времени» контроллера актуальна и для алгоритма выравнивания возрастов. Алгоритм Wear Leveling выполняется контроллером в моменты простоя накопителя, пока нет задач для записи или чтения пользовательских данных. Если же накопитель работает в режиме «короткометражек», то времени на выравнивание износа блоков просто нет.
Конечно можно делать различные предположения о выравнивании износа и перезаписях старых блоков. Но есть много «НО», которые дадут поле для размышления.
В флешках нет элемента питания и нет внутренних «часов», контроллер не имеет представления были данные записаны год назад или вчера. Через протоколы передачи данных с хостом не предусмотрен запрос времени и даты у компьютера. Поэтому реализовать просто перезапись «старых данных» в принципе не представляется возможным.
Основное выравнивание износа по факту происходит при изменении данных, что достаточно неплохо видно по материалам моей публикации. Отсюда зачастую и наблюдаем, что убитые накопители с NAND flash были заполнены статичными данными, а активное изменение шло в небольшой области, что привело к тому, что не так много блоков участвовало в ротации (имеется в виду, те что включены в трансляцию и подвергались изменению и блоки вне трансляции)
А что будет со страницей, которая утратила актуальность? Данные, записанные в ней больше не нужны, но стереть ее мы не сможем, потому что стирать дозволено только блоками, а в этом же блоке могут быть еще актуальные страницы. Рано или поздно сложится ситуация, когда у нас больше нет свободных блоков, в которые можно писать страницы. Зато, в остальных блоках то там, то сям будут неактуальые страницы. Чтобы такого не случилось, в накопителях крутится функционал «сборщика мусора», который занимается тем, что отыскивает «дырявые» блоки, в которых меньше всего актуальных страниц, и переносит актуальные страницы в новый блок. Таким образом «дырявый» блок освобождается полностью от актуальных страниц и его можно стереть… А в новом же блоке все страницы остаются актуальными. Напоминает дефрагментацию.
Алгоритмы «сбора мусора» — это попытка найти блоки с малым заполнением в NAND накопителях, чтобы сформировать блоки со смешанным содержимым (блок-апдейты), которые странично или группами страниц накладываются в трансляцию. Но для реализации этого алгоритма контроллеру нужна обратная связь с ОС. т.е. при удалении должны сообщаться LBA диапазоны, которые микропрограмма оттранслирует к конкретным блокам. Технология например для SSD и SMR HDD существует и называется TRIM. А много ли вы сможете найти USB flash с поддержкой TRIM?
Наверняка, у вас были случаи, когда вы скинули на флешку какие-то фотографии со свадьбы друга, год флешка полежала в ящике стола (как вам казалось, в целости и сохранности), а потом некоторые из фоток прочитались только наполовину. Дело в том, что единожды записанная в NAND-flash память информация способна «протухнуть» со временем.
Для начала стоит отметить, что если страница не прочиталась, то в принципе контроллер не отдаст каких либо данных. При нечитаемой странице вы получите ошибку чтения и пустой буфер, а не искаженные данные в нем. Всякие половинчатые фотографии это чаще следствие ошибок файловой системы, перекрестные записи, искажение данных при в буферном ОЗУ микроконтроллера, а также различные ошибки в трансляции, когда вместо данных транслируется мусор. Но эти явления в большинстве своем не связаны с естественной деградацией самой NAND памяти и ее содержимого.
Из всего вышесказанного подведу итог: не стесняйтесь «заряжать» флешки, это благоприятно сказывается на их быстродействии и надежности. А если вас захэйтят технари, просто дайте им ссылочку на эту статью.
Процедуры перестроения трансляции при простое могут быть реализованы в некоторых микропрограмма USB flash, но исходя из вопросов выше вряд ли они такие, как себе представляет автор. Также наличие процедур оффлайн сканирования во многих микропрограммах USB flash опять же под большим вопросом. В итоге рекомендация включать USB flash с поданными на них постоянными 5В не кажется однозначно полезной.
Начнем с простого, что не стоит все списывать систему трансляции и ее нужды. Разница в емкости в первую очередь продиктована разными единицами измерения.
Гигабайт — это 1 000 000 000 байт
Гибибайт — это 1 073 741 824 байт
Накопитель емкостью 32 гигабайта 32 000 000 000 байт.
32 000 000 000 / 1 073 741 824 = 29,8 гибибайта.
Да, но нет. Да — в том плане, что 32*10^9 байт — это действительно 29,8 ГБайта. Нет — в том плане, что мне не известны производители NAND-flash памяти, которые делали бы число байт в странице (или число страниц в блоке, или число блоков в кристалле (и сразу скажу, что с TLC — отдельный разговор)) не кратными степени двойки в меньшую сторону. Все же микросхемы на 32 Гбита содержат 32*1024*1024*1024 бит (без учета sparearea).
В принципе невозможная ситуация, чтобы не было блоков для записи при наличии свободного пространства в логическом диапазоне.
… Всегда есть полностью свободные блоки.
… Это можете увидеть из материала моей публикации.
И да, и нет… Да — материал увидели, но… В статье вы рассмотрели одну конкретно реализацию блочного алгоритма FTL конкретного накопителя. На SSD такие алгоритмы не применяют. А там таки нет: без GC в принципе возможна такая ситуация, когда блоки свободные закончатся.
2) При мелких дополнениях некоторые фирмвари не спешат переписывать большие объемы данных и формируют блоки-блоки апдейты, которые отдельными страницами накладывают на логическую трансляцию (т.е. точечные подмены при трансляции для страниц разных блоков)
Да, да, да… Именно об этом и идет речь пунктом выше. Когда у вас апдейтами будут забиты все свободные блоки — настанет время их разгребать, раскладывать по местам, освобождая блоки для будущих применений.
… контроллер не имеет представления были данные записаны год назад или вчера. Поэтому реализовать просто перезапись «старых данных» в принципе не представляется возможным… Основное выравнивание износа по факту происходит при изменении данных.
Ни да, ни нет. Возможно, я просто не понял ваш вопрос. Но ответить попробую. Возраст физических блоков (он же износ) измеряется не в часах ( и даже не в годах), а в количестве проведенных стираний блока. Для долгой счастливой жизни накопителя все блоки должны изнашиваться равномерно. Для выравнивания износа мало изменить данные, нужно их перезаписать в тот блок, который менее изношенный. Для ситуации, когда данные просто долго лежали и со временем «протухли» — отдельный разговор. Есть методы контроля степени разложения данных, но это не о количестве стираний речь эт другое.
… убитые накопители с NAND flash были заполнены статичными данными, а активное изменение шло в небольшой области, что привело к тому, что не так много блоков участвовало в ротации (имеется в виду, те что включены в трансляцию и подвергались изменению и блоки вне трансляции)
Да, почему бы и нет. Просто, эта флешка по какой-то причине не делала выравнивание блоков. Возможно, алгоритм такой… Или, возможно, ее просто не заряжали. О том и речь. ;)
… технология например для SSD и SMR HDD существует и называется TRIM. А много ли вы сможете найти USB flash с поддержкой TRIM?
Нет, нет, и снова нет. TRIM и GarbageCollection — идеологически похожи, но не пересекающиеся функционалы. Они работают на разных уровнях. TRIM — снаружи диска по логическим адресам (LBA), GC — работает на уровне физических адресов NAND. Если мы, например, клонировали диск посекторно, то TRIM вам не сообщит о том, что на самом деле у вас 80% диска свободно от данных; с точки зрения контроллера, диск будет занят на все 100%. Тем не менее, когда вы начнете виндой на этот диск писать много мелких фалов по случайным адресам (именно писать, не стирая старые), то TRIM не будет работать (потому что у него нет оснований для освобождения кластеров). А Garbage Collection все равно должен устранять фрагментацию блоков в NAND-flash памяти. Тут легко запутаться в применениях, я понимаю ваше смятение.
Для начала стоит отметить, что если страница не прочиталась, то в принципе контроллер не отдаст каких либо данных. При нечитаемой странице вы получите ошибку чтения и пустой буфер, а не искаженные данные в нем.
Ни да, ни нет. Зависит от контроллера. Не стал бы так категорично утверждать. Некоторые контроллеры при обнаружении нечитаемых страниц переходят навсегда в режим read-only, чтобы пользователь мог спасти то, что сейчас есть на флешке. А некоторые — не переходят… И что они там выдают вместо непрочитанных данных? Ну, не знаю.
Всякие половинчатые фотографии это чаще следствие ошибок файловой системы, перекрестные записи, искажение данных при в буферном ОЗУ микроконтроллера, а также различные ошибки в трансляции, когда вместо данных транслируется мусор.
Да, да, да. Ошибки в NAND чаще всего и являются причиной нарушения таблиц трансляции, так как таблицы трансляции также хранятся в NAND.
Но эти явления в большинстве своем не связаны с естественной деградацией самой NAND памяти и ее содержимого.
То ли да, то ли нет, не понятно. В большинстве или не в большинстве — не могу судить, но то, что деградация NAND приводит к таким эффектам — это точно. Вот, прям точно. )
В итоге рекомендация включать USB flash с поданными на них постоянными 5В не кажется однозначно полезной.
О, да!.. Я рад, что после прочтения моей статьи технические специалисты меняют мнение с «заряжать USB — бред» на менее категоричное «не кажется однозначно полезной». Значит, мысль я донес. Спасибо.
Даже если всё звучит как автор описал, минут 15 простоя, должно ей хватить что бы сделать все дела. ПО крайней мере выглядит как обычный TRIM
Не увидел ответа на напрашивающийся прямой вопрос: так будет ли всё-таки этот самый «сборщик мусора» работать, если воткнуть флешку не в компьютер, а в зарядник?
Воткнул свою флешку с лампочкой-индикатором в зарядный порт своего USB-хаба — лампочка моргнула и потухла. Как мне это интерпретировать?)
По идее, для работы процессора в флешке не нужен обмен данными с компьютером, так что работать будет. Всё-таки, этим занимается процессор самостоятельно, а не операционная система на компьютере. А "лампочка" обычно показывает, что в данный момент происходит передача данных.
«Идеи» это конечно хорошо, но они совсем не обязательно совпадают с практикой) Вдруг этот самый процессор вообще даже не запускается, пока сигнал от компьютера не придёт? Я хочу знать подробности
Ну, для того, чтобы компьютер "увидел" флешку, кто-то должен инициировать USB хендшейк и, скорее всего, это тот же процессор.
Хотя да, это всё ещё не факт, да и не хватает исследования, насколько быстро и эффективно работают все эти алгоритмы, описанные в статье. Может, они отрабатывают достаточно быстро для того чтобы не было такой необходимости давать им больше времени.
Ну, процессор может не дождаться сигнала компьютера и уйти в спящий режим, например. Мало ли чего)
Касательно лампочки на моей флешке — она при бездействии горит всегда, а при передаче данных мигает, специально такую флешку для теста взял. Но при подключении к заряднику она не мигает и не горит, а тухнет совсем, так что я боюсь, что процессор на ней всё-таки выключается
А нужна ли вообще флешке большая мощность? Даже всякие USB-вентиляторы, которые суть два проводочка да моторчик, бодро крутятся без всяких процессоров
Кроме того, бывают USB-кабели «только для зарядки», в которых нет линий данных.
Но и при этом обрыве планшет таки заряжался от компа.
Ну и сколько я разбирал дешевых телефонных зарядок — тоже на выход идут только два провода питания.
То есть стандарт стандартом, но зачастую разработчики забивают на некоторые положения стандарта, которые кажутся им некритичными. Например, не включают режим Suspend (в частности, библиотека V-USB его не умеет).
Да, запросить повышенную мощность у хоста не получится, но если укладываться в минимальный порог (до 100 мА), то и запрашивать ничего не надо.
И я ж восстановил в итоге. Линии там не сразу внутрь уходят, по той же стороне идут достаточное расстояние до via (к которым я в итоге проволочки и прокинул от ножек разъёма).
Я так с большим трудом нашел Data-кабель type-c <> type-c, 99.999% вариантов на маркетплейсах - это зарядники, а мне нужны были и данные в usb стандарте 3.2. Даже шнурки по 1000 руб такого типа в большинстве случаев - только для зарядки, сейчас передача данных по кабелю, как будто стала мене актуальна.
— при отключенном устройстве на линиях D+ и D- уровни сигнала низкие (состояние SE0), что обусловлено резисторами Rd1 и Rd2 хаба;
— при подключении LS-устройства повышается уровень сигнала D- за счет резистора Rul в устройстве (переход в состояние LS-Idle);
— при подключении FS/HS-устройства повышается уровень сигнала D+ за счет резистора Rul в устройстве (переход в состояние FS-Idle).


И только после этого хост инициирует обмен данными.
Если на шине нет активности более чем 3.0 мс, устройство переходит в Suspend Mode. В течение следующих 7 мс устройство должно отключиться, и не потреблять ток больше, чем заданный ток suspend. Таким образом, через 10 мс после прекращения активности шины ток потребления от неё не должен превышать suspend current.
Вот почему бы производителям не сделать отдельный светодиод для индикации всех этих операций? Ах да, тогда ведь флешки меньше будут выходить из строя.
Честно ответьте, беря в руки очередную флешку (свою, приятелей, родственников) сначала ознакамливаетесь с ее инструкцией и значением индикации? По-моему сейчас у большинства пользователей единственное еще оставшееся соблюдаемое правило — не выдергивай, пока окошко копирования не закрылось.
Хотелось бы увидеть числа: допустим, мы записали на флешку 5 гигов файлов, отнесли на другой комп, прочитали, стёрли. Сколько времени типичной флешке надо, чтобы "прийти в себя"?
вопросы возникают когда вы значала записали на флешку 100500 файликов потом через один их постирали и записали один фильм на 5 гиг, потом его стерли и начали пытаться записать новый фильм. тогда и у флешек и у ссд скорость с 150-200 мегабайт в сек записи падает до 20-30. например моему самсунгу 65 гиговому ссд на «прийти в чувство» надо полтора часа после таких издивательств. Patriot hellfire только через пол часа простоя начинает «чухаться» и собирать мусор и длится это до 3-х часов. по нагреву радиатора видно.
Скорее всего нет, так как без специальных TRIM-команд флешка просто не знает, что её отформатировали
В винде в окне форматирования есть галочка, называется вроде "полное форматирование" или что-то в этом духе. Вот при таком форматировании память реально форматируется и это ни разу не быстро. По умолчанию же просто стирается раздел файловой системы и всё, то есть сама физическая память не стирается, а стираться она начинает только перед записью.
Так что нету смысла форматировать флешки таким способом, а стирать полностью долго.
Тем более, что мы не знаем правильный ли у нас контроллер (см. ниже).
А «правильный контроллер» скорее всего есть только в каких-то топовых флешках, которые уже на уровне ssd по скорости, во всех обычных же 99% что будет контроллер который почти ничего не может.
Так-то там блоки в логическом разделе вроде как должны помечаться как удалённые, но «реальной» перезаписи байт таки и не происходит.
Так помечаются как удалённые же при обычном форматировании, в чём тогда разница то? Что-то же он там делает по 30-60 минут.
Если вы формтирует флешку быстрым форматированием, то будет небольшое число операций записи/чтения по созданию чистой файловой системы. Никакого массового высвобождения блоков без TRIM не случится. Все как было включено в трансляцию так и останется. По мере записи новых данных будет происходить запись в те же или новые блоки. При записи в новые блоки старые будут исключаться из трансляции и очищаться. Такой механизм не очень хорошо выравнивает износ, но при отсутствии TRIM хоть так.
В случае «полного» форматирования в Windows будет еще чтение всего логического диапазона (проверка на его доступность) в остальном все будет тоже самое.
из всего этого важно понять, что форматирование средствами ОС, не приводит к сбросу содержимого NAND накопителей без TRIM.
Так же скорость чтения с флешки около 35 мб/с, а по USB 3.0 около 100 мб/с, даже с 35 мб/с флешка на 16гб у меня читается за примерно 7.5 минут, а «полностью» форматируется она даже дольше чем если её записывать полностью данными, так-как скорость записи 20-25 мб/с.
Что же там за чтение такое происходит, что оно медленнее чем запись?
А 60 минут он там тупо мусор на диск пишет, например. Только ресурс уменьшает.
В статье сказано, что "правильный" контроллер будет этим заниматься самостоятельно. Так что вопрос только в том, какие контроллеры "правильные" и насколько часто они встречаются.
Как раз тому что у меня ещё остались те медленные(но быстрые,) usb-2.0 флешки в которых вроде как нет проблем с "вытеканием" электронов и через 3 года неиспользования они читаются без проблем :)
А как контроллер флешки, делая все эти внутренние операции, решает проблему того, что ее в любой момент могут выдернуть в середине процесса? На зарядке же нет кнопки "безопасного извлечения".
Ну это скорее всего не так уж и сложно. Например, может быть конденсатор, которого гарантированно хватит на обработку одного блока. При потере питания последний блок обрабатывается и обработка останавливается.
Чтобы пометить транзакцию нужно опять же полностью переписать какую-то страницу на флешке. Что случится при вынимании флешки на середине этого процесса?
А «десятов килобайт» не хватит, т.к. ресурс страницы флэш очень мал, а это самая нагруженная область, без чередования секторов эта область протрётся до дыр сказочно быстро. Нужно хотя бы стократный резерв для организации ротации таблиц. Не говоря уже о том, что это не решает проблемы — что будет, если питание пропадёт в момент записи этого «другого флэша»?
1. Чтобы флэш записать, его нужно сначала стереть.
2. Стирание производится страницами. Размер страницы бывает разный — от 256 байт, до 64 килобайт. Обычно — от 4 килобайт.
3. Запись тоже производится страницами, но во многих случаях можно «дописывать данные» некоторыми блоками — от 8 до 256 байт в блоке (т.к. контрольные суммы считаются и хранятся для блоков, а функции перезаписи нет). Т.к. если страница была стёрта запись и данные в этот конкретно в этот блок не писались, то можно записать те же данные, что уже были на этой странице, плюс, новые данные (кратные размеру блока).
Кстати, именно так и только так возможно регенерация данные во FLASH. Само по себе там ничего не восстанавливается — нужно в каждую страницу ещё раз, без стирания, записать уже хранимые там данные.
В какой такое «определённое место» вы собрались биты писать? Нельзя биты писать — только блоки и только в стёртые страницы.
А если питание пропадёт в момент стирания «подлежащей записи области таблицы размещения»?
А если питание пропадёт при записи бита «запись не завершена»?
А если питание пропадёт при записи новой таблицы? Что после включения делать?
А если питание пропадёт при записи бита «запись завершена»?
Но ещё раз — некуда вам биты писать.
Поверх этого, опять же, на страницах, можно сгородить что-то вроде версионирования метаданных, чтобы при пропадании питания всё оставалось хоть во сколько-либо целостном состоянии. Это сложно и требует реально больших конденсаторов, которых во флэшках нет. Поэтому флэшки иногда физически мрут при проблемах с питанием — нарушается целостность таблицы соответствия секторов.
И для обновления данных нужно перезаписывать все страницы тем же самым содержимым. Это сложно и энергоёмко — нужно же последовательно все обновлять, начиная со старых, а это может часы занимать. Т.е. нужно иметь счётчики того, что уже обновлено, чтобы при пропадании питания не начинать всё сначала. А со счётчиками та же проблема — где хранить и как гарантировать целостность.
На сколько я знаю, никаких «обычные» флэшки ничего этого не делают. У SSD есть, где на самые разные ухищрения идут — там и конденсаторы, и отдельные микросхемы памяти для организации транзакций, и огромные резерв памяти для организации ротации. И то, гложут смутные сомнения по поводу китайских SSD и их ресурса. Аналогичные сомнения гложут по поводу наличия и правильности реализации обновления хранимых данных и всяких нонейм-SSD.
А у SD/USB-флэшек не у всех даже есть механизм ротации секторов, из-за чего при интенсивной работы флэшки и SD-карты быстро изнашиваются в часто-используемых областях (а такие есть у всех «обычных» файловых систем). У некоторых же флэшек реализованы только простейшие алгоритмы ротации секторов, например, только вначале и конце — там, где у FAT наиболее критичная к записи область. Такие флэшки хорошо работают с FAT, но очень медленно с другими файловыми системам, и мрут на других файловых системах тоже быстро. Например, у меня есть несколько нонейм флэшэк, которые при нестандартном форматировании ext4 с переносом переносом суперблоков (есть такой лайф-хак) в начало диска показывают в разы большую производительность на запись.
А вообще для любителей пускать линуксы с флэшек есть специальные файловые системы вроде JFFS, UBIFS, F2FS и т.п., которые умеют делать ротацию секторов на уровне файловой системы, плюс, правильные настройки, уменьшающие износ диска — с ними условная «малинка на SD-карте» будет жить долго и счастливо.
Журналирование и версилнность могут быть обеспечены вообще без стирания путём присвоения следующего идентификатора который можно писать в конец блока по некоторым правилам, чтобы обеспечить возможность "удостоверится" что прочитали мы в очередной раз именно идентификатор блока а не какой-то шум...
Там и делают — версия страницы, плюс CRC, чтобы убедиться, что это не мусор. Но тогда начальная инициализация требует чтения всех страниц, что на больших объёмах (десятки-сотни гигабайт) может занимать недопустимое время.
Я программировал устройство с устойчивой к потере питания системой журналирования, при перезаписи блока он считался корректным только при наличии в этом блоке контрольной суммы. Сбойно записанный блок при чтении сразу распознавался. При сбое в использование шла информация из предыдущего по времени журналирования блока. Т.е. либо корректный блок есть и своим наличием перекрывает предыдущий, либо считается что используется предыдущая версия.
Он может быть вообще внутри чипа
Думаю, механизм транзакций или вроде того. Интересно было бы почитать подробнее об этих контроллерах от их производителей.
С другой стороны, отзывы типа «у меня флешка умерла после такого выдёргивания» тоже не особо доказательны, ведь «после этого — еще не значит вследствие этого».
Но случаи «после» встречаются, например flashboot.ru/forum/index.php?topic=4624.0
+1. Весьма вероятно, что без связи с хостом, который может сказать флешке "готовься к извлечению", её процессор к работе приступать не будет.
У USB-разъёма контакты питания длиннее, чем контакты данных. Поэтому, если выдернуть флешку, то контроллер может обнаружить отсоединение передачи данных, при этом ещё какое-то короткое время будет поступать питание.
1. GC находится внутри USB-NAND контроллера или внутри самой микросхема NAND памяти?
2. Происходит ли описанное в статье в других флешках: SD, CF, eMMC?
3. На некоторых USB-флешках есть аппаратная защита от записи. Останавливает ли она GC или нет?
4. На SD-флешках тоже есть защита от записи, но она влияет на USB-SD контроллер, а не SD-NAND, в этом случае GC работает всегда?
5. Продолжает ли работать GC после безопасного извлечения/umaunt'а?
2) Потеря заряда — везде происходит. SD чисто в теории должно как-то делать wear leveling, CF — хехехе, не делает, проверено на куче всего, установку Gentoo переживали только Industrial Grade SLC CF Card всякие. Потребительские не доживали до окончания компиляции ядра даже. eMMC — считайте, что оно аналог обычного SSD
3-4-5) Известно только производителю контроллера
1) NAND — штука ее на столько хитрая, чтобы уметь делать GC. Этим занимается именно контроллер флешки. Некоторые производители NAND делают линейку микросхем NAND-памяти со встроенным контроллером FTL, чтобы клиентский проц этим всем не занимался. Тем не менее, на массовом рынке экономически выгоднее крутить FTL на контроллере флешки.
2) В статье описано многое. FTL есть во всех накопителях, которые применяют NAND. Но ручаться за то, что кто-то конкретный из накопителей заморачивается на счет провееения фонового GC никак нельзя. Судя по производительности и живучести бюджетных USB-флешек, они вообще ни над чем не заморачиваются часто.
3) В случае USB-флешек аппаратная защита от записи может быть реализована массой способов. И все это на усмотрение разработчика.
4) У SD-карт памяти бегунок никак не влияет на саму карту памяти. Он просто механически сообщает хосту (хосту, Карл!), что на флешку нельзя писать. Некоторые бессоветсные хосты игнорируют этот ползунок.
5) GC после безопасного извлечения — тоже на совести разработчика. В USB есть вспециальная команда на извлечение накопителя. До флешки эта команда доходит, флешка ее видит, а что она творит — это только разработчик знает.
Некоторые бессоветсные хосты игнорируют этот ползунок.Ну прям бессовестные, утилита CHDK для камер Canon использует этот хак в очень полезных целях :).
Да, вещь интересная, этот chdk. Несколько лет назад искал себе картридер для sd, и оказалось, половина из них или игнорирует защелку или через раз срабатывает. А мне как раз с зашитой и надо было, чтоб к любым компам с вирусами свою флешку подключать. В итоге нашëл, и прямо внутрь картридера сделал переключатель, ибо защелки на sd картах произвольно могут перескочить.
(сайта уже нет с 2015 года, но интернет кое-что помнит) Жаль, дальше нет данных, чтобы полностью посмотреть… или я не умею там искать.
А есть примеры ОС, которые могут записывать с таким флагом? Я глубоко не разбирался, но есть ощущение, что картридер нормальный (если он реагирует на защелку) просто не пропускает команды записи.
3. защита от записи во флешках организована программно, переключатель обычно подключен на gpio ножку проца, а софт внутри него смотрит за состояние переклбчателя. Ножка разрешения записи есть и на самих нандах, но она не применяется для этого.
4. Защита чисто механическая, которую читает картридер и он уже сам решает писать или не писать. На уборку мусора контроллером это не влияет.
5. Я думаю продолжет, при том ему даже легче этим заниматься, никто не отвлекает глупыми запросами. Опять же unmount и безопасное извлечение это разные вещи. Возможно при безопасном флешка и отключается.
Я так и не понял-это такой научно-технический стеб по типу «DVD Rewinder» или реально?
Проскакивала когда-то статья: Отключённый промышленный твердотельник может потерять данные за неделю. В ней было некое количество контринтуитивных, но, вроде, логичных, утверждений: например, ситуация "хранить диск придётся при повышенной температуре — так хоть при записи пожалею, охлажу" на самом деле самая неблагоприятная. Так что стёбом здесь выглядит разве что термин "заряжать флешку". Хотя выше уже закономерно интересуются, будет ли это всё отрабатывать, если подать только питание.
По идее какое-то представление можно получить «за дёшево» просто понаблюдав (осциллографом или ЛА) за активностью на шине контроллер-память. Даже ничего не декодировать, просто есть/нет.
Разница между токами покоя и стирания у навскидку выбранного «середнячка» NAND: 22мА (это по 3.3В, т.е. в переводе к 5В будет ещё чуть ниже)
Время стирания сектора: 3.8мс
Нужна довольно активная работа, чтобы было заметно.

p.s. Вставил три разного возраста флешки, не увидел никакой реакции, то есть ровно 0 потребления, светодиоды доступа не горят.
или вся описанная тема если и есть, то работает между/около времени обмена, так что мне тоже кажется что врядли бы производители так рисковали
прошло пол часа, потребление не изменилось, флешка немного нагрелась. светодиода у нее нет вообще.
Да там практически любого одного сигнала в сторону NAND было бы достаточно (лишь бы не земля/питание). Команда стирания так или иначе переключает каждый из них.
Автор выдает желаемое за действительное.
Действительно было бы хорошо, если бы контроллер занимался всем желаемым, но 99.9% USB флешек этого не поддерживают.
Умирание 0го блока на sd картах (регулярного при fat32) подсказывает что контроллеры оных не умеют даже в подсчёт циклов использования, хотя может это мне не повезло (3 micro-sd карты не пишутся только блоки в начале) ...
По факту есть TLC SSD, который «стёк» за полгода, так что если китайцы не думают об обновлении записанных ячеек, то у флэшки лучше вовсе не рассчитывать.
У меня был магазинский Silicon Power — так он имеет ещё меньше smart-данных и умер всего через пару лет работы, в то время как Kingdian с алиэкспресса до сих пор жив-здоров уже года три, хоть и испытывает постоянную нагрузку от виртуалок и обновлений арча (хотя температура действительно одинаковые 40)
Это, конечно, не научно доказанное подозрение, но в то, что китайцы грамотно реализуют GC, я бы не особо верил. Его и в некоторых брендовых SSD не всегда хорошо делали, а тут…
В общем, если бы речь шла про внешний жесткий диск с породистой SSD-хой внутри, статье бы верилось. А что недорогая флешка из ларька сама себя (как кошка) еще и
сама себя (как кошка)
Вы мне упоротую идею подкинули!
Что, если использовать хорошо дрессируемых и умных животных — собак, или, например, свиней — как носитель даных с ассоциативной памятью? Сколько байт в них влезет и какова надёжность будет?
Животные ведь как — они же к хакингу неустойчивы. Стоит на пути следования набора из отдельных элементов хранения (группы кошек, проще говоря) разместить несколько пустых коробок, как — БАЦ! — и данные уже не следуют дальше! Причем размер коробки обычно значения не имеет:

С собаками еще проще: колбаса!
И только черепахи вас порадуют, их от цели путешествия еще никому не удавалось отвлечь, но и данные наружу черепаха не отдает (точнее, никто их не может принять).
В общем, предлагаю (в случае черепах) просто флешку клеить к панцирю скотчем!
флешку клеить к панцирю скотчем
Да это ничем принципиально от почтовых голубей отличаться не будет тогда.
Идея-то в том, чтобы обойтись без внешних носителей, а использовать для хранения данных именно МНУ животного.
Вот например, банально учим собак n команд: сал, бен, йон, рош, дур, буп, дам, хрям… Часть собак учим на «сал» поднимать левую лапу, часть — правую. Часть собак учим на «бен» вилять хвостом, часть — делать перекат. Вот уже два бита. И так далее...
Тут, кстати, возникает закономерный вопрос: сколько разных команд можно замапить на одно и то же действие, ведь количество разных хорошо различимых выполнимых собакой трюков ограничено? Не запутается ли в них собака? Ибо тогда получаем ту же проблему, что во флешках: плотность записи обратно пропорциональна надёжности.
А где пруфы насчёт наличия GC во флешках? Или это чисто домыслы автора статьи?
Я думаю не ошибетесь если возьмете флэшку самсунга.
Выше правильно сказали что надо брать внешний ssd. Например, samsung t5.
ХЗ отсутствие питания ли повлияло или как, но до простоя все работало без проблем.
А еще в зеркалке использовал флешку на 128GB. Но там я устраивал фотосессию на ~2-5GB, потом все фотки скидывал на комп, очищал флешку, и по-кругу. В итоге, в один прекрасный момент, фотки в «начале» флешки оказались битыми. После форматирования забил на всякий случай первые 15GB всяким хламом. Пока что полет нормальный…
А что касается статьи, то как и у многих, возникает вопрос когда включается этот loop сбора и сортировки данных? Ели есть питание == loop крутится, то наверное стоит иногда оставлять флешку подключенной к компьютеру.
ЗЫ в электронике я полный нуль, но все же (от незнания теории, в том числе) на уровне подсознания крутится недоверие и беспокойство от того, что зарядник может внезапно выдать флешке все свои 2-3А, что, мне кажется, не очень здорово. Ибо там максимальные токи больше чем у компутерного порта USB.
Напряжением рулит зарядник, сопротивлением — флешка. Зарядник при всём желании насильно флешке не сможет дать больше того, что она будет жрать. Случай, когда зарядник от дяди Сунь Кунь Чань за 10 центов и обожает выдавать 220 на выход, не рассматриваем.
После прочтения этой статьи вы тоже начнете заряжать свои флешки.Слишком желто.
Учитывая все вышеизложенное, нет, не начну. Нет ни одного аргумента, что моя флешка всем этим занимается, скорее наоборот.
1)USB(F)-PS/2(M)
2)PS/2(F)-COM(F)
3)COM(М)-LPT(M)
4)LPT(F)-LPT(M) ?!?!?!
3)COM(М)-LPT(M)
Скорее уж COM(9pin)-COM(25pin)
4)LPT(F)-LPT(M) ?!?!?!
А что вас так удивляет? Были и такие переходники. Хотя в варианте для LPT их смысл от меня тоже ускользает. Для RS-232 — перекрестное подключение прямого кабеля (что отражено в надписи Null Modem девайса по второй ссылке).
Не удивляет. Я просто уже забыл про такую древность как HASP под LPT порт.
А 25-pin COM это вообще настолько динозавр, что очень я сомневаюсь в том, что это именно он, а не LPT.
PS: Ставлю на то, что смысла нет:
— флешки разрабатываются, исходя из сценария «воткнул-передал-выдернул», и не откладывают самосервис на потом;
— операции выравнивания занимают не так много времени, чтобы надо было оставлять флешку на часы, хватит и тех минут, что флешка стоит в разъеме в ожидании операций.
Самый дельный комментарий, отмечусь тут тоже, чтобы уведомление об ответе получить.
Если наши требования не будут удовлетворены, Kingston_Technology — мы берем заложника, и будем пытать его до последнего процента S.M.A.R.T. health!

Кстати, а есть на винду какое-то решение, чтобы отдать флешке ATA-команду Secure Erase, тем самым пометив все блоки свободными?
На линухе через hdparm можно так дёрнуть.
Или при форматировании оно само как-то скажет флешке сбросить все блоки?
А то дома уже целая коробка флешек валяется, и у всех на чтение под сотню мегабит, а на запись от силы один, при этом самая новая из них куплена полгода назад :/
Хм, я руководствовался вот этой статьёй, но ещё не попробовал — https://blog.oxplot.com/make-usb-flash-write-fast-again/
В случае если у вас 2.0 флэшка/ридер/адаптер HDD — вы не можете рассчитывать на поддержку secure erase. В случае, если 3.0 флэшка подключена к 2.0 порту — вероятно, тоже.
У меня тоже 3.0, сейчас буду пробовать
Ну что сказать, попробовал. Ноль на массу, флешка даже пункт про сесуриту не выводит в hdparm.
Попробовал форматнуть быстро из винды и gparted — ожидаемо, ничего не поменялось. Попробовал форматнуть долго — за ночь 3%. Флешка при этом раскалилась, руками держать невозможно.
Могу разве что сказать одно — флешки Сандиск Ультра на 128 гигов брать можно только на пару раз. Пойду мучать их с гарантией...
Когда школьник покупает флешку 32ГБайта, а обнаруживает, что на ней только 29 ГБайт, школьник еще не знает, что недостающее место не китайцы на фабрике украли, а разработчики алгоритма FTL.
Что-то меня терзают смутные сомнения. Мне всегда казалось, что это маркетинг и хитрость обозначений. 32 GB = 32*10^9 B = 29.8*2^30 B = 29.8 GiB.
Кроме того, не ясно что делает контроллер с резервированным местом. Варианты могут быть следующие:
1. Использует для информации об адресации. Т.е. фактически место занято служебными данными
2. Использует для SLC кеша (который делается не отдельным кешем а просто использованием MLC/TLC ячеек для хранения одного бита).
3. Просто холодные блоки в резерв. Которые подменяются, когда другие начинают плохо себя вести
4. Просто холодные блоки для компенсации брака. Т.е. производится SSD с запасом, но из не очень качественных чипов. При начальном тестировании бракованные просто отключаются. Если все оказались живы, то лишние блоки лежат просто мёртвым грузом (ну не выпускать же одинаковые модели с ёмкостями 240, 250, 256GB). Но думаю, всё-таки по факту пункт 3 используется, хотя от китайцев всего можно ожидать.
Эта хитрость для HDD, для SSD и флешек как я понимаю, используют «лишние» байты на служебные цели.
Это не хитрость, это просто использование нормальных (для непрограммистов) единиц измерения объемов любых носителей информации, о чём они честно пишут в спецификациях. Все SSD накопители, все флешки, даже те которые в принципе не умеют в дефрагментацию (хинт — большинство флешек, особенно китайских дешевых, не умеет, хоть навечно их подключайте к зарядке) — указывают объем в единицах SI, даже объемы переданной/передавамой информации в этих же единицах, исключение делают только для RAM, где 1GB = 1GiB = 2^30 байт.
"лишние" байты, если он и есть, как правило не учитываются в объеме заявленном пользователю, то есть если у нас есть SSD (или флешка) на 32GB, то это (как указано выше) 29.8GiB и точка — просто потому что 32GB, а не 32GiB, и любой резерв (коли таковой используется вообще) будет сверх этого объема (о чём тоже иногда пишут в спецификациях).
"Это не хитрость, это просто использование нормальных (для непрограммистов) единиц измерения объемов любых носителей информации, о чём они честно пишут в спецификациях. "
Угу и переход был именно когда это стало приносить ощутимый маркетинговый эффект, а пока были 10ки мегабайт всех производителей устраивали степени 2-ки
это команда ATA
Флешки работают по сути по подмножеству SCSI протокола. Там скорее всего TRIM нет. Новые (USB3.0+) уже скорее всего умеют USB Attached SCSI и там всё наверное веселее, но не проверял.
1. GC. Без него не будет работать ни один nand-flash накопитель. Будь то серверный или самая дешевая китайская TFка;
2. Будет ли FTL «крутиться» без связи с хостом, одному разработчику FW известно. Штука чисто программная. Если у кого есть флешка, осциллограф и прямые ручки (у меня последнего не хватает такую мелочь паять), можете припаять проводок на ногу CS и посмотреть, дергается ли сигнал без хоста… На шину данные/команды паять крайне не рекомендую, так как она работает в DDR и подключение осцила, даже низкоемкостным щупом, почти гарантированно «испортит связь». Но, снова же — это для отдельного устройства будет.
3. Да, данные могут протухать. И достаточно быстро.
4. Не стоит выдергивать флешки и карты памяти без предварительного размонтирования. Там нет никаких конденсаторов, но есть алгоритм восстановления после пропадания питания, а на сколько он хорош — одному разработчику известно.
Теперь немного дополню и обнаглею.
По поводу падения скорости. Многие флешки-диски пишут данные вначале в область SLC, а потом, в фоне, переписывают их в MLC/TLC. Так как SLC операции — самые быстрые, то видна резкая просадка производительности после заполнения SLC кэша. Теперь наглость. Хотелось бы следующую статью, про trim, различие между накопителями с DDR и без, про «полезность» дефрагментации SSD средствами ОС… Видно, автор отлично разбирается в теме! А я, увы, грамотно и читабельно писать не умею:(
По-моему у вас занижена самооценка, всё что вы написали, изложено внятно и понятно. Пишите статью.
Да боже мой! Никто не пишет статьи за один присест. План, факт чекинг, воды налить, вычитать через пару дней и всё. Я вот не за пушкинским слогом сюда хожу и предпочитаю своеобразные, но содержательные тексты этим вот новым обзорам / переводам / графомании.
Пишите и публикуйте, если есть че :)
- GC. Без него не будет работать ни один nand-flash накопитель. Будь то серверный или самая дешевая китайская TFка
Тут вы ошибаетесь. Возьмите самую дешевую китайскуй флешку и перезапишите файл размером в пару килобайт пару тысяч раз (тольчо честно — с sync после каждой записи) — с вероятностью 90% она умрёт ещё на первой тысяче, чего не должно случатся при наличии хоть какого-то GC.
1. GC. Без него не будет работать ни один nand-flash накопитель. Будь то серверный или самая дешевая китайская TFка;
Будут работать накопители и без GC и прекрасно работали. Естественно алгоритмы ротации при большом заполнении статически данных становились менее эффективным. С учетом многократного падения надежности NAND памяти c переходом от SLC к MLC, TLC, QLC начали разработки микропрограмм которые могли бы более эффективно размещать данные, дабы большее число блоков участвовало в ротации, ради того, чтобы емкие устройства с дешевой памятью жили несколько больше. Так как микропрограммы контроллеров понятия не имеют в подавляющем большинстве о файловых системах используемых на накопителях, то взаимосвязь с хостом организована посредством TRIM, где контроллер NAND накопителя от хоста получает информацию об LBA диапазоне из логического пространства, который стал свободным от данных (как именно можно прочесть в АТА стандарте на t13.org). Далее эти места транслируются нулями, а микропрограмма контроллера ведет уже анализ какие блоки можно очистить целиком и можно ли собрать из блоков с малым заполнением какой-либо один блок-апдейт для трансляции. В случае конкретно USB flash и карт памяти речи о TRIM не шло и соответственно алгоритмы GC в принципе не закладывались в микрокод, в отличие от SSD.
2. Будет ли FTL «крутиться» без связи с хостом, одному разработчику FW известно.
Вся трансляция, что в картах памяти, что в USB flash, что в SSD работает без участие ОС. ОС компьютера в принципе не имеет представление о том с каким контроллером она работает и сколько микросхем NAND памяти у контроллера, как организован интерлив между ними, синхронный ли он, какого размера блоком оперирует контроллер и т.п. Для ПК это просто накопитель с которым можно работать по определенному протоколу с использованием команд описанных в стандарте. Для ПК доступен лишь LBA диапазон реализуемый устройством, и вся работа ПК с носителем сводится на уровне RW операций. С появлением TRIM лишь чуть-чуть добавилось передаваемых параметров, но ОС так и не получила какой-либо взаимосвязи с алгоритмами NAND контроллеров.
Если подразумевалось именно активность микропрограммы накопителя только лишь при подачи питания и отсутствия коммуникации с хост-контроллером, то в случае USB flash в подавляющем случае ждать попросту нечего по очевидным причинам. Вряд ли кто-то будет писать микропрограмму со сложным анализом расположения данных, когда эффективность этих алгоритмов без того же TRIM будет сводиться к почти нулю. Так как микропрограмма устройства в принципе ничего не знает о файловой системе на нем и лишь обслуживает RW операции. И без сообщения мест которые стали чистыми ей попросту неизвестно, что можно подчищать.
3. Да, данные могут протухать. И достаточно быстро.
При исправной не изношенной NAND памяти сносного качества не так и быстры процессы естественной деградации. Хватает в запасе NAND микросхем, которые уже хранятся не один год и при перечитывании в ридерах PC3000flash или Nand Reader (софт-центр) отдают дампы в которых можно скорректировать битовые ошибки. Но надо отметить, что с каждым годом хранения количество ошибок растет. Многие уже без Read Retry и манипуляций с напряжением нереально прочесть с приемлемым качеством дампа. В условиях живых USB flash мы как правило наблюдаем, что флешка пролежавшая несколько лет читается заметно медленнее и при чтении даже линейно расположенных данных наблюдаем провалы в скорости (из-за того, что контроллеру приходится проводить больше процедур перечитки микросхем и выше накладные расходы на коррекцию битовых ошибок) В случае флешки, где есть изношенные участки памяти (и они включены в трансляцию) такое проявление мы заметим намного быстрее. А если блоки со служебными данными (с тем же транслятором) попадут на изношенный блок, то и вовсе есть риски, что флешка может и не стартануть.
про «полезность» дефрагментации SSD средствами ОС…
учитывая, что ОС не имеет представления о фактическом расположении данных в NAND микросхемах, то дефрагментация ее средствами во многих случаях не будет полезной, а скорее будет просто множеством пустых RW операций сокращающих срок жизни устройства.
По второму пункту — почти со всем полностью согласен. Единственное, добавлю про многострадальный Trim (не для Вас, а других читателей). Он просто экономит ресурсы при освобождении блока, сообщая, что данные не валидны уже в самой ОС и их не надо переписывать при подготовке блока к стиранию. Но какая страница в блоке валидна, а какая — нет, относительно LBA, уже знает сам контроллер. И вот будет ли FTL «шушрать» в фоне, собирая данные, если мы подали только питание или размонтировали флешку — чисто программная штука.
По пункту 3. А что за память? SLC вообще не протухает, по крайней мере в обозримое время. MLC — хуже, а вот с TLC беда. Знаю несколько человек, у которых диски помирали через полгода-год простоя. QLC — так пока там гарантированное время хранения уже неделями исчисляется, хотя, это данные годичной давности, может что улучшили. А вот что флешка медленней читается после длительного простоя, думаю тут не только в ретраях дело, но еще и в «спасении» данных, то есть, прочитали на ретраях, перезаписали. Снова же, это только мои догадки, а что там творит FW — одному разработчику известно…
По поводу дефрагментации — полностью согласен, но слишком сильно этот миф укоренился в народных массах…
Спасибо за комментарий, было приятно прочитать. Сразу видно, что Вы или в индустрии или очень близко к ней.
Единственное, не понял про GC (в Вашей интерпретации). Возможно, я под ним понимаю более широкий набор алгоритмов. Вплоть до переписывания валидных данных из блока, подготовленного к стиранию. Немного не понял, что Вы подразумеваете под алгоритмом ротации. Все равно надо искать кандидата на erase хотя бы по 2м параметрам: наименьшее количество валидных данных и изношенности. Или в самом простом случае можно обойтись без поиска, взяв самый «старый» блок? Работать, конечно будет, но медленно…
Сейчас будем говорить применительно к USB Flash. Давайте копнем немного работу ОС с носителем c файловой системой FAT32. На котором пусть будет крупный файл (например видео).
При удалении этого файла ОС удалит цепочку занимаемых кластеров из обеих копий таблиц, в директории, где была файловая запись проставит 0xE5 вместо первого байта имени файла. Непосредственно сами данные эта процедура не тронет.
Для NAND контроллера сначала поступит запрос на чтение группы секторов содержащий таблицы FAT и директорию (как правило это весьма небольшое количество блоков).
Следом поступят запросы на перезапись подобного или чуть меньшего объема (зависит от того как именно реализован драйвер, нормальный драйвер не будет предлагать переписывать содержимое таблиц, которое не изменилось).
После этой операции микропрограмма NAND контроллера USB Flash даже не подозревает о том, что огромное количество блоков занимаемых удаленным файлом теперь стали свободными (в случае SSD именно TRIM информирует об освобожденных LBA диапазонах). Эти блоки остаются включенными в трансляцию и по прежнему предоставляют те данные, которое они содержат.
Это утверждение легко проверить. Запишите на USB flash файл, сделайте с помощью WinHex образ. После удалите и опять сделайте образ. И сравните двай файла. Изменения будут только в элементах файловой системы, а в области данных никакой очистки не будет в накопителе без TRIM.
Так вот в случае накопителей, где нет обратной связи с ОС в принципе нет «мусора» (большого количества блоком с очень маленьким заполнением, который бы можно было срастить в одиночный, для более эффективной работы механизма выравнивания износа.)
Как я уже писал в одном комментарии, то можно взглянуть на одну из моих публикаций, где немного описан алгоритм NAND контроллера в USB flash
Знаю несколько человек, у которых диски помирали через полгода-год простоя. QLC — так пока там гарантированное время хранения уже неделями исчисляется, хотя, это данные годичной давности, может что улучшили.
обратите внимание, что я комментировал и указал про исправную память с малым износом. Для того, чтобы SSD или USB flash для пользователя превратились в кирпич достаточно, чтобы транслятор, который записан в тот же NAND перестал читаться. Вероятность попадания транслятора на изношенный блок достаточно высока, так как он постоянно модифицируемый в процессе работы накопителя. Но если в таком умершем накопителе выпаять NAND память, получить дампы, то как правило выясняется, что реальных потерь данных не так уж и много, разумеется если произвести корректную сборку с учетом многих нюансов алгоритмов.
А вот что флешка медленней читается после длительного простоя, думаю тут не только в ретраях дело, но еще и в «спасении» данных, то есть, прочитали на ретраях, перезаписали.
Как бы после чтения «медленных» файлов при второй попытке получите такие же результаты чтения.
Правда существенное торможение еще может быть при чтении неустойчиво читающихся кусках транслятора (не забываем о том, что MCU весьма скромный размер ОЗУ и в некоторых случаях держать полный транслятор недопустимая роскошь). И вот в этом случае, если по какой-то причине микропрограмма перепишет заново транслятор или его проблемную часть можно ожидать оживления накопителя.
Еще в середине 90х мне попалась книга Питера Нортона про устройство IBM совместимых компьютеров и был доступ «Поиску» у друга и в школе заменили советские Агаты на 386sx. Так что многие эксперименты над дискетами, которые можно было сделать, уже тогда сделал. Соответственно, как работает FAT — прекрасно понимаю. Но мы разошлись в терминологии. Вы понимаете под «мусором» те записи, которые не актуальны для ОС, а разработчики твердотельных накопителей понимают под «мусором» повторно перезаписанный LBA. Попытаюсь объяснить. Допустим, ОС модифицирует таблицу размещения файлов, допустим, восемнадцатый LBA. Ну и 10 раз его переписала. В текущем блоке NAND мы получили 10 записанных страниц, ассоциированных с 18 LBA. Соответственно, актуальной будет последняя запись, что будет отражено в «трансляторе», по нашему — L2P, таблица соответствий LBA и физического адреса в NAND. Так вот, когда блок будет подготавливаться к стиранию, будет переписана только последняя копия 18 LBA, остальное — мусор. Я под GC понимаю именно этот алгоритм. По большому количеству параметров выбирается кандидат для стирания. Один из них — количество валидных записей. Но валидных именно в «понимании» nand контроллера. Последняя копия, актуальная в L2P. Понятное дело, если Вы случайно попутали ссылки и скачали альбом рэп исполнителя, но тут же его удалили, весь этот трешак будет кочевать из блока в блок, пока на свободные, с точки зрения ОС LBA не будет произведена повторная запись. Но если мы «затримим» эти LBA со стороны ОС, в L2P они будут помечены как невалидные и не будут перемещены в новый блок, что экономит как время так и ресурс памяти… Надеюсь, под GC мы пришли к общему знаменателю!
По поводу «транслятора». Я не могу много написать из за соглашения о неразглашении, но некоторые вещи, размещенные в общем доступе, могу озвучить. Ну во первых, сама L2P очень даже не маленькая. Ее размер легко прикинуть по простой формуле. Делим объем накопителя на 1000 и получаем размер L2P. Для небольших накопителей коэффициент может быть больше просто из за меньшей разрядности физического адреса NAND, например, 1500. Но все равно — для накопителя в 1Gb надо иметь таблицу в 1Mb. Соответственно, никто столько ОЗУ в контроллер не положит. 1Gb — это уже позавчерашний день, на 8-16-32 уже копейки стоит. Так что L2P кешируется небольшими частями и «размазана» по всей памяти. И утрата одной из частей — не катастрофа. Скажу так, я смогу восстановить всю таблицу, даже если она будет полностью утеряна. Конечно, на своем железе со своими алгоритмами. Вот тут и проявляется разница. Даже если контроллер и память одинаковые, накопитель от известного бренда будет гораздо надежней, чем нонейм.
Надеюсь, и на последний пункт я ответил. L2P постоянно переписывается, не вся, а то, что изменилось. Но если даже будет утрачен кусок, в качественных накопителях он будет восстановлен и перезаписан.
а разработчики твердотельных накопителей понимают под «мусором» повторно перезаписанный LBA. Попытаюсь объяснить. Допустим, ОС модифицирует таблицу размещения файлов, допустим, восемнадцатый LBA. Ну и 10 раз его переписала. В текущем блоке NAND мы получили 10 записанных страниц, ассоциированных с 18 LBA.
Дело в том, что во многих алгоритмах флешек транслятор в сравнении с SSD сильно упрощен. Многие каждую попытку записи в тот же FAT будут отрабатывать так:
1) Чтение целиком блока (группы страниц).
2) Очистка прочитанного блока в NAND.
3) Внесение незначительного изменению в одну из страничек.
4) Выбор оптимального блока для записи и запись.
На таких флешках получаем колоссальный провал в скорости записи на мелких файлах.
Как правило более новые алгоритмы уже не спешат трогать оригинальный блок и просто формируют блок-апдейт в котором содержатся группа модифицированных страниц которые включаются в разные места в трансляции.
Блоки-апдейты используются как точечные наложения на трансляцию. Но в ограниченных условиях USB flash их количество не бывает особо большим. Микропрограммы использующие блоки-апдейты во многих флешках весьма просты. Некоторые из них «подглядывают» в юзерзону и определяю положение таблиц FAT или применяют данный метод для первых блоков в трансляции и для них используют методы писания исключительно блоками-апдейтам. У таких флешек есть некоторое подобие «уборки мусора», но оно обычно весьма быстротечно и обычно достаточно нескольких секунд после окончания копирования, чтобы флешках завершила процессы с этим «мусором».
По поводу «транслятора». Я не могу много написать из за соглашения о неразглашении, но некоторые вещи, размещенные в общем доступе, могу озвучить. Ну во первых, сама L2P очень даже не маленькая. Ее размер легко прикинуть по простой формуле. Делим объем накопителя на 1000 и получаем размер L2P. Для небольших накопителей коэффициент может быть больше просто из за меньшей разрядности физического адреса NAND, например, 1500. Но все равно — для накопителя в 1Gb надо иметь таблицу в 1Mb. Соответственно, никто столько ОЗУ в контроллер не положит.
Для современных носителей коэффициент похожий. Для старых коэффициент поболее.
Например флешка 1Гб, размер блока 0x21000 байт (128кб полезных данных), страница 2112 байт, размер данных в ней 2048.
Для блочной трансляции нужно 8192 блоков, чтобы сформировать полный гигабайт. Для описания очередности использования часто применялись двухбайтовые записи с порядковым номером физического блока в логическом банке. Т.е для описания L2P нужно 16 384 байта. Добавим к этому еще дополнительные таблицы похожего размера и в принципе получим реальный размер транслятора. В такой маленькой старой флешке он не превысит 64-128кб в сумме. Округлим до 128кб и это даст соотношение 1 к 8192.
Разумеется даже в таких флешках правило имело место деление на логические банки и у каждого банка была своя табличка трансляции.
Скажу так, я смогу восстановить всю таблицу, даже если она будет полностью утеряна. Конечно, на своем железе со своими алгоритмами.
многие разработчики в страницы кроме пользовательских данных и ECC отводят место для номера блока/страницы (не везде конечно), различных флажков и т.п. И знаю, где и что значат байты, биты в служебке несложно реконструировать актуальные таблицы трансляции. Или провести сборку образа зная как интерпретировать служебные данные.
Так что L2P кешируется небольшими частями и «размазана» по всей памяти. И утрата одной из частей — не катастрофа.Для пользователя это таки обычно катастрофа так как в большинстве простых фирмварей нет в помине каких-либо процедур для реконструкции транслятора.
Даже если контроллер и память одинаковые, накопитель от известного бренда будет гораздо надежней, чем нонейм.С большими оговорками. Например в случае USB flash, где подобные наборы одинаковых микросхем друг от дружки отличает только текстовая строчка с названием в паспорте устройства и пластик корпуса вряд ли можно назвать справедливым.
1. Современную TF. От известного производителя, была подарком при покупке смартфона от того же производителя (32G).
2. Современную TF. От неизвестного производителя, была положена в комплект 3D принтера добрыми китайцами (8G).
3. USB флешка от не самого известного производителя, куплена лет 8 назад, на тот момент — одна из «топовых», «корпус» из натуральной кожи, похоже даже не молодого дерматина, так как до сих пор имеет товарный вид, хромированная фурнитура. На тот момент — одна из самых емких по еще приличной цене (16G).
4. USB флешка от нонейма, хоть на ней и гордо красуется «Texas Instruments», это рекламная раздаточная продукция с семинара, который посещал лет 10 назад. Честно, даже забыл, где мне ее «вручили». (256M)
Ну и решил их потестить. Понимаю, что методика теста — сродни определения направления и силы ветра указательным пальцем, но тенденцию можно проследить. Использовал Гном Диск, точнее, его тест производительности. К сожалению, минимальный объем чанка — 1М, По этому я тестировал на 10М и 1М и некоторые — на 100М. Да, это не мелкие файлы, но снова же, тенденцию уловить можно. Итак, результаты получились интересные.
— Первая TFка что на большом, что на малом чанке показала почти одинаковую среднюю производительность. Но на больших кусках был явно виден меандр, а на малых — такой шум, что производительность скакала от средней на +-30%, но итоговая отличалась на проценты. ~7.6Мб/с против ~7.2Мб/с. Очень похоже, что используется SLC кеширование. Но кэш достаточно скромный.
— Вторая TFка так же показала почти одинаковую производительность на больших и малых кусках, только «шум» был почти незаметен. Провал по скорости относительно «фирмы» — 1Мб/с. Но на ней как то странно выглядело чтение. Если на всех остальных экземплярах — график скорости чтения был почти прямой, 10/12Мб/с, то на этой иногда проваливался до 3х.
— А вот дорогущая USB повела себя странно. На больших кусках чуть больше 5Мб/с, а вот на малых — иногда опускался меньше 3х. И эти малые куски — не такие уж и малые. Похоже, какой то переходной вариант, память уже более менее современная, скорее всего MLC, а алгоритмы не доработанные. Да и без теста, когда ей активно пользовался, по ощущениям запись была очень медленная.
— USB флешка от Ti. Блин, интересная штука. Выиграла по скорости записи больших кусков почти у всех экземпляров, поделив первое место с фирменной TFкой, А вот на маленьких — упала с 7.6 до 5.3… Относительно маленьких. Но все равно обгоняет USB на 16 Гб. Похоже, там как раз используется алгоритм, описанный Вами. К сожалению не могу задать совсем маленький кусок, чтоб еще сильнее продемонстрировать разницу. К тому же — по скорости чтения она обогнала всех! 15Мб/с. Вот что SLC животворящий делает даже при примитивных алгоритмах. Хотел посмотреть, что там за чип и нанд, но нехороший производитель затер все маркировки.
Какой вывод сделал лично я для себя — современные флешки ближе к SSD по алгоритмам управления памятью. А вот реальную пользу от «зарядки» я так и не понял, это надо брать современный, накопитель, раздраконивать и тыкать осциллоскопом.
А вот был бы такой «банк»-зарядник флешек, чтобы стоял на столе, и флешки не разбрасывать везде, а втыкать их туда, как на обычное хранение. А эта штуковина периодически подавала на воткнутые флешки питание. Наверное, ей самой можно было бы питаться или от батареек или от своего аккумулятора, ну сколько флешкам тока нужно, если запитывать их только изредка…
И форм-фактор в виде маленького шкафчика с дверкой (чтобы случайно не махнуть рукой и не выломать все торчащие флешки с корнем).
Фактически это переносной аккумулятор, как просто для подзарядки телефонов, только чуточку умнее, чтобы раз в неделю на сутки сам подавал питание на свои USB-порты по расписанию.

У меня дома в столе валяется около 20 флешек, от первой приобретенной (на 128 МБ, USB1)

до современных. Данные не терялись частично ни разу, флешки либо дохли целиком, либо уходили в ридонли безвозвратно.

1) я согласен что контроллеру флешки «возможно» нужно время на оптимизацию работы с памятью флешки.
2) нет описания того, как поведет себя флешка если её тыкать в зарядник для телефона/планшета.
Насколько я знаю, телефоны/планшеты и т.д. современные гаджеты всё чаще используют быструю зарядку с помощью импульсной зарядки (даже моя старая нокия испульсником заряжалась). Отсюда вопрос: насколько корректно флешку, рассчитанную на работу с постоянным током, тыкать в зарядку с импульсной подачей питания, и умеет ли последняя определять что устройству нужен постоянный ток? И как это работает. Вот этот вопрос осветить бы.
Я читал статью про USB 3.1+ и целый веер технологий быстрой зарядки по USB с дикими токами и даже поднятием вольтажа! Но там везде умные контроллеры, которые определяют устройство и возможную максимальную подачу питания. К сожалению почти каждый производитель такой технологии уже сверх-быстрого заряжания лепить своё виденье со своими контроллерами и кардебалетом, отчего часто они не совместимы у разных производителей.
всегда держу 2 копии
На прошлой неделе я, наводя порядок на таком офлайн-диске, случайно сделал rm -rf не в той папке и стёр бэкапы. Повторное создание бэкапов я решил отложить на следующий день (ибо было некогда), но уже через несколько часов после удаления скоропостижно скончался основной диск без предупреждения (ещё за день до этого показатели smart были в полном порядке), и в итоге я лишился всех своих фоточек за последние десять лет. В общем, лучше держать третью копию в облаке)
на 3-х отдельных устройствах
Их стоит географически разделить, а то мало ли чего
Но 3 бэкапа важной информации, конечно, актуальны.
через FreeFileSync. Давно пора про него статейку написатьhabr.com/ru/post/486532
Другими инструментами пока не пользовался. Народ еще любит rsync, он очень гибок.
А что значит "не покажет конфликт"? ST вполне показывает список планируемых добавлений/замен/удалений, если ему заказать превью перед прогоном, и нужные действия можно отменить. А FFS может в сами файлы заглядывать, аппендить например документы офиса?
В rsync тоже посмотрю, спасибо за упоминание.
— синхронизировать 2 папки
— сначала поменять какой-то файл слева
— потом поменять его же справа
— попытаться снова синхронизировать
ST просто предложит затереть файл слева версией справа, так как она более новая. И я боюсь, что вы уже не раз таким образом затирали какие-то изменения, когда успели поменять файлы на обеих сторонах. FFS скажет, что оба файла поменялись с момента предыдущей синхронизации и не будет ничего синхронизировать, пока вы не выберете, что делать: скопировать слева направо, справа налево или разрешить конфликт вручную, а затем уже скопировать новую версию в обе папки. FFS не умеет показывать diff, насколько я знаю. Я пользуюсь внешней программой для этого (любым сравнивателем). Если вам надо сравнивать бинарные файлы типа офисных, то тут нужны правильные компарилки. Они есть, но не универсальные.
Для часто изменяемых файлов гораздо проще пользоваться облаком для синхронизации.
Попробуйте следующее:


Можно отменить синхронизацию, можно открыть обе папки и посмотреть в файлы, и всё такое. Изображения можно посмотреть в полном размере
ST просто предложит затереть файл слева версией справа, так как она более новая. И я боюсь, что вы уже не раз таким образом затирали какие-то изменения, когда успели поменять файлы на обеих сторонах. FFS скажет, что оба файла поменялись с момента предыдущей синхронизации и не будет ничего синхронизировать, пока вы не выберете, что делать: скопировать слева направо, справа налево или разрешить конфликт вручную, а затем уже скопировать новую версию в обе папки.Ноты предвзятости вижу я, избежать которых пытался, и разгадать не могу истинную причину: преданность ли открытому, на светлую сторону ведущая, или ненависть к тёмной стороне, которая сама на тёмную сторону незаметно заберёт.
Не бойтесь за меня, я за многие годы ничего никуда не перезаписал, у меня всё со зрением и внимательностью в порядке :)
В общем, я прочёл мануал по FFS, в целом он может всё то же самое ±лапоть, но по всяким допфичам он для меня оверкилл, копаний не стòящий; по скриншотам визуально тоже перебор. Только вот автосинхронизация по подключению устройства манит очень, этого у ST не будет скорее всего никогда.
Для часто изменяемых файлов гораздо проще пользоваться облаком для синхронизации.Поддерживаю, так и делаю. Но, тем не менее, FFS умеет синхронизировать в реальном времени, у него служба есть.
В общем ещё раз спасибо за информацию, FFS для меня функционально перебор.
Если бы контроллеры флешек занимались сбором мусора, производители первыми бы разрекламировали такую фичу ибо это серьёзное конкурентное преимущество. Значит рекламировать нечего.
Когда в SSD появились сборщики мусора тут же возникла необходимость TRIM, о чем одномоментно узнали все пользователи и о чем много написано выше. До этого trim не был нужен, полагаю неспроста.
А с другой стороны лет этой истории уже дофига.
Правда там PRO упоминается.
840 evo — одна из ранних моделей на tlc (2d, 19nm). Блоки данных, к которым долго (месяцами) не обращались, начинают читаться на пониженных скоростях (видел порядка 30 МБ/с). Про патч — https://habr.com/ru/post/378575/
Первые сообщения https://www.anandtech.com/show/8550/samsung-acknowledges-the-ssd-840-evo-read-performance-bug-fix-is-on-the-way + https://www.overclock.net/forum/355-ssd/1507897-samsung-840-evo-read-speed-drops-old-written-data-drive.html
Первый патч, 2014 https://www.anandtech.com/show/8617/samsung-releases-firmware-update-to-fix-the-ssd-840-evo-read-performance-bug (https://habr.com/ru/post/362647/) и пояснение физики процесса — в tlc ячейке есть 8 уровней заряда (для хранения 3 бит), электроны из fg flash постепенно утекают. В контроллере есть алгоритм, учитывающий и моделирующий утечку заряда, и для старых ячеек он мог выдавать неверные уровни напряжений — процесс считывания многократно повторялся контроллером для получения достаточно качественных блоков данных (чтобы ecc сработал).
Второй патч 2015-04 https://www.anandtech.com/show/9196/samsung-releases-second-840-evo-fix (https://habr.com/ru/post/378575/) — прошивка начинает периодически перезаписывать старые данные (в другие блоки) "time installing a firmware that periodically refreshes old data rather than the one-off refresh of the performance restoration tool.", оценки журналистов "our own calculations even 5 years of refreshes at 1/week would only be 26% of the drive’s rated 1000 cycle lifetime.".
У меня есть диск из этого семейства с OEM прошивкой. Патченную прошивку от самсунга их софт поставить не может; оем производитель патч к своей версии прошивки не применил. Уже несколько раз делал бэкап + https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase для сброса всего диска; после erase (trim) производительность в целом восстанавливается.
Говорят эти диски вполне часто мрут — часть прошивки и служебные таблицы лежат в nand flash массиве и если блоки с ними не читаются (после многомесячного хранения диска в выключенном состоянии) — то накопитель погибает — https://blog.elcomsoft.ru/2018/12/pochemu-ssd-vyihodyat-iz-stroya-kto-vinovat-i-chto-delat/. Есть неоконченное мегаисследование диска — http://www2.futureware.at/~philipp/ssd/TheMissingManual.pdf
Пример сдвига напряжений для qlc, полгода при 40 градусах и высоком износе, модель https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2017/20170809_FF21_Miladinovic.pdf#page=7
Теоретические подробности в целом для флэш-памяти — https://arxiv.org/pdf/1706.08642.pdf Read disturb errors, Retention errors, P/E cycling errors, Program errors, Cell-to-cell interference errors; 5 Error mitigation — refresh mechanisms (2й патч 840evo), read retry (медленное чтение), voltage optimisation, ...
Формально, TRIM не нужен пока есть свободное место — просто GC будет намного более медленным и печальным (чем меньше места — тем печальней). Современные SSD, особенно энтерпрайзные, прекрасно обходятся без него (потому что многие железные RAID контроллеры его просто не поддерживают).
Ну и за ликбез спасибо!
Знаю я тут одну флешку, тоже заряжается перед работой)))
Шутка конечно, однако надёжность там околонулевая — в разы меньше, чем у флешек. Мне попадались флешки, которые прожили более 10 лет, но ни разу не приходилось видеть MicroSD-карточку, которая при более-менее активном использовании (внутри RPi, к примеру) прожила бы хотя бы два года.
3.5" дискетки по ощущениям надёжнее и живучее, чем эти карточки.
Ну у меня таких несколько. Начиная от «больших» SD на 32G, несколько микро на 64 и одна на 256. Причем большая SD работала как накопитель для торрент-клиента года 3-4.
По поводу RPi — там свои заморочки, и я в общем то не удивлен. Часто слышал что в них карточки убиваются буквально за полгода.
Не нагнетайте, я вам горсть таких показать могу, например таких, которые отпахали в регистраторах и продолжают. Самый живучий экземпляр — 8 Гб, 8 лет в фотоаппарате, причём половину этого времени на ней помимо фоток болтался кэш виндового ReadyBoost от нетбука, на который снимки и видео с этой камеры и скидывались. До сих пор пашет, я её даже менять не вижу особого смысла. Если это не надёжность, то что?
Часов с батарейкой там нет и после включения они не знают — прошло 5 минут с момента выключения или 10 лет.
Непрерывно обновлять? А как же тогда режим пониженного потребления организован? Измерения тока вам отлично покажут, что флэшка потребляет на порядок меньше, чем при записи. Вы даже просто пальцами можете убедиться, что при активной работе (даже на чтение) флэшка потребляет значительно меньше, чем при неактивности.
Никакие флэшки и SSD (кроме последних поколений) ничего с хранимыми данными сами не делают — сам никто ничего не обновляет никогда. При чтении памяти некоторые продвинутые SSD могут перезаписывать страницы FLASH, которые читаются неуверенно (если в контроллере и памяти предусмотрена коррекция ошибок). Так что читать данные на хороших SSD полезно.
Производители современных MLC NAND FLASH чипов гарантируют примерно 3000 циклов стирания и JESD47G, что соответствует не менее 5 или 9 лет (в зависимости назначения устройства) работы при 55'C. Правда, износ памяти круто влияет на время хранения и допустимые температуры — не протирайте FLASH до дыр.
Так что, большей частью — урбан леджендс, господа.
И вот вы сказали про MLC. Такие вещи ещё практически не выпускаются. В основном TLC и QLC. А у них время хранения будет ещё меньше.
Если используется TLC/QLC память, то обязательно нужна и есть регенерация данных при чтении — когда вам скучно, то читайте свои данные, господа!
Сейчас посмотрел, сколько-либо брендовые флэшки (начиная с SunDisk) 256 GB и меньше — даже USB 3.1 — используют максимум MLC и никакой автоматической регенерации. Регенерация при чтении зависит от прошивки (некоторые прошивки для того же ширпотребного PS2251 точно делают регенерацию при чтении). Отсюда мораль — не заряжать флэшки надо, а читать.
В общем, полез почитал даташиты.
Никакие флэшки и SSD (кроме последних поколений)
не поделитесь, что за даташиты вы читали? я не находил даташиты на контроллеры ssd
И почитал даташиты на сами чипы памяти — там указываются характеристики надёжности хранения данных и при каких условиях они достигаются. Кроме того, там иногда даются рекомендации о том, нужны ли какие-то специальные программные алгоритмы повышения надёжности хранения данных при работе с этими чипами.
Никогда не видел чтобы скорость восстанавливалась сама собой — некоторые флешки медленные сразу, некоторые изначально быстрые, но скорость падает после полного заполнения и восстанавливается только после форматирования служебными утилитами.
Почему на флешках не делают второй индикатор, который показывает, что она уже навела у себя порядок и можно ее убрать на месяцок другой?
Еще я думаю, что время, за которое она успеет навести порядок исчисляется в милисекундах, и достаточно просто оставить на пару минут флешку в компе, когда вы ее поюзали. Хотя если объем флешки большой, и она давно не прибиралась, то может и пары секунд не хватить.
Может быть для простого обывателя будет достаточно следующего алгоритма? Сливаем все с флешки на компьютер, очищаем, заполняем под завязку большим файлом, стираем, возвращаем данные на место.
Можно руками, можно програмку написать.
Я хочу добиться полного заполнения блоков страницами. Набивая накопитель под завязку мы вынуждаем его путем потери скорости записи в данном цикле производить оптимизацию. Зато в конце в каждом блоке окажутся страницы принадлежащие только одному файлу. При его удалении они все должны освободиться.
Это не самый эффективный способ оптимизации, но если он сработает, почему бы и нет?
Я пытаюсь вникнуть в теорию. Разве при забивке накопителя одним единственным файлом не произойдет занятие всех блоков со 100% заполнением? И после удаления этого файла актуальные данные уже должны ложиться дефрагментированно. Мне кажется тут никакой поддержки по оптимизации со стороны накопителя не требуется. Понятно, что к самому концу записи скорость сильно упадет, т.к. останутся только фрагментированные блоки. Зато после этой долгой операции флешка снова вернет свою скорость на какое-то время.
Если бы оно так работало, то скорость записи флешки была бы всегда линейная, но по факту мы видим, кеш устройства (на несколько мегабайт), а затем когда он заканчивается, видим реальную скорость работу устройства (флешки).
Скорее всего — это заложено в алгоритм работы контроллера (когда пишет, сразу на перёд что-то потирает/очищает), сама флешка ничего не делает в простое.
И такой механизм во всех флешках?
Но… врядли это реализовано потому что это производителям (особенно производителям контроллеров) не нужно, флешки купят и так, а кому нужны быстрые — купят быстрые флешки подороже.
Годится как идея для стартапа (сделать чуть быстрее флешки на медленных дешевых чипах), но не более того.
P.S. Написал Кингстону в соцсетях и в личку; может, через некоторое время ответят на комментарий YMA habr.com/ru/post/512886/#comment_21900570 про влияние зарядки на флэшки с точки зрения производителя.
Винда… Винда записывает файлы на флешку сразу, как только это возможно. Старается не хранить данные в КЭШ. Даже индикатор прогресса записи файлов максимально точно описывает процесс записи на диск. Пожтому, с точки зрения данных, если файлы записались, то можно выдергивать накопитель из хоста, и быть уверенным, что файлы записались.
Линукс — штука не такой. Линукс очень сильно зависит от настроек, дистрибутива и все такое. Известные мне дистрибутивы (убунту, дэбиан) старались максимально КЭШировать запись на накопитель. Прогресс записи в линуксе неадекватно показвал скорость записи до 1000 МБайт/с, при том, что реально ни одной операции записи на накопиель не производилось. Если в этот момент вытащить накопитель из хаба, то на другом компе файлов мы, конечно не увидим. Зато, как и следовало ожидать, когда нажимает «Извлечь», то линукс говорит «погодите секундочку» и без всякого прогрессбара начинает запись файлов на накопитель. Понятное дело, что запись файлов бодбшого объема занимает больше секундочки. У меня тут к линуксу претензии, птому что польшователь по незнанию может подумать что просто все зависло, устал ждать, и выдернул накопитель. Скорее всего, птом придется повозиться еще и с битой FAT.
С линуксом все понятно, давайте копнем глубже винду:
Файлы пишутся как видятся — уже хорошо. Но в чем тогда суть Safety remote device? А в том, что кроме видимой активности копирования файлов может быть еще невидимая активность фоновых процессов (например, по флешке шарится антивирус). Или, например, пользователь может банально забыть, что у него открыт файл ворда прямо с флешки. Если у пользователя есть привычка делать Safety remote device, то ОС сообщит при попытке извлечения, что флешка используется, и на том уже спасибо. Safety remote device — это, скорее, гарантия того, что после извлечения уже никакая программа не будет лазить на диск.
Чем же опасна активность флешки во время извлечения? Объясняю. Не все производители добросовестно думают о том, что будет происходить с флешкой при пропадании питания, иногда экономят банально на конденсаторах даже. Если производится операция программирования NAND-памяти, и в этот момент пропадает питание, то нет гарантий, что страница данных запишется корректно. При записи некорретной страницы опять же есть два возможных варианта: что разработчики софта подумали о такой возможности, и что разработчики софта не упели к дедлайну подумать о такой возможности.
Вывод: так как конечный пользователь не в курсе, как работают алгоритмы во флешке — лучше делать Safety remote device, чем не делать. Это не дает никаких гарантий, но снижает вероятность как потери данных, так и окирпичивания флешки вообще.
В остальном же, никогда не следует доверять флешкам, так как вариантов сэкономить время разработки за счет потери надежности хранения данных существует превеликое множество. Лично я чаще видел, как умирают декоративные noname флешки, чем именитые.
По поводу GC — то же самое: я не говорю, что выравниванием возрастов занимается GC, для этого есть WL.
1) втыкаем флешку в комп с линуксом
2) не монтируя, делаем
dd if=/dev/sdb bs=1024 | md5sum > $(date "+%Y-%m-%d.md5")
3) пару дней «втыкаем-вытыкаем», по-прежнему не монтируя, и повторяем п.2
USB-флешки: заряжать нельзя игнорировать