Linux — файловые системы ext3 и ext4

Несколько лет назад я написал заметку о быстродействии файловых систем Linux’а , которую полагал последним своим сочинением на эту тему. Однако не получилось: всё время появлялись то новые устройства, то новые файловые системы. И каждый раз хотелось посмотреть на их быстродействие.

Введение в распределенные файловые системы.

Сейчас сетевые файловые системы называют «распределенными». Этот термин отражает тот факт, что многие из этих файловых систем имеют гораздо больше возможностей, чем простая передача данных по сети. Носители данных, связанные с этими файловыми системами, не обязательно могут быть расположены на одном компьютере – они могут быть распределены между многими компьютерами.

Распределенные файловые системы OpenAFS и Coda имеют собственные механизмы управления разделами, которые упрощают возможности хранения общедоступной информации. Они так же поддерживают дублирование – способность делать копии разделов и сохранять их на других файловых серверах. Если один файловый сервер становится недоступным, то все равно к данным, хранящимся на его разделах, можно получить доступ с помощью имеющихся резервных копий этих разделов.

Самое главное различие между подходом Windows / MacOS (совместное использование каталогов и дисков) и подходом Linux, MacOS X и других Unix-подобных многопользовательских операционных систем – в том, как эти операционные системы используют и организовывают разделы. Windows / MacOS экспортируют разделы как отдельные каталоги или диски, и удаленные системы, которые хотят обратиться к общедоступным устройствам, должны обязательно подключить их к себе.

Когда самый высокий уровень организации в файловой системе – это раздел диска (например, как в файловых системах Windows), рабочие станции клиентов для получения доступа к этим данным должны обязательно подключиться к разделу и назначить ему отдельную букву в своей локальной раскладке (например, диск E, F, G, и т.д). Буквы могут быть назначены сетевым разделам в пользовательских и групповых профилях Windows (для стандартизации). Но, к сожалению, не на всех компьютерах расположение букв может быть одинаковым. Например, на компьютере с большим количеством жестких дисков и разделов нужные буквы могут быть заняты, и поэтому придется давать сетевым разделам другие обозначения.

Напротив, файловая система Unix – это иерархическая файловая система, к которой дополнительные разделы добавляются с помощью монтирования их к существующей директории. Это позволяет эффективно добавить любой источник данных в любую существующую файловую систему. Если вы монтируете новый источник информации к каталогу, являющемуся частью распределенной файловой системы, он сразу же становится доступным всем клиентам этой распределенной системы.

Современные распределенные файловые системы типа OpenAFS или Coda включают в себя специальные сервисы для управления разделами. Это позволяет вам смонтировать разделы различных файловых серверов в центральную иерархию директорий, поддерживаемую файловыми системами. OpenAFS использует центральный каталог, называемый «/afs», а Coda использует «/coda». Эти иерархии директорий доступны всем клиентам распределенной файловой системы, и выглядят одинаково на любой из клиентских рабочих станций. Это дает возможность пользователям работать со своими файлами одинаково на любом компьютере. Если ваш настольный компьютер не работает, вы совершенно спокойно можете использовать любой другой – все ваши файлы находятся в безопасности на сервере.

Читайте также:  Правила использования операторов grep и find в Linux

Распределенные файловые системы, предоставляющие одни и те же данные многим различным компьютерным системам, дают пользователям возможность использовать любую операционную систему, лучше всего подходящую для их задач. Пользователи Macintosh могут пользоваться всеми преимуществами графических инструментальных средств, доступных в Mac OS, и одновременно хранить свои данные на централизованных файловых серверах. Пользователи Windows так же могут иметь доступ к устойчивой глобальной файловой системе. Распределенные файловые системы особенно привлекательны при попытке координации работы между группами, расположенными в различных городах, государствах, или даже в разных странах. Преимущество – общие данные всегда доступны по сети, независимо от вашего местонахождения.

Определения

Существует также понятие «кластерная файловая система». Различия между всеми этими терминами (сетевая, распределенная, кластерная) немного расплывчаты. Поэтому сначала нужно определить, что такое сетевая, кластерная и распределенная система.

  • Сетевая система (Network) содержит один сервер или его аналог в любом виде, в т. ч. виртуальном, с обслуживающимися им компьютерами в локальной сети.
  • Кластерная система (Cluster) содержит несколько серверов в общей сети.
  • Распределенная система (Distributed) содержит несколько серверов, объединенных по глобальной сети WAN (Wide area Network).

С таким определением, например, NFSv3 можно отнести к сетевой файловой системе (network file system). GFS2 – это кластерная файловая система. GlusterFS – это распределенная файловая система. NFSv4, в свою очередь, это некий гибрид между сетевой файловой системой, но с поддержкой нескольких серверов, внедренных в нее.

Сумятицу иногда вносит то, что иногда вкладывается разный смысл в понятие «распределенный» (distributed). Здесь надо понимать, что «распределенность» должна присутствовать не только между серверами (тогда это кластер) в локальной сети, но также и между местоположениями этих серверов в глобальной сети (WAN), со всеми присущими ей особенностями. А именно: большими задержками и низкой надежностью соединений.

  • Распределенные файловые системы

Распределенные (в таком определении) файловые системы состоят из нескольких географически разнесенных серверов, соединенных по модели sharing nothing, где каждый активный сервер имеет собственную СХД. Кроме того, распределенные файловые системы делятся на два типа: параллельные системы (Parallel file systems) и полностью параллельные файловые системы (Fully parallel file systems).

  • Параллельные файловые системы

Так называются системы, которые предоставляют параллельный доступ к их серверам хранения для каждого клиента. Это позволяет устранить «узкие места» одного сервера по всем параметрам: IOPS, полоса, ограничения вычислительной способности процессора и кэш-памяти. Такие системы используются в высокопроизводительных компьютерных системах и бизнес-приложениях, например, в информационных системах фондовых бирж, Примеры: pNFS, Lustre.

  • Полностью параллельные файловые системы

Полностью параллельными такие системы называются в том случае, когда не только данные, но и метаданные (различные индексы и пр.), также распределяются параллельно между всеми клиентами. Примеры таких систем – OrangeFS и Ceph.

Соотношения между сетевыми системами (Network), кластерными системами (Cluster), распределенными (Distributed), а также параллельными (Parallel) и полностью параллельными системами (Fully parallel) могут быть представлены следующим образом.

ответа

Файловая система EXT4 + TRIM:

  • EXT4 с TRIM повышает производительность за счет сокращения ненужной записи циклов на накопитель SSD, поскольку они ограничивают цикл записи-перезаписи.
  • Ubuntu и некоторые другие варианты Linux поддерживают EXT 4 с TRIM из коробки.
Читайте также:  Какой формат сжатия файлов лучше — 7z, zip или rar?

SWAP-раздел:

  • Убедитесь, что у вас нет пространства SWAP на SSD, чтобы уменьшить циклы записи.
  • Если у вас есть механический диск, вам необходимо создать пространство SWAP на механическом диске и избегать его на SSD.

Разделение разделов:

  • Раздел должен начинаться с чистой границы 1 МБ, чтобы размер блока файловой системы выравнивается с размером блока SSD.

Поэтому используйте EXT4 + TRIM с SWAP на механическом жестком диске или без SWAP на SSD.

Выберите ext4 и установите его с помощью опции discard для TRIM или используйте FITRIM (см. ниже). Также используйте опцию noatime , если вы боитесь «износа SSD».

Не изменяйте планировщик ввода-вывода по умолчанию (CFQ) на серверах нескольких приложений , поскольку он обеспечивает справедливость между процессами и поддерживает автоматическую SSD-поддержку , Однако используйте Deadline на десктопах , чтобы получить лучшую отзывчивость при загрузке.

Чтобы легко гарантировать правильное выравнивание данных, начальный сектор каждого раздела должен быть кратным 2048 (= 1 MiB). Вы можете использовать fdisk -cu /dev/sdX для их создания. В последних дистрибутивах он автоматически позаботится об этом для вас.

Подумайте дважды, прежде чем использовать swap на SSD. . Это, вероятно, будет намного быстрее по сравнению с swap на HDD, но он также будет быстрее носить диск (что может быть не актуально, см. ниже ).

  • Файловые системы:

Ext4 — самая распространенная файловая система Linux (в хорошем состоянии). Он обеспечивает хорошую производительность с помощью SSD и поддерживает функцию TRIM (и FITRIM), чтобы поддерживать хорошую производительность SSD с течением времени (это позволяет удалить неиспользуемые блоки памяти для быстрого доступа к записи). NILFS специально разработан для флеш-накопителей, но не действительно работает лучше, чем ext4 в тестах. Btrfs по-прежнему считается экспериментальным (и на самом деле не работает лучше либо ).

  • Производительность SSD и amp; TRIM:

Функция TRIM очищает блоки SSD, которые больше не используются файловой системой. Это позволит оптимизировать долговременную производительность записи и рекомендуется на SSD из-за их дизайна. Это означает, что файловая система должна быть способна сообщить диску об этих блоках. Опция discard для ext4 выдаст такие команды TRIM , когда блоки файловой системы будут освобождены. Это онлайн-сброс .

Однако это поведение подразумевает небольшие накладные расходы. Начиная с Linux , вы можете избежать использования discard и выбрать вариант batch discard вместо FITRIM (например, из crontab). Утилита fstrim делает это (онлайн), а также параметр -E discard . Однако вам понадобится «последняя» версия этих инструментов.

Возможно, вы захотите ограничить запись на вашем диске, поскольку SSD имеет ограниченный срок службы в этом отношении. Не волнуйтесь слишком много, но , сегодня самый плохой SSD на 128 ГБ может поддерживать как минимум 20 ГБ письменных данных в день более 5 лет (1000 циклов записи на ячейку) , Более лучшие (и более крупные) могут длиться намного дольше: вы, вероятно, скорее всего замените его к тому времени.

Читайте также:  Топ 5 лучших российских дистрибутивов Linux 2019

Если вы хотите использовать swap на SSD, ядро ​​заметит невращающийся диск и будет рандомизировать использование swap (уровень износа уровня ядра): тогда вы см. SS (Solid State) в сообщении ядра при включении swap:

Добавление замены 2097148k в /dev /sda1. Приоритет: -1 экстентов: 1 через: 2097148k SS

  • Планировщики ввода /вывода:

Кроме того, я согласен с большинством ответов aliasgar (даже если большинство из них было — нелегально? — скопировано из этот веб-сайт ), но я должен частичноне согласны с частью планировщик . По умолчанию планировщик сроков оптимизирован для вращательных дисков, поскольку он реализует алгоритм лифта . Итак, давайте проясним эту часть.

Просмотр статуса файловой системы

Естественно, вам захочется настроить базовые параметры файловой системы, такие как распределение дискового пространства, контрольные точки безопасности и заданный уровень производительности. В арсенале GNU имеется множество инструментов для работы с файловой системой. Наиболее распространенные команды – это df, du, fsck иfdisk, а также iostat и sar (эти команды не столь популярны, но не менее полезны).

Команды du и df

Команды df и du используются для получения информации об использовании диска и свободном дисковом пространстве. Команда du -csh /var показывает размер файлов в директории /var. Если необходимо получить информацию о вложенных поддиректориях директории /var, то нужно выполнить команду du -h.

# du -csh /var 73M /var 73M total

Команда df -h выводит информацию об использовании файловыми системами дискового пространства для всех точек монтирования в удобочитаемом (-h) формате:

# df -h File System Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 37G 32G 10% / /dev/sda1 99M 12M 82M 13% /boot tmpfs 506M 0 506M 0% /dev/shm

Команда fsck

Команда fsck используется для проверки файловой системы и при необходимости ее восстановления. Например, если вам необходимо проверить на наличие ошибок раздел, расположенный на устройстве /dev/sda2, то введите команду fsck /dev/sda:

# umount /var # fsck /var fsck from util-linux-ng e2fsck (17-May-2010) /dev/sda3: clean, 702/192000 files, 52661/768000 blocks

Примечание. Эту команду следует запускать на несмонтированной файловой системе.

В вышеприведенных примерах все задачи выполнялись в однопользовательском режиме. Раздел /var, расположенный на устройстве /dev/sda3, сначала был демонтирован. Команда fsck не обнаружила каких-либо ошибок, в противном случае она попыталась бы исправить их.

Команда iostat

Команда iostat выводит статистику дисковых операций ввода/вывода.

$ iostat Linux (DemoServer) 12/19/2011 avg-cpu: %user %nice %system %iowait %steal %idle Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1759192 1139038 sda1 2254 22 sda2 1756658 1139016 dm-0 1755178 1139016 dm-1 920 0 hdc 144 0 fd0 16 0

В этом примере демонстрируется, как можно использовать команду iostat для получения информации об операциях чтения/записи, а также общей статистики. Обратите внимание на то, что по умолчанию эта команда выводит информацию об операциях чтения/записи для всех устройств, а в верхней строке отображает общую статистику использования.

Команда sar

Команда sar выводит значения системных счетчиков, подобно программе Performance Monitor операционной системы Windows. Команду sar можно использовать для отображения прошлых значений или для вывода счетчиков в реальном времени:

$ sar 4 5 Linux (DemoServer) 12/19/2011 12:20:20 AM CPU %user %nice %system %iowait %steal %idle 12:20:24 AM all 12:20:28 AM all 12:20:32 AM all 12:20:36 AM all 12:20:40 AM all Average: all

В этом примере команда sar выводит пять значений счетчиков, обновляемых через каждые 4 секунды.