- Sysadminium
- Что такое файловая система
- Файловые системы семейства ext
- btrfs
- JFS
- XFS
- Файловые системы семейства fat
- Итог
- Как изменить размер кластера vfat
- Как я могу отформатировать SD-карту с более надежной файловой системой, используемой в Linux, с определенным размером кластера для лучшей производительности записи?
Sysadminium
В этой статье познакомимся с тем, какие файловые системы могут быть использованы в операционной системе Linux: ext, btrfs, xfs и с другими.
Что такое файловая система
Полезные данные, такие как файлы и каталоги, напрямую на диск не записываются. Между разделом диска и файлами существует прослойка в виде файловой системы.
Файловая система — это средство, которое определяет различные правила работы с файлами, например:
- как данные будут располагаться на диске;
- как будет происходить запись, поиск, чтение или удаление файлов;
- какие метаданные будут использоваться;
- как обезопасить файлы от порчи (например при некорректном выключении компьютера);
Метаданные — это данные о данных, например файл содержит какие-то данные, а метаданные это:
- дата создания файла;
- пользователь создавший этот файл;
- тип файла;
- права доступа к этому файлу;
- и подобная информация о файле.
Разные файловые системы имеют разные ограничения, например:
- максимальный размер раздела;
- наибольший размер файла;
- максимальная длина имени файла.
В этой статье пробежимся по файловым системам, которые можно выбрать при установки Debian 11 и Ubuntu 22.04. При установке Debian 11 вы можете выбрать следующие файловые системы:
Установщик Ubuntu 22.04 имеет несколько меньший выбор:
Далее пробежимся по этим файловым системам:
Файловые системы семейства ext
EXT (Extended File System) — расширенная файловая система.
Ext2 была создана в январе 1993 года для linux, вот её особенности:
- не журналируемая;
- максимальная длина имени файла — 255B;
- максимальный размер файла — 16GB-2TB (в зависимости от размера кластера);
- максимальный размер раздела — 2TB-32TB (в зависимости от размера кластера);
- поддержка POSIX ACL.
Ext2 старая файловая система без журнала, но достаточно быстрая. Современные системы Linux могут работать с этой файловой системой.
Ext3 была создана в ноябре 1999 года и также стала применяться по умолчанию во многих дистрибутивах Linux. Единственное улучшение — это добавление журналирования (что сделало файловую систему надежнее, но медленнее).
Ext4 была создана в октябре 2006 года, но стабильная версия появилось в октябре 2008 года. Она сейчас является самой распространенной файловой системой для Linux. Убрали некоторые ограничения и оптимизировали:
- максимальный размер файла — 16 GB-16 TB (в зависимости от размера кластера);
- наибольший размер раздела — 1 EB (1048576 TB);
- максимальная длина имени файла — 255 B;
- время изменения файлов протоколируется точнее;
- упростилась работа с крупными файлами;
- была оптимизирована скорость работы.
На данный момент по моему мнению EXT4 лучший выбор для Linux систем.
btrfs
btrfs — это более функциональная и сложная файловая система чем ext4. Начали разрабатывать для Linux в 2007 году, а в 2014 году признали стабильной. Вот некоторые интересные функции:
- снимки состояния, которые позволяют запомнить состояние на определенный момент времени всех файлов и вернуться к этому состоянию в последующем. Полезно когда вы случайно удалили что-то важное или какой-то вирус зашифровал все ваши данные на компьютере;
- создание RAID конфигурации на уровне файловой системы;
- сжатие данных, когда данные при создании автоматически сжимаются экономя свободное место на диске;
- дедупликация данных. Когда есть два или более одинаковых файла, то они занимают размер только одного файла, что очень экономит пространство на жестком диске;
- контрольные суммы для данных и метаданных, что повышает надежность файловой системы;
- дефрагментация данных на лету;
- квоты на разделы;
- динамическая аллокация inode;
- максимальный размер файла 16 EB;
- наибольший размер раздела 16 EB;
- максимальный размер имени файла 255 B;
Из минусов: файловая система не так проверена временем как ext4, активно использует оперативную память и работает медленнее чем ext4.
JFS
JFS — это журналированная файловая система. На момент выхода в свет в 1999 году была наиболее производительной из существовавших файловых систем. Сейчас по функциональности сравнима с ext4, но менее популярна.
Вот некоторые её особенности:
- максимальная длина имени файла 255 B;
- максимальный размер файла 4 PB (4000 TB);
- максимальный размер раздела 32 PB (32000 TB);
- контрольные суммы;
- поддержка acl.
Так как по функциональности эта файловая система сравнима с ext4, но по характеристикам и популярности отстаёт, то в Ubintu установщик уже не предлагает использовать её. Можно использовать, если у вас будут храниться файлы размером более 16 ТБ, хотя и в этом случае лучше выбрать XFS.
XFS
XFS — это журналированная файловая система. Особенно хорошо работает с большими неизменяемыми файлами. Имеет следующие особенности:
- максимальная длина имени файла 255 B;
- наибольший размер файла 9 EB;
- максимальный размер раздела 9 EB;
- автоматическая аллокация и высвобождение inode;
- дефрагментация «на лету»;
- низкая производительность при работе с большим количеством файлов;
- невозможность уменьшить размер существующей файловой системы.
Эта файловая система позволит хранить просто огромные файлы, размер которых может достигать 9 EB.
Файловые системы семейства fat
Эти файловые системы могут работать в linux но создавались они для windows. Могут подойти для хранения файлов, но не для работы программ. Основной недостаток FAT — медленная работа с файлами:
- fat16 — максимальный раздел 2 GB, в настоящее время потеряла свою актуальность;
- fat32 — максимальный раздел 2 TB, для работы приложений не подходит, максимум можно использовать для хранения информации на флеш накопителе.
Итог
- В настоящее время рекомендуется использовать ext4 для работы Linux систем, а если вам нужны дополнительные функции можно изучить и использовать btrfs, если планируете хранить крупные файлы то можно попробовать xfs.
- Также если вам важнее скорость чем надежность можно использовать ext2, так как в ней нет журнала она должна работать быстрее чем ext4.
- Ну а fat32 можно использовать для хранения информации на флеш накопителе.
Кроме перечисленных файловых систем Linux может работать и с другими, например ntfs или zfs. Но так как их нельзя выбирать при установке, они были опущены. На этом сайте я планирую познакомить вас с файловой системой zfs, так как имею большой опыт работы с ней, но не в этом курсе, а в отдельных статьях.
Как изменить размер кластера vfat
Как изменить размер кластера vfat и ntfs средствами linux? Разделы с данными.
man mkfs.vfat; man mkfs.ntfs
Мне туда не надо. Подразумевается разделы с данными.
AFAIK, без потери данных никак. А зачем оно вообще нужно? С толсто32 ещё понятно, но у NTFS вроде всегда по умолчанию был разумный размер блока (4 KiB).
На планшете 16Гб данных и программ. При размере кластера fat 4kb при включении планшета из-за специфики nand flash при большом количестве файлов присутствует 50 минутная проверка vfat с блокировкой fs. При размере кластера fat 64kb эта проверка составляет 10 секунд. Про ntfs — так, прицепом, — вдруг пригодиться.
Большое количество маленьких файлов, умещавшихся на фат с 4kb кластерами, на фате с 64kb может просто тупо не уместиться.
Это не проблема nand flash, это проблема твоей системы. Отключи или зафорсь проверку фс. А еще лучше смени фс. а заодно ос
Размер блока 64 кб подойдет разве только для раздела с данными, но не для системного уж точно. А если речь про раздел с пользовательскими данными, то на кой черт при старте ему полная проверка. Это верный признак того, что либо ты что-то делаешь не так, либо ССЗБ.
Если бы я хотел спросить у вас об особенностях файловой системы FAT, я бы спросил об этом. Меня интересует изменение размера кластера средствами Linux. А вы мне советуете сменить ОС на планшете с Android. Вы хоть представляете себе объем работ, знаний и времени, необходимых для реализации того, что вы предложили? Отваливается fat с маленьким кластером из-за того, что на nand flash размер erase block-a 128kb (страницы в erase block-е 2kb), и в fat нет wear leveling (учёта износа nand flash). В итоге с маленьким кластером при записи 4kb реально происходит стирание 128kb и перезапись их еще раз, в итоге, чтобы записать 128kb приходится записать 4mb + соответствующий износ nand flash.
Как я могу отформатировать SD-карту с более надежной файловой системой, используемой в Linux, с определенным размером кластера для лучшей производительности записи?
Я использую карту памяти microSD 8 ГБ для хранения данных во встроенном устройстве Linux/ARM. SD-карта не является съемной. Я использовал ext3 вместо предустановленного FAT32, потому что он, кажется, лучше обрабатывает случайные сбои питания во время записи. Тем не менее, я продолжал замечать, что моя производительность записи всегда лучше с предустановленной FAT32 от Kingston. Если я переформатирую карту с FAT32, производительность все еще страдает. Просматривая википедию, я наткнулся на следующий комментарий о том, что некоторые карты оптимизированы для кластеров определенного размера. В моем случае Kingston поставляется предварительно отформатированным для кластера размером 64 КБ.
Риски переформатирования
Переформатирование SD-карты в другой файловой системе или даже в той же самой системе может замедлить работу карты или сократить срок ее службы. Некоторые карты используют выравнивание износа, при котором часто изменяемые блоки отображаются в разные части памяти в разное время, а некоторые алгоритмы выравнивания износа предназначены для шаблонов доступа, типичных для таблицы размещения файлов на устройстве FAT16 или FAT32. [60] Кроме того, предварительно отформатированная файловая система может использовать размер кластера, который соответствует области стирания физической памяти на карте; переформатирование может изменить размер кластера и сделать запись менее эффективной.