Выбор файловой системы в Linux
Подобно Windows, Linux за свою жизнь повидала несколько разных файловых систем (много элементов, находящихся в отношениях и связях друг с другом, которое образует определённую единство, единство). Ubuntu «разумеет» файловые системы Windows, но не установится на них. Ubuntu может сходу же записывать и считывать из разделов FAT16, FAT32 и VFAT и NTFS. Хотя Windows не может трудиться с файловыми системами Linux, и вам придётся передавать файлы в и из Windows из под операционной системы Ubuntu. Кроме знакомых файловых систем Windows, вы можете избрать несколько таких, которые вы, может быть, не знаете. Среди таких файловых систем — ext4.
Файловые системы ext3 и ext2 теперь утилизируются редко: ext3 — чуть более старая версия ext4, и не имеет никаких преимуществ пред ext4, а ext2 не обладает журналирования, без него при, системном сбое будет трудно восстановить данные. Файловые системы BTRFS, XFS, ReiserFS, Reiser4, JFS и т.д. также можно использовать, однако их стоит выбирать исходя из понимания особенностей этих ФС (стоит почитать немного о разных ФС, что бы сделать правильный выбор). Раздел «swap» предназначен только для виртуальной памяти и в отличие от других файловых систем ему не требуется точка монтирования.
Оптимизация и тонкая настройка файловой системы
Одной из ответственных задач системного администратора является обеспечение доступа к данным пользователей за определенное время. Так же, как и в операционной системе Windows, наблюдение за производительностью системы является в Linux одной из главных задач. Как и производительность сети, производительность дисковой подсистемы чтения/записи может стать узким местом в системе, поэтому она требует оптимизации и тонкой настройки.
Для настройки файловой системы можно использовать следующие методы:
- Применить инструмент .
- Изменить точки монтирования в файле /etc/fstab.
- Изменить параметры ядра.
Настройка с помощью tune2fs
Утилита командной строки используется для настройки параметров жесткого диска. Например, если у вас имеются директории большого объема на разделе с файловой системой ext3, то можно ускорить обращения к ним с помощью хешированных b-деревьев, для чего используется переключатель :
# tune2fs -O dir_index /dev/sda5 |
Команду следует запускать с привилегиями пользователя root. Переключатель определяет опцию для указанного раздела.
Монтирование с использованием специальных опций
Процесс, после которого файловая система становится доступной для использования, называется монтированием файловой системы. На практике для этого используется команда . Когда вы включаете компьютер с Linux, то система должна знать, как монтировать доступные файловые системы. Для этих целей служит файл /etc/fstab. Как и любые другие конфигурационные файлы Linux, этот файл можно редактировать с помощью любого текстового редактора, например, или . Внутри файла /etc/fstab указаны точки монтирования различных файловых систем. При настройке параметров монтирования используется четвертый столбец. Например, чтобы отключить аудит времени последнего доступа к файлам для определенной файловой системы (что потенциально может повысить производительность), можно добавить опцию. Если у вас имеется файловая система, в которую пользователи не должны записывать данные (например, если в ней хранятся архивы), то можно смонтировать ее с опцией («только для чтения»).
Для изменения параметров монтирования в файле /etc/fstab используйте следующую командную строку:
UUID=97ee2cc4-8a26-41e9-9da1 /archives ext4 defaults,ro,noatime 1 2 |
Все изменения, которые вы вносите в файл /etc/fstab, вступают в силу после перезагрузки компьютера. Чтобы применить их без перезагрузки, можно демонтировать и повторно смонтировать затрагиваемую файловую систему с помощью команды:
# mount -o remount /archives |
Если раздел можно демонтировать в текущей рабочей среде, то команда позволит избежать перезагрузки системы после изменения файла /etc/fstab.
Настройка параметров ядра
Для просмотра и изменения параметров ядра используется команда . Чтобы получить список параметров, относящихся к файловой системе, и их текущие значения, выполните команду , как показано в листинге 3.Листинг 3. Просмотр параметров ядра, относящихся к файловой системе
# sysctl -a | grep fs. | less .... fs.quota.warnings = 1 fs.quota.syncs = 23 fs.quota.free_dquots = 0 fs.quota.allocated_dquots = 0 fs.quota.cache_hits = 0 fs.quota.writes = 0 fs.quota.reads = 0 fs.quota.drops = 0 fs.quota.lookups = 0 fs.suid_dumpable = 0 fs.inotify.max_queued_events = 16384 fs.inotify.max_user_watches = 8192 fs.inotify.max_user_instances = 128 fs.aio-max-nr = 65536 fs.aio-nr = 0 fs.lease-break-time = 45 fs.dir-notify-enable = 1 fs.leases-enable = 1 fs.overflowgid = 65534 fs.overflowuid = 65534 fs.dentry-state = 26674 23765 45 0 0 0 fs.file-max = 102263 ......... |
В листинге 3 показан фрагмент списка параметров ядра, относящихся к файловой системе и отфильтрованных с помощью команды . Изменить эти параметры можно с помощью команды . Например, если ваш сервер обрабатывает большое количество мелких файлов и на нем постоянно возникают ошибки с сообщением «running out of file handles» (недостаточно обработчиков файлов), то можно увеличить максимальное число дескрипторов открытых файлов с помощью команды , где xxxxxx – необходимое максимальное количество обработчиков.
Любые изменения, сделанные с помощью , работают до первой перезагрузки. Чтобы эти изменения действовали после перезагрузки, необходимо открыть файл /etc/sysconf в любом текстовом редакторе и внести изменения в него. В этом файле содержатся не все параметры ядра, поэтому если вы не нашли в нем нужный параметр, то просто добавьте его вместе с нужным значением.
Семейство Reiser
ReiserFS, второе название Reiser3, задействована во многих современных дистрибутивах Linux. Ханс Райзер является основателем данного семейства. В основных дистрибутивах Linux ReiserFS поддерживается и на сегодняшний день. ReiserFS является одним из первых решений среди систем с открытым кодом.
Особенности:
- эффективное управление информацией о сохраненных файлах или папках;
- усовершенствованная система передачи данных, обеспечивающая согласованность всей информации;
- сжатие многих небольших файлов и так называемых хвостов (их окончаний с размером не превышающим блок) в одном блоке диска, что позволяет свести к минимуму внутреннюю фрагментацию;
- эффективная поддержка даже больших каталогов (используется хэш-таблица, где ключи создаются на основе файлового имени);
- расширенная система плагинов, позволяющая изменять поведение семантического слоя почти произвольно.
Reiser4 – улучшенный тип ФС для SSD, созданный практически с нуля. По сравнению с ReiserFS предлагает следующее:
- изменение архитектуры на более объектно-ориентированную;
- использует Repacker – специальную программу, сжимающую хвосты, дополнительно экономя пространство;
- повышенная производительность;
- усиленная безопасность;
- возможность прикрепить свои собственные плагины.
Reiser4 внедряет инновации в области безопасности – разбивает файл на более мелкие части, каждая из которых может иметь индивидуальные права и использовать различные дополнения. Недостатком Reiser4 является свободное удаление данных, но она превосходит конкурентов, если говорить о сохранении нескольких потоков данных за один раз. Также идеально подходит при хранении большого количества небольших файлов, экономя при этом много места.
SWAP – раздел обмена данными. Он создает виртуальную память, позволяющую расширить объем ОЗУ. Благодаря использованию «раздела подкачки» ОС увеличивает свою эффективность и, следовательно, производительность системы также увеличивается. Вместо раздела SWAP система может создать файл подкачки, однако обмен данными происходит намного медленнее, а общая производительность снижается.
NFS – служба, позволяющая обмениваться дисковыми ресурсами с соединенными сетью компьютерами. Сервер предоставляет каталоги клиентам, которые могут их монтировать, и действует как локальная система. Монтирование: mount server.net:/usr/local /usr/local -t nfs.
Форматирование в Ext4
Я предполагаю, что раздел, который вы хотите отформатировать в Ext4 у вас уже есть. Если его ещё нет, обратитесь к статье как пользоваться gparted или как пользоваться parted чтобы его создать.
1. Опции mke2fs
Для форматирования мы будем использовать утилиту mkfs.ext4 или mke2fs. Это одна и та же утилита. У неё такой синтаксис:
$ mkfs.ext4 опции /раздел/диска
Ей можно передавать такие опции:
- -b — размер блока. Доступные значения: 1024, 2048 и 4096;
- -c — проверить устройство на битые сектора перед созданием файловой системы;
- -d — скопировать содержимое указанной папки в корневую папку файловой системы;
- -D — использовать прямые методы чтения и записи с диска чтобы не использовать кэш память;
- -e — поведение файловой системы при ошибке. Доступные значения: continue, remount-ro, panic;
- -E — расширенные опции файловой системы;
- -F — принудительно создать файловую систему, даже если во время создания возникают ошибки или файловая система уже существует и примонтирована;
- -j — использовать журнал файловой системы ext3;
- -l — прочитать список плохих секторов на диске из файла;
- -L — задать метку для раздела с этой файловой системой;
- -m — процент блоков, зарезервированных для суперпользователя, по умолчанию 5%;
- -n — не создавать файловую систему, а только отобразить её информацию, что выводится в процессе создания;
- -O — активировать или деактивировать те или иные возможности файловой системы. Сами возможности мы рассмотрим ниже;
- -q — выводить минимум информации во время выполнения;
- -S — записать только суперблок и описание групп, таблица Inode остаётся неизменной. Это может быть полезно для восстановления повреждённой файловой системы;
- -t — тип файловой системы. Доступно: ext2, ext3, ext4;
- -U — указать UUID для раздела с файловой системой;
- -v — максимально подробный вывод;
- -V — вывести версию утилиты.
2. Возможности Ext4
- 64bit — файловая система сможет занимать место больше чем 2 в 32 степени блоков. При размере блока 4 килобайта, это примерно один терабайт;
- encrypt — включить поддержку шифрования для файловой системы;
- ext_attr — включить расширенные атрибуты;
- has_journal — использовать журнал, по умолчанию включена;
- huge_file — разрешить создавать файлы, размером больше двух терабайт;
- large_dir — увеличивает количество файлов, которые могут находится в одной папке;
- metadata_csum — включает расчёт и проверку контрольных сумм для всех метаданных файловой системы;
- meta_bg — позволяет изменять размер раздела в реальном времени, когда файловая система смонтирована и используется;
- mmp — запрещает монтирование файловой системы к нескольким точкам одновременно;
- quota — включает поддержку квот;
Здесь рассмотрены не все опции файловой системы и её возможности, а только самые интересные. Более подробнее смотрите информацию на man страницах для mkfs.ext4 и ext4.
3. Простое форматирование
А теперь давайте попробуем создать файловую систему ext4 с меткой dаta:
Здесь и далее /dev/sdb1 — это путь к вашему разделу жесткого диска, который вы хотите отформатировать. Чтобы не резервировать место для суперпользователя укажите значение 0 в опции -m:
Для того чтобы выполнить проверку диска на наличие битых секторов используйте опцию -c или -cc для более долгой но тщательной проверки:
4. Включение проверки контрольных сумм
Теперь поговорим про возможности. Для включения контрольных сумм для всех метаданных используйте возможность metadata_csum:
6. Поддержка квот
Для включения поддержки квот на разделе создание файловой системы ext4 выполняется с опцией quota:
Для управления квотами установите пакет quota:
Файловую систему надо примонтировать с поддержкой квот:
Затем нужно выполнить такую команду для инициализации файлов квот:
Далее можно настроить квоты для нужного пользователя. Например:
В открывшемся файле вы можете настроить квоты по блокам и inode для этого пользователя. После этого они будут автоматически применены.
7. Поддержка шифрования
Для создания файловой системы с поддержкой шифрования используйте возможность encrypt:
Шифрование выполняется на уровне папок. Поэтому сначала давайте примонтируем только что созданную файловую систему, а потом создадим папку /ecrypted:
Для настройки шифрования надо использовать утилиту fscrypt. В Ubuntu утилита устанавливается так:
Затем выполните первоначальную инициализацию:
Папка должна принадлежать пользователю, для которого вы будете её шифровать:
Чтобы зашифровать папку выполните:
Утилита спросит каким образом защищать вашу папку, выберите пункт 2 чтобы ввести свой пароль. Затем введите пароль два раза:
Виртуальные файловые системы в ОС Linux
Разработчики ядра досоздали модуль FUSE ( filesystem in userspace), который дозволяет создавать файловые системы в пространстве пользователя. К условным файловым системам можно отнести ФС для шифрования и сетные файловые системы.
EncFS — файловая система, какая шифрует все файлы и сохраняет их в зашифрованном виде в необходимую директорию. Не все файловые системы нужны в ядре. Имеется даже очень экзотические варианты, обратите вниманье на проект PIfs. Существуют некоторые решения, какие можно реализовать и в пространстве пользователя. Получить доступ к дешифрированным данным можно только примонтировав файловую систему.
Aufs (AnotherUnionFS) — дозволяет объединять несколько файловых систем (папок) в одну всеобщую.
NFS (Network Filesystem) — позволяет примонтировать файловую систему далёкого компьютера по сети.
Таких файловых систем весьма много, и мы не будем перечислять все их в данной статье.
Практический пример использования файловых систем
Владельцы мобильных гаджетов для хранения большого объема информации используют дополнительные твердотельные накопители microSD (HC), по умолчанию отформатированные в стандарте FAT32. Это является основным препятствием для установки на них приложений и переноса данных из внутренней памяти. Чтобы решить эту проблему, необходимо создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), чтобы любое приложение могло работать так, словно запустилось из внутренней памяти.
Операционная система Windows не умеет делать на флешках больше одного раздела. С этой задачей легко справится Linux, который можно запустить, например, в виртуальной среде. Второй вариант — использование специальной утилиты для работы с логической разметкой, такой как MiniTool Partition Wizard Free. Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Андроид Link2SD и аналогичные ему предложат куда больше вариантов.
Флешки и карты памяти быстро умирают как раз из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов. Гораздо лучше использовать на флеш-картах NTFS с ее устойчивой к сбоям таблицей $MFT. Небольшие файлы могут храниться прямо в главной файловой таблице, а расширения и копии записываются в разные области флеш-памяти. Благодаря индексации на NTFS поиск выполняется быстрее. Аналогичных примеров оптимизации работы с различными накопителями за счет правильного использования возможностей файловых систем существует множество.
Надеюсь, краткий обзор основных ФС поможет решить практические задачи в части правильного выбора и настройки ваших компьютерных устройств в повседневной практике.
Дисковые файловые системы Linux
По большей части в этой статье обсуждается работа с семейством расширенных файловых систем Linux (ext). Однако среди прочих файловых систем Linux поддерживает и множество дисковых файловых систем, например, XFS, ReiserFS, Btrfs (B-tree File System) и JFS (IBM Journaled File System). В зависимости от задач, выполняемых на вашем компьютере и в вашей рабочей среде, какие-то из этих файловых систем могут оказаться более подходящими, чем расширенная файловая система. Тем не менее знакомство с расширенной файловой системой является хорошей отправной точкой, поскольку в большинстве дистрибутивов Linux по умолчанию используется файловая система ext3 или ext4.
Файловая система ext3 является результатом дальнейшего развития более ранней файловой системы ext2 и широко используется в настоящее время. Одним из важных принципиальных отличий ext3 от ext2 является наличие журналирования. Файловая система ext3 обратно совместима с ext2, поэтому для перехода с ext2 на ext3 нет необходимости повторно разбивать диск на разделы. Обычно для этого достаточно запустить команду с привилегиями пользователя root. Например, если файловая система ext2 используется на втором разделе первого жесткого диска, то для ее преобразования в ext3 достаточно запустить команду .
Помимо журналирования, в ext3 реализован и ряд других улучшений по сравнению с ext2, например, повышенная скорость и надежность. Не обладая возможностями журналирования, файловая система ext2 страдала из-за «грязных» перезагрузок операционной системы (например, в случае непредвиденного отключения электропитания или краха системы). Во время загрузки компьютера каждую файловую систему ext2 нужно было проверять перед ее монтированием. Учитывая современные объемы файловых систем, время проверки целостности в большинстве случаев оказывается неприемлемым, поскольку этот долгий процесс существенно снижает доступность системы. В журналируемых файловых системах (как, например, NTFS) данные записываются на диск и помечаются либо как целостные, либо как нецелостные. Поэтому при «грязной» перезагрузке проверяются только те файлы, помеченные как нецелостные, что устраняет необходимость проверки всей файловой системы. В ext3 предусмотрено три режима журналирования:
- Journal. Полное журналирование данных. Записываются не только метаданные, но и сами данные. Это самый медленный режим.
- Ordered. Формально записываются только метаданные, но этот способ может устранять повреждения, связанные с отложенной записью, поскольку сначала выполняется запись в блоки данных.
- Writeback. Журналируются только метаданные, но не сами данные. Это самый быстрый режим.
Последней версией расширенной файловой системы на сегодняшней день является файловая система ext4, обратно совместимая с ext2 и ext3. По сравнению с ext3 в ext4 реализован ряд улучшений, в основном касающихся скорости и надежности. Файловая система ext4 имеется в Linux с версией ядра 2.6.28 и выше.
В таблице 1 показаны некоторые основные характеристики наиболее распространенных файловых систем Linux, которые помогут вам планировать схемы разделов или преобразовывать существующие разделы.
Эволюция расширенной файловой системы
Файловая система | |
---|---|
Extended file system | (приблизительно с 1991 г.) Самая ранняя файловая система Linux. Недостатком этой файловой системы является чрезмерная фрагментация. |
Ext2 | (приблизительно с 1993 г.) Эта файловая система обладает высокой надежностью, но в ней отсутствует журналирование. После внезапной перезагрузки или сбоя системы для всей файловой системы запускается команда. |
Ext3 | (приблизительно с 2001 г.) Эта файловая система может содержать 32 000 поддиректорий, поддерживает журналирование и обратно совместима с файловой системой ext2. |
Ext4 | (приблизительно с 2008 г.) Эта файловая система может содержать 64 000 поддиректорий, позволяет полностью отключить журналирование (в отличие от ext3) и обратно совместима с файловыми системами ext2 и ext3. |
Файловая система Ext2/3/4
Этот тип файловой системы придуман специально для Linux и традиционно используется на большинстве Linux-систем. Фактически в названии «Ext2/3» подсоединены названия двух вариантов этой файловой системы. Ext3 отличается от Ext2 только поддержкой журналирования, в остальном они одинаковы и легко могут быть преобразованы одна в другую в любой момент без потери данных. Обычно предпочтителен вариант с журналированием (Ext3) в силу его большей надёжности. При высокой одновременной дисковой загрузке производительность Ext3 снижается, что выражается в снижении скорости операций с диском и повышение значения нагрузки на систему (Load Average).
Базирована на файловой системе Ext3, но выделяется тем, что в ней представлен механизм записи файлов в непрерывные участки блоков (екстенты), убавляющий фрагментацию и увеличивающий производительность. В Ubuntu, начиная с версии 9.10, эта файловая система утилизируется по умолчанию при самодействующем разбиении диска инсталлятором. Ext3 — журналируемая файловая система, используемая в ОС на ядре Linux. Воображается файловой системой по умолчанию во многих дистрибутивах. Основана на Ext2, но отличается тем, что в ней есть журналирование, то присутствует в ней предусмотрена запись некоторых данных, позволяющих восстановить файловую систему при сбоях в работе компьютера.
Ext2 — файловая система, используемая в операционных системах на ядре Linux. Достаточно быстра для того, чтобы служить эталоном в тестах производительности файловых систем. Она не воображается журналируемой файловой системой и это её главный недостаток.
Как узнать файловую систему в ОС Linux?
Оказывается, что команда file сможет дать много информации не только об обычных файлах, но и о файлах механизмов (вспомните, что в Linux всё есть файл). Иногда случается необходимо узнать файловую систему раздела диска в Linux. Установить файловую систему для смонтированных разделов можно с поддержкою команды df с ключем -T. Если же раздел не смонтирован, то выручит команда file с ключем -s, как указано выше. Пример, чтобы определить, какая файловая система на разделе /dev/sda1, накопите в командной строке команду file с ключем -s. Как это постоянно бывает в системах типа Linux/UNIX, спрашиваемый результат можно получить множеством способов.
Типы файлов в Linux
Ниже представлено краткое описание 7 различных типов файлов в Linux:
— обычный файл;
— каталог;
— символьное устройство;
— блочное устройство;
— (локальный) сокет;
— именованный канал;
— символьная ссылка.
Обычный файл
Обозначается как
Обычный файл — это наиболее распространенный тип файлов в Linux. Текстовые файлы, изображения, двоичные файлы, общие библиотеки и т.д. — все они относятся к обычному типу файлов. Вы можете создать обычный файл с помощью команды :
Первый символ вывода команды , в данном случае , обозначает, что перед нами обычный файл. Для удаления обычного файла используется команда (сокр. от remove»):
Обозначается как
Каталог — это второй по распространенности тип файлов в Linux. Каталог можно создать с помощью команды (сокр. отmake directory»):
Как объяснялось ранее, каталогу соответствует символ (от directory») выходных данных команды . Для удаления пустого каталога используется команда (сокр. отremove directory»):
При попытке удалить каталог, содержащий внутри себя файлы, вы получите сообщение об ошибке:
В этом случае вам нужно использовать команду :
Символьное устройство
Обозначается как
Символьные и блочные файлы устройств позволяют пользователям и программам взаимодействовать с аппаратными периферийными устройствами. При этом символьные устройства обеспечивают последовательный поток ввода или вывода:
В этом примере символьным устройством является генератор псевдослучайных чисел.
Блочное устройство
Обозначается как
Блочные устройства похожи на символьные. Чаще всего они управляют аппаратными устройствами, такими как: жесткие диски, память и т.д. Большинство из них располагаются в каталоге :
Локальные сокеты
Обозначаются как
Как правило, локальные сокеты используются для связи между такими службами, как: X Window, syslog и т.д.
Именованные каналы
Обозначаются как
Подобно локальным сокетам, именованные каналы позволяют осуществлять связь между двумя локальными процессами. Основное отличие от сокетов в том, что через каналы данные могут проходить одновременно только в одном направлении. Они могут быть созданы с помощью команды и удалены с помощью команды .
Символьные ссылки
Обозначаются как
С помощью символьных ссылок администратор назначает файлу или каталогу несколько идентификаторов. Символьную ссылку можно рассматривать как указатель на исходный файл.
Существует два типа символьных ссылок в Linux:
Мягкая ссылка является указателем на некоторый файл или каталог (сродни ярлыкам в Windows). Если вы переместите файл, связь с символьной ссылкой разорвётся (но сама ссылка все еще будет существовать, указывая на файл, которого нет). Если вы замените файл другим, сохранив имя, символьная ссылка будет указывать на новый файл. Символьные ссылки могут охватывать различные разделы файловой системы.
Жесткая ссылка привязывается только к файлам, охватывает только один раздел файловой системы и, по сути, является тем же файлом, на который ссылается.
Для создания символьной мягкой ссылки используется команда :
Чтобы удалить символьную ссылку, мы можем использовать команду или .