Как стать автором
Обновить

[Информационный пост] Файловые системы для USB накопителей и карт памяти

Время на прочтение3 мин
Количество просмотров37K
Всего голосов 28: ↑21 и ↓7+14
Комментарии40

Комментарии 40

Плюс при использовании exFAT становится неактуальной проблема совместимости флешки одновременно с Windows и OS X
А с XP? Вроде как на XP без бубна exFAT не читается? Или я ошибаюсь?
Все верно, с XP могут быть проблемы.
Чтобы добавить поддержку exFAT необходимо установить апдейт KB955704
При этом уже должен быть установлен SP2-SP3
НЛО прилетело и опубликовало эту надпись здесь
В корпоративной среде ездят и еще будут ездить пока железяка на которой она крутится не сдохнет (у самого парк 300+ машин из них под 100-150 XP).
Вы еще про WinServer 2003 забываете, а он вроде только недавно с поддержки MS снят.
Угу. А EXT4 забыли ( у меня на внешней флешке система стоит у медиа центра на intel NUC. Чтение нечасто — все в кэше. Запись видимо только логи. Чего ожидать от продолжительности жизни? Объём — 16 ГБ
А если на NTFS отключить журналирование?
Емнип, на съемных дисках оно отключено по умолчанию.
Извините за ньюфажество, но меня давно мучает вопрос — почему оборудование (телефизоры, телефоны, навигаторы и т.п.) поддерживают в основном только FAT (и его виды)? Только из-за отказоустойчивости? Но ведь есть же и другие отказоустойчивые ФС, причем открытые и с ними не нужно заморачиваться на счет лицензий, да и поддерживают они больше чем 4GB.
Потому что ему много лет он изучен вдоль и поперек и имеет кучу реализаций(испытанных и отлаженых) под огромную кучу платформ, от x86_64 до 8ми битных микроконтроллеров. Это просто удобно, просто и предсказуемо.
FAT? Отказоустойчивая? Да вы, видно, шутите.
А почему? Да всё дело в Windows. Как Баба Маша будет с фотоаппарата фотографии на компьютер переносить? Через спец ПО? Тогда вообще подойдёт самая примитивная самописная фс, которая будет лишь внутри устройства использоваться. Но ПО еще и поддерживать нужно. Если пользователи на новой ОС не смогут копировать файлы со своего устройства, то на крендель они пошлют такого производителя в следующий раз. В итоге проще заплатить копейку, что бы везде всегда работало.

UPD: ну и комментарий сверху тоже истинну глаголит. Почти любой системщик может структуру FAT наизусть как таблицу умножения рассказать, если его разбудить среди ночи после пьянки.
FAT? Отказоустойчивая? Да вы, видно, шутите.
Всё правильно, ведь сказано именно отказоустойчивая, а не надёжная.

FAT и есть отказоустойчивая ввиду атомарности операций удаления блока из списка свободных (и освобождения занятого блока). В силу чего невозможны такие виды нехорошей порчи ФС, как пересекающиеся файлы. Никаких транзакций для защиты от этого FAT не нужно.

Более надёжные ФС, такие как Ext3, отказоустойчивыми НЕ являются. Они хорошо чинятся ввиду наличия журнала.
Вы близки к тому, чтобы перевернуть мою картину мира.
Я прекрасно помню, какая куча проблем возникала с FAT: стоит выдернуть флешку или выключить питание и в системе появляются потерянные блоки, разрушенные FAT-таблицы и проблемы с индикацией свободного места. Никакой атомарности и отказоустойчивости в ней не было.
И только переход на NTFS избавил от этих проблем. Тут можно спорить, как это достигалось, но с утверждением, что FAT отказоустойчива я не могу согласиться.
Отказоустойчивость означает, что система как-то продолжает работать, несмотря на поломку.
Надёжность означает, что нет поломок или они сразу чинятся.

> потерянные блоки
Неприятно, но ФС продолжает работать.

> разрушенные FAT-таблицы
Суперблок может разрушиться в любой ФС. И решается эта проблема так же, как в FAT — пишется N копий суперблока. Просто в FAT N=2 и они рядышком.

> проблемы с индикацией свободного места
Неприятно, но ФС продолжает работать.

FAT является отказоустойчивой, но НЕ является надёжной.

P.S. А понятие «атомарность» в моём комментарии относится к конкретному действию. В файловых системах с инодами нужно две операции, чтобы выделить файлу блок (1. добавить этот блок в список блоков данного инода, 2. удалить этот блок из списка свободных), а в FAT только одна (изменить таблицу FAT).
>Суперблок может разрушиться в любой ФС. И решается эта проблема так же, как в FAT — пишется N копий суперблока. Просто в FAT N=2 и они рядышком.

А не логичнее бы было хранить их в разных концах памяти например для HDD,
а для флешек, SSD и прочего твердотельного, хранить по копии на каждом чипе памяти (естественно если их несколько)?
Логичнее, но немного мешало отсутствие машины времени.
FAT 32 появилась в 1996 году, флешки на рынке с 1999-2000 годов.
Даже под такое вольное определение отказоустойчивости FAT не попадает.
При нарушении FAT таблиц система перестает работать. При повреждении папок (когда вместо файлов видно была куча произвольных имён), система переставала «работать», так как не отдавала данные и при попытке записать новые либо выдавала ошибку, либо вообще портила данные.
Не вижу ни одного признака отказоустойчивости.
Хорошо, а давайте разбираться, почему у нас FAT таблица оказалась настолько серьёзно нарушена.

FAT-таблица — это, извините за упрощение, массив чисел. По одному числу на каждый кластер. Число обозначает следующий кластер данного файла.
Указатель на файл (например, из директории) — это номер его первого кластера (число).

Единственная операция, которая производится над этим массивом — изменение одного числа.
1) если файл расширяется и под него нужно больше места, то элемент массива с номером последнего кластера из 0 становится номером следующего кластера,
2) если файл удаляется, относящиеся к нему элементы массива устанавливаются в 0.

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

Порча одного числа в таблице FAT — это порча не более чем одного файла. Того, который записывался в момент выключения компьютера. На другие файлы это не влияет. Разве что показываемое количество свободного места может стать неправильным (а это неудобство, а не потеря данных).

Нисколько не сомневаясь в ваших наблюдениях —
какая операция над файловой системой FAT может теоретически попортить что-то глобально (т.е. в файлах, которые не изменяются прямо сейчас)? Дефрагментация, что ли?
Вы уходите от ответа. FAT не является отказоустойчивой. Ибо в случае отказа прекращает работу. Если бы она теряла данные, но продолжала работать, она была бы ненадежной, но отказоустойчивой. Но она — никакая. Данные теряет, работать прекращает.
Операций, которые портят FAT — множество. Первая, очевидная — запись в FAT-таблицу. При расхождении копий FAT-таблиц она прекращает работать, т.е. не является отказоустойчивой.
Вторая, встречается так же часто — запись информации о папке. Папка — это тоже файл. Когда повреждается этот файл, система прекращает работать, так как теряются и повреждаются файлы.
Я настаиваю, FAT не является отказоустойчивой, ибо в случае отказа прекращает работу.
При расхождении копий FAT-таблиц она прекращает работать
Она прекращает работать до запуска проверки, равно как и NTFS, Ext3 и другие (которые после сбоя тоже не будут работать без проверки, но прозрачно запускают проверку при каждом монтировании). Разница лишь в скорости проверки (для журналируемых ФС это быстро, для FAT медленно).

Проверка тупо перезапишет одну из копий FAT другой. И мы вернёмся к ситуации «повреждён только один файл».

> запись информации о папке

Папка изменяется только тогда, когда туда добавляется файл или оттуда удаляется файл.
Если внезапно выключить компьютер — или только что добавленный файл потеряется, или только что удалённый файл останется. Вот и всё.

Не вижу глобальных повреждений ФС, не связанных с тем, что модифицируется в момент выключения компьютера (а эти данные и так будут потеряны, ведь никакая ФС не может гарантировать, что прикладная программа их успела дописать).
Ну что ж, Вы либо не работали с FAT, либо не умеете признавать неправоту.
Внезапно выключенный компьютер может привести не только к потере файлов, но и к повреждению таблиц FAT, повреждению записей о папках и многих других. И система после этого неработоспособна, без дополнительного вмешательства не может продолжать работу. То есть не является отказоустойчивой.
Мы пытаемся выяснить, почему он к этому приводит, а не меряемся годами опыта работы с FAT.
Вы выдвинули несколько гипотез (расхождение FAT и её копии, повреждение папки), но непохоже, что FAT повредило именно это.

Ну что ж, Вы либо не работали с FAT, либо не умеете признавать неправоту.
Вы предлагаете мне заткнуться с моими неудобными вопросами и уверовать, потому что мы пока не нашли объяснения, почему она повреждается таким образом, как наблюдалось вами на практике?

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

— У меня было прозрение, я видел горящий куст глобальные повреждения таблицы FAT от выключения компьютера.
— Не ставлю ваши наблюдения под сомнение, но давайте всё-таки изучим, почему так получилось.
— Да вы, сударь, еретик неверующий, говорю же — своими глазами видел.

Там причин, не связанных с самой FAT, может быть вагон и маленькая тележка. Вплоть до глюков в каком-нибудь проприетарном драйвере ФС, по-железному битых блоков в первых секторах и т.п.
Там причин, не связанных с самой FAT
Моя версия — дисковой write cache на уровне операционной системы.
Вы не верите мне? Изучите вопрос теоретически.
Я рассматриваю не один конкретный случай повреждения, а особенности файловой системы.
Если Ваша цель выяснить, а не отстоять ошибочную точку зрения с помощью хамства, то прочитайте ещё раз:

— FAT неотказоустойчива, потому что при отключении питания\отказе при записи FAT таблиц, система переходит в неработоспособное состояние. Что здесь нужно доказать и что нужно объяснить?
— FAT неотказоусточива, потому что при отключении питания\сбое в момент обновления записей папки, система переходит в неработоспособное состояние. Обновление записи папки — довольно частая операция: добавление, удаление, перенос и переименование файла. Что здесь нужно объяснить.

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

И прекратите хамить.
Вы не верите мне? Изучите вопрос теоретически. [...] И прекратите хамить.
В комментариях выше я рассматриваю работу файловой системы FAT по существу.

Вы мне в ответ пишете «вы должны мне поверить на слово, а если не верите, то идите почитайте учебник», но хам, по вашей версии, почему-то я.

при записи FAT таблиц, система переходит в неработоспособное состояние. Что здесь нужно доказать и что нужно объяснить?
Например, необходимо показать, что порча ФС не была вызвана кривым дисковым кэшем на стороне операционной системы.

Отказоустойчивость ФС обуславливается тем, что никакая операция над ней не может испортить всю ФС (и вообще что-то кроме сейчас изменяющихся файлов).
Любая операция записи, которая требует изменения FAT-таблицы (т.е. расширение на 1 сектор или удаление файла), меняет одно число в FAT (4 байта). Если операционная система (и диск-носитель) переписывает всю FAT целиком в целях улучшения скорости, то это не проблема FAT.

То же самое с папкой. Папка, разумеется, может быть повреждена, но это не «приведёт систему в неработоспособное состояние», если заменить только одно 4-байтное число.

Эти операции уже я рассмотрел выше в комментариях. Вы мне говорите «ну и что, а у меня FAT вообще не монтировалась после выключения компьютера», хотя, может, это потому, что ОС минутами не делает sync().
И даже тогда повреждается не вся ФС, а только те файлы, из-за которых FAT должна была меняться с предыдущего sync() (плюс, может быть, соседние области не длиннее низкоуровневого блока жёсткого диска).

По расхождению двух таблиц FAT — ситуации «mount валится со словами „запустите fsck“, но если fsck запустить вручную, то потом mount работает ок» и «mount автоматически запускает fsck», по сути, идентичны. Единственный тут минус в том, что таблицы две, а не три (в коем случае можно было бы не спрашивать пользователя, какую какой перезаписать).
Я не писал Вам то, что написано в кавычках. Я предложил разобраться самостоятельно, если не верите. Разница есть. Не нужно передергивать. Приписывать мне грубости — это и есть хамство.
Вы оперируете совершенно неадекватными понятиями. Скатились до отказоустойчивость = «не может испортить всю ФС». Да, всю — не может. Привести её в состояние «отказ обслуживания» — может. Потерять данные — может. Проверено.
То, что Вы пишете про 4 байта очень наглядно показывает, насколько Вы далеки от понимания принципов работы ФС. Запись идёт блоками. Самый минимальный блок — это блок физического носителя. Фактический блок записи — это кластер фс, в обычной FAT по умолчанию он был 4Kb. Меньше 512 кластер вообще быть не может в FAT.
Всё, что пишетепро sync, про кеши физического уровня — это могут быть усугубляющие факторы.
Но проблема, которую я пытаюсь втолковать, в том, что FAT архитектурно не является отказоустойчивой файловой системой. Она не защищена от отказов при записи, в отличие от журналирующих систем, она не защищена от отказа носителя — например, корневая папка всегда располагается в одном и том же месте и не дублируется. Фактически, любой сбой, любой природы при записи корневой папки приводит систему в абсолютно неработоспособное состояние.
Ещё раз: любой сбой любой природы — программная ошибка, отказ носителя, отказ питания, могут привести FAT в неработоспособное состояние. Такая система не называется отказоустойчивой.
Думаю, не в последнюю очередь потому что exFAT запатентована и поэтому не может исользоваться в Linux, нормальных реализаций файловых систем Linux для Windows тоже нет, а даже если бы и были, у обычных пользователей были бы проблемы, так как их все равно надо было бы устанавливать отдельно.

Поэтому выбирают наименьший общий знаменатель, который неоптимален, но поддержка присутствует во всех системах.
Добавьте пожалуйста в сравнение UDF
Но UDF это для CD/DVD. Как с ней сравнивать у нее задачи другие.
Зато она не нарушает патентов. Поддерживается всеми ОС и лишена ограничения в 4 Гб на файл.
Я бы сам сравнил, но все мои флешки упираются в производительность. Т.е. нет разницы какая ФС.
Еще раз, она не для HDD/SSD/FLASH/etc. У нее принцип «записал — нужны изменения — дописал кусок с изменениями без стирания предыдущей информации». Это по сути костыльная FS, что бы решить проблемы файловой системы ISO для DVD-RW/CD-RW в которой есть проблема с дозаписью/изменением файлов.
Я не сильно разбираюсь в архитектуре UDF, но цитата с википедии:
UDF allows files to be created, deleted and changed on-disc just as a general-purpose filesystem would on removable media like floppy disks and flash drives
Вы еще видимо и в английском не очень. Написано же, что «аля как на флопиках и флешках» а не для flash дисков.
ОК, запрос принят, я посмотрю, что можно сделать
Ничего не понял.
> карта памяти Kingston SDXC на 256 гигабайт имеет всего две опции — exFAT и NTFS
Почему всего 2 опции, кто запрещает её формать во что угодно?

И вторая непонятка, если я форману карту в NTFS, то какой фотик сможет с неё работать? Карты всегда форматирую на аппарате, где она будет применятся, флешки обычно в NTFS, просто чтобы заливать туда большие файлы, но бывает косяк — телевизор в курсе только про FAT, особенно странно это выглядит у телеков, которые предлагают с флешки играть 1080p.
Изначально речь идет о штатных средствах Windows, а так конечно ничего не будет мешать, кроме ограничений самой файловой системы.

Карты не всегда используются в фотоаппаратах, а вот насчет больших файлов — exFAT прекрасно решает эту проблему.
2 опции — это чудность MS которые считают, что накопители больших размеров нужно форматировать в FS с поддержкой файлов больших размеров (ну и что бы потом пользователь не мучелся от непонимания «а что это у меня места на диске много а ОС при записи пишет что не хватает места»). С коммандной строки можно и в фат отформатировать.

Фотики NTFS в большинстве своем не поддерживают. Так же некоторые устройства хоть и поддерживают чтение NTFS но не факт, что могут поддерживать запись.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий