Все USB-накопители имеют микроконтроллер, который принимает входящие USB-запросы и преобразует их в действия, согласующиеся с фактическим объемом памяти на USB-устройстве.
В случае USB-накопителей с флэш-памятью NAND микропрограмма / микроконтроллер на этих устройствах, вероятно (надеюсь) реализует FTL, который выполняет выравнивание при износе.
К сожалению, вы не можете точно знать, что именно делает этот микроконтроллер, не имея исходного кода для какой-либо прошивки и полностью не зная его небольшую аппаратную платформу на этом USB-накопителе.
Не существует такого понятия, как стандартная аппаратная, программно-аппаратная или программная платформа для флэш-накопителей USB, поэтому вы не можете полагаться на какие-либо стандарты, которые помогут вам точно предсказать, что микропрограмма может делать с входящими USB-запросами, не имея глубоких знаний о микроконтроллер, флеш-оборудование NAND и прошивка под вопросом.
это не о том, что диск или ОС делают внутри.
Я знаю, но без этого внутреннего знания вы не сможете существенно изменить свое поведение при записи. Тем более что существуют различные микроконтроллеры, прошивки и микросхемы флэш-памяти NAND, то, что может оказать какое-либо влияние на одну флэш-память, может не работать на другой флэш-карте.
«тупая» файловая система, которая не особенно оптимизирована для флэш-памяти
Файловым системам, «оптимизированным для флэш-памяти», требуется прямой доступ к оборудованию флэш-памяти, чтобы они могли самостоятельно выдавать команды стирания во флэш-память. Общение с устройством через USB, SATA, SCSI через команды запоминающего устройства не является прямым доступом.
Вероятно, самая простая ситуация, в которой вы можете столкнуться с этим, - это основанные на Linux маршрутизаторы потребительского уровня - базовая ОС Linux включена и имеет доступ к 4-мегабайтной, 8-мегабайтной, 16-мегабайтной или подобной флеш-микросхеме и может общаться с ней и управлять ею напрямую. Android телефоны похожи.
Вы не можете выполнить команду стирания на запоминающих устройствах USB или SATA, отличных от TRIM (и это просто запрос прошивки устройства, а не прямая команда для микросхем флэш-памяти), эти стандарты предназначены для жестких дисков, а не для флеш-оборудования.
Теперь, если бы я создал несколько файлов A, B и C, а затем неоднократно изменил бы файлы на месте, это изнашивало бы диск больше, чем просто добавление B ', C' и т. Д.
Флеш-чипы читаются и пишутся на страницах. Они стираются в наборы страниц, которые Linux-проекты называют «стираемыми блоками». (Это сильно отличается от механических жестких дисков).
Устройства хранения данных на основе Flash реализуют FTL - слой трансляции флэш-памяти. Что это такое: они поддерживают внутреннюю таблицу, которая отображает видимые ОС "блоки" на видимые микропрограммой флэш-страницы (от PBA до LBA), и они также будут отслеживать, какие "стираемые блоки" готовы для новых данных. Входящие записи не будут переходить на флэш-страницу только на основе номера входящего блока, но там, где микропрограмма сочтет это хорошим местом, - и микропрограмма обновит свою внутреннюю таблицу PBA до таблицы LBA, чтобы найти ее, когда она потребуется в следующий раз.
Хорошие прошивки попытаются перенаправить записи в стертые блоки со стертыми страницами по соображениям производительности, и они будут менять местами блоки в фоновом режиме, пытаясь сделать так, чтобы удаление не требовалось перед записью. Когда накопители переполняются, это менее вероятно, и это может сказаться на производительности.
Затем можно предположить, что записи, даже если один и тот же файл и «блок» с точки зрения ОС, не попадают в одно и то же место на флэш-памяти. Таким образом, вы ничего не получите, заботясь об изменении файлов на месте.
Мораль этой истории: не беспокойся об этом. Относитесь к нему как к обычному жесткому диску и сохраняйте резервные копии. Дрянные флешки умрут раньше хороших.