Настройка файловой системы ext4
Во время выполнения различных задач по администрированию системы может понадобится работать с файловой системой Linux, форматировать разделы, изменять их размер конвертировать файловые системы, выполнить дефрагментацию в Linux или восстановление файловых систем.
Многие из этих действий выполняются в графическом интерфейсе, многие и вовсе автоматически. Но может возникнуть ситуация, в которой придется делать все через терминал. Также при администрировании удаленных серверов работать с ними приходится только через ssh, а это означает недоступность графического интерфейса.
В этой статье мы рассмотрим как выполняется работа с файловой системой Linux в терминале. За основу возьмем семейство файловых систем ext2/3/4, так как они самые распространенные среди большого многообразия дистрибутивов Linux.
Выводы
В этой статье мы рассмотрели историю файловой системы Ext4, а также её основные опции, монтирования, а также как и где их указывать. Про настройку Ext4 уже подробно рассказано в другой статье, поэтому здесь я решил не повторяться. А какие опции монтирования используете вы? Напишите в комментариях!
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.
Если вы используете Windows рядом с Linux, рано или поздно может возникнуть необходимость скопировать файлы из одной операционной системы в другую. При копировании с Windows в Linux проблем не возникнет так как Linux отлично открывает файловые системы семейства NTFS, но вот открыть файловую систему ext4 в операционной системе от майкрософт будет не так то просто.
В этой инструкции я опишу несколько способов подключения ext4 в Windows. Вы можете либо добавить поддержку этой файловой системы в Windows либо просто извлечь из неё файлы с помощью специальной программы.
1. Совместимость
Любая имеющаяся файловая система типа Ext3 может быть конвертирована в Ext4 путём простой процедуры, состоящей из запуска пары команд в режиме «только чтение». Это означает, что вы можете повысить производительность и вместимость и улучшить возможности вашей имеющейся файловой системы без переформатирования и без переустановки ОС и программ. Если вы хотите получить преимущества Ext4 в production-системе, вы также можете обновить файловую систему. Эта процедура безопасна и не подвергает риску ваши данные (при этом, само собой, рекомендуется сделать резервную копию важных данных. Впрочем, это нужно делать, даже если вы не собираетесь менять файловую систему).
Ext4 будет использовать новые структуры только для новых данных, а старые при этом останутся неизменными. При необходимости их можно будет читать и изменять. Это безусловно означает, что, единожды сменив файловую систему на Ext4, вернуть Ext3 будет уже невозможно.
Также имеется возможность смонтировать файловую систему Ext3 как Ext4 без использования нового формата данных, что позволит впоследствии смонтировать её опять как Ext3. При этом, само собой, вы не сможете воспользоваться многочисленными преимуществами Ext4.
Изменение размера файловой системы Linux
Раньше такая функция поддерживалась в утилите parted, но потом ее убрали и для этого действия приходится использовать утилиту из набора e2fsprogs - resize2fs.
Запустить утилиту очень просто. Ей нужно передать всего два параметра:
$ resize2fs [опции] устройство размер
Доступны также опции:
- -M уменьшить файловую систему до минимального размера
- -f - принудительное изменение, не смотря на потерю данных
- -F - очистить буфер файловой системы
Размер передается, как и во многих других утилитах, целым числом с указанием единиц измерения, например, 100М или 1G.
Для примера уменьшим размер нашего раздела до 400 Мегабайт:
sudo resize2fs /dev/sda6 400M
Resizing the filesystem on /dev/sda7 to 102400 (4k) blocks.
The filesystem on /dev/sda7 is now 102400 blocks long
Краткая история Ext4
Прежде чем появилась файловая система Ext существовала файловая система MINIX. Если вы не знакомы с историей развития Unix, раньше существовала небольшая операционная система MINIX, которая работала на IBM PC. Эндрю Танненбаум разработал её для обучения и выпустил исходный код в 1987 году.
Эта операционная система не была бесплатной. Она прилагалась к книге, которая стояла 69 долларов. Однако, это было не очень дорого, поэтому девяностых годах MINIX начали внедрять повсеместно. Благодаря чему молодой Линус Торвальдс разработал своё ядро Linux на основе MINIX и выпустил его в 1992 году.
Так вот. У MINIX была своя файловая система, которую и использовали первые версии Linux. Она могла работать с хранилищами до 64 мегабайт, а размер имён файлов не мог превышать 14 символов. В 1991 году средний размер жестких дисков был 40-140 мегабайт, поэтому для Linux было нужно что-нибудь другое.
Именно по этой причине Реми Кард в 1992 году разработал первую файловую систему семейства Ext. Она решала большинство проблем MINIX. Новая файловая система использовала новую прослойку VFS в ядре Linux и теперь могла работать с дисками до 2 гигабайт, а имена файлов могли состоять из 255 символов. Но у Ext был один недостаток. Она имела только одну временную метку для файла, вместо теперешних трёх: даты создания, даты доступа и даты модификации.
Реми Кард очень быстро создал Ext, и за следующий год он разработал Ext2 для её замены. Это уже была серьёзная файловая система коммерческого уровня. Она была быстро реализована в ядре Linux и MINIX, а затем и внешних модулях, которые сделали её доступной для Windows и MacOS. Здесь были снова увеличены лимиты файловой системы, однако у неё оставалась ещё одна проблема. Как и все файловые системы того времени, при выключении питания в момент записи файловая система становилась неработоспособной.
- Журнал - самый безопасный режим. В журнал записываются данные и метаданные, перед тем, как они будут сохранены на диск. Это обеспечивает полную сохранность записываемого файла, но снижает производительность.
- Упорядоченный - этот режим используется по умолчанию во многих дистрибутивах. Метаданные записываются в журнал, но данные для записи сразу же записываются в файловую систему. Тут порядок работы такой: сначала метаданные записываются в журнал, затем данные записываются в файловую систему, и только после этого метаданные тоже записываются в файловую систему. При сбое новые метаданные находятся только в журнале и файловая система может очень просто восстановится, будут повреждены только те файлы, которые записываются в момент сбоя, все остальные останутся впорядке.
- Обратная запись - менее безопасный метод журналирования. Здесь в журнал тоже запиваются только метаданные, но в файловую систему они могут записываться вместе с данными, для улучшения производительности. Несмотря на то, что файлы, записываемые во время сбоя могут быть утеряны, для файловой системы в целом этот режим гарантирует безопасность.
Как и в Ext2, в Ext3 используется 16-ти битная адресация, это значит, что при размере блока 4 килобайта самый большой файл может иметь размер 2 терабайта, а максимальный размер файловой системы - 16 терабайт.
Файловая система Ext4 была анонсирована в 2006 году и ею занимался уже другой разработчик. Его имя Теодор Цо. Журналирование Ext4 тоже поддерживается. В ядро Linux эта файловая система попала спустя два года после анонса. Файловая система значительно расширила возможности Ext4, но по прежнему опиралась на старую технологию.
Ext4 была совместима с Ext3 и старую файловую систему можно было с легкостью конвертировать в новую. Кроме того, драйвер Ext4 может монтировать файловую систему в режиме Ext3, поэтому теперь нет необходимости поддерживать две отдельных кодовых базы.
Ещё одно улучшение по сравнению с Ext3 - это то, что блоки данных выделяются до записи их на диск, что тоже значительно увеличивает как производительность чтения так и записи. Кроме того, в файловую систему были добавлены екстенты. Это блоки до 128 мегабайт, которые можно резервировать и обращаться к ним по одному адресу. Это уменьшает количество Inode необходимых для записи одного файла, а также увеличивает производительность.
Одним из ограничений Ext3 была максимальная вложенность подкаталогов - 32 000. Начиная с ядра 2.6.23 в Ext4 улучшена работа с большим количеством подкаталогов и теперь их может быть неограниченное количество.
Скорость проверки файловой системы в Ext4 тоже увеличена. В Ext3 проверяются все файлы включая удалённые и пустые. В Ext4 же все неиспользованные блоки отмечаются и пропускаются при проверке, это очень сильно улучшает производительность. В Ext4 была добавлена дефрагментация в реальном времени. В предыдущих версиях файловой системы дефрагментация выполнялась во время монтирования или когда файловая система не смонтирована.
Выводы
В одной из предыдущих статей мы рассмотрели как выполняется разметка диска с помощью parted. Из этой статьи вы узнали все что нужно о работе с файловой системой. Теперь у вас не возникнет проблем если у вас вдруг не будет доступа к графическим утилитам и нужно будет исправлять ошибки или настраивать файловую систему. Если остались вопросы, спрашивайте в комментариях!
Ext4 — это результат эволюции Ext3, наиболее популярной файловой системы в Linux. Во многих аспектах Ext4 представляет собой больший шаг вперёд по сравнению с Ext3, чем Ext3 была по отношению к Ext2. Наиболее значительным усовершенствованием Ext3 по сравнению с Ext2 было журналирование, в то время как Ext4 предполагает изменения в важных структурах данных, таких как, например, предназначенных для хранения данных файлов.
Это позволило создать файловую систему с более продвинутым дизайном, более производительную и стабильную и с обширным набором функций.
10. Онлайн-дефрагментация
Эта функция пока в разработке и будет включена в один из будущих релизов.
Хотя отложенное и многоблочное распределение и экстенты помогают уменьшить фрагментированность файловой системы, со временем она всё-таки может вырасти.
Например: вы создаёте три файла в одном каталоге и они расположены на диске друг за другом. Потом, однажды вы решаете обновить второй файл, и при этом файл становится несколько больше — так, что места для него становится недостаточно. При этом нет никаких других решений, кроме как отделить не вмещающийся фрагмент файла и положить его на другое место диска или выделить файлу последовательную область диска большего размера в другом месте, вдалеке от первых двух файлов, что приведёт к перемещениям головки диска, если приложению потребуется считать все файлы в каталоге (скажем, менеджер файлов будет создавать эскизы для файлов изображений).
Помимо этого, файловая система может заботиться только об определённых типах фрагментации и она не может знать, например, что она должна хранить все файлы, требуемые при загрузке, рядом друг с другом, поскольку она просто не знает, какие из них требуются при загрузке. Чтобы решить эту проблему, Ext4 будет поддерживать онлайн-дефрагментацию.
Также имеется утилита e4defrag, которая позволяет дефрагментировать как отдельные файлы, так и всю файловую систему.
11. Улучшения, связанные с inode
Бóльшие inodes, наносекундные временные метки, быстрые расширенные атрибуты, резервирование inodes…
- Бóльшие inodes: Ext3 поддерживает inodes настраиваемого размера (путём указания mkfs параметра -I), однако размер inode по умолчанию — 128 байт. В Ext4 он будет 256 байт. Это потребовалось, чтобы вместить несколько дополнительных полей (таких как наносекундные временные метки и версии inode), а оставшееся в inode место будет использовано для хранения тех расширенных атрибутов, которые достаточно малы, чтобы там поместиться. Это позволит сделать доступ к таким атрибутам намного быстрее и улучшит производительность приложений, использующих их, в 3—7 раз.
- Суть резервирования inode состоит в выделении нескольких inodes при создании каталога в ожидании того, что они будут использованы в будущем. Это улучшает производительность, потому что вновь создаваемые в этом каталоге файлы смогут использовать зарезервированные inodes. Поэтому создание и удаление файлов производится более эффективно.
- Наносекундные временные метки (nanosecond timestamps) означают, что такие поля inode как, например, время модификации получают наносекундную точность (в Ext3 она была равна секунде).
2. Подключение ext4
Главное окно программы выглядит вот так:
Здесь в в списке показаны все доступные разделы, их размер и файловая система. Для того чтобы примонтировать любой из разделов выполните на нем двойной щелчок:
Здесь есть два варианта монтирования:
- Automaticly mount via Ext2Mgr - раздел будет подключен сейчас, но только до перезагрузки
- Mountpoint for fixed disk - постоянное автоматическое подключение раздела при старте системы.
С права от поля способа монтирования можно выбрать букву диска для монтирования.
Также в поле Hiding files with prefix можно указать с какими префиксами файлы нужно считать скрытыми, как вы знаете в Linux считаются скрытыми файлы с префиксом точка. Когда укажите все необходимые параметры нажмите кнопку Apply.
Теперь открыв Мой компьютер вы увидите подключенный диск:
С помощью драйвера Ext2fsd вы можете работать с вашими разделами Linux как с обычными NTFS или FAT.
Дефрагментация файловой системы
Хотя и фрагментация нехарактерное явление для файловых систем семейства ext, при очень интенсивном использовании может накапливаться фрагментированость, что будет замедлять работу файловой системы. Для дефрагментации можно использовать стандартную утилиту e4defrag. Просто выполните:
Чтобы проверить нужна ли дефрагментация в Linux выполните эту же команду с опцией -c:
Total/best extents 26247/24953
Average size per extent 1432 KB
Fragmentation score 0
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This device (/dev/sda6) does not need defragmentation.
Done.
В поле Fragmentation score отображен процент фрагментации, как видите, у меня 0, нормой считается до 30, 31-55 небольшие проблемы, и больше 56 - нужна дефрагментация.
Основные команды
Для управления файловой системой ext в Linux используется целый набор команд из пакета e2progs. Сюда входят как команды для управления флагами файлов, создания и изменения файловых систем, так и утилиты для отладки файловой системы.
Рассмотрим основные утилиты, которые будем использовать:
- badblocks - если у вас старый жесткий диск и на нем накопилось много битых блоков, вы можете с помощью этой утилиты пометить их все на уровне файловой системы, чтобы больше не использовать.
- e2label - позволяет изменить метку раздела с файловой системой ext.
- fsck - проверка файловой системы linux и исправление найденных ошибок
- mkfs - позволяет создать файловую систему Linux.
- resize2fs - изменить размер раздела с файловой системой
- tune2fs - позволяет изменить файловую систему Linux, настроить ее параметры.
А теперь будет рассмотрена работа с файловой системой linux на примерах.
Настройка файловой системы linux
Различные параметры файловой системы, такие как размер блока данных, иноды или зарезервированное место под данные пользователя root можно настроить. Для этого существует утилита tune2fs.
Синтаксис команды очень прост:
$ tune2fs опции устройство
Поддерживаются следующие опции:
- -j - создать файл журнала. Позволяет превратить файловую систему ext2 в ext3.
- -J - настроить параметры журнала
- -l - получить содержимое суперблока
- -L - изменить метку раздела
- -m - изменить процент дискового пространства, зарезервированного для суперпользователя
- -M - изменить последнюю папку монтирования
- -U - задать UUID файловой системы
- -C - изменить значение счетчика монтирования
- -T - изменить последнюю дату проверки файловой системы
- -с - изменить периодичность проверок файловой системы с помощью fsck
- -O - изменить опции файловой системы.
Изменить размер зарезервированного места для суперпользователя до пяти процентов:
sudo tune2fs -m 5 /dev/sda6
Setting reserved blocks percentage to 5% (392358 blocks)
Посмотреть информацию из суперблока, эта команда показывает всю доступную информацию параметрах файловой системы:
Изменить счетчик количества монитрований:
tune2fs -C 0 /dev/sda6
Setting current mount count to 0
Думаю тут смысл понятен, нужно только немного со всем этим поэкспериментировать.
С помощью опции -O мы вообще можем превратить нашу ext3 в ext4 следующей командой:
sudo tune2fs -O extents,uninit_bg,dir_index
После этого действия нужно выполнить проверку файловой системы на ошибки в fsck. Подробнее об этом поговорим ниже.
sudo fsck -np /dev/sda6
Таким образом вы можете изменить файловую систему linux, и настроить по своему усмотрению любые ее параметры.
2. Больший размер файлов и файловой системы
Примечание: код для создания файловых систем размером более 16 терабайт на момент написания этой статьи не содержится ни в одном из стабильных релизов e2fsprogs. В будущем он будет добавлен.
Изменение метки файловой системы
Утилита e2label позволяет изменить или посмотреть метку раздела диска. Принимает всего два параметра - устройство и новую метку если нужно.
sudo e2label /dev/sda6
sudo e2label /dev/sda6 root1
6. Отложенное распределение
Отложенное распределение представляет собой способ повышения производительности, не влияющий на формат данных и представленный в современных файловых системах, таких как XFS, ZFS, btrfs и Reiser 4.
Суть этого метода состоит в отсрочке выделения блоков насколько это возможно — по контрасту с подходом, применямым в традиционных файловых системах (таких как Ext3, reiser3 и т. д.): распределять блоки сразу, при первой возможности. Например, если процесс осуществляет запись вызовом write(), файловая система распределит блоки под запись немедленно — даже если данные пока не будут записываться на диск, а будут находиться какое-то время в кэше. Недостатки такого подхода, например, в том, что, если процесс непрерывно осуществляет запись в растущий файл, последовательные вызовы write() постоянно распределяют блоки данных, и при этом неизвестно, будет ли файл расти далее.
При использовании отложенного распределения блоки сразу не выделяются при обращении к write(). Вместо этого распределение откладывается до момента, когда файл будет записан из кэша на диск. Благодаря этому механизм получает возможность оптимизировать процесс распределения. Наибольший выигрыш получается при использовании двух ранее упомянутых возможностей — экстентов и многоблочного распределения, поскольку часто встречается ситуация, когда окончательный файл пишется на диск в виде экстентов, распределённых с помощью mballoc. Это даёт существенный прирост производительности, и иногда сильно снижает фрагментированность данных.
Подключение ext4 в Windows 10
Сообществом открытого программного обеспечения был разработан открытый драйвер ext4 для windows под названием ext2fsd.
12. Устойчивое прераспределение
Эта возможность, доступная уже в Ext3 в последних версиях ядра и эмулируемая glibc в файловых системах, которые её не поддерживают, позволяет приложениям заранее распределять дисковое пространство, сообщая о своих потребностях файловой системе. Та, в свою очередь, выделяет необходимое количество блоков и структур данных, но они пусты до тех пор, пока приложение в реальности не осуществит в них запись.
Это именно то, что делают, например, P2P-приложения, выделяя место для данных, которые появятся там только спустя часы или дни. Однако реализовано это намного более эффективно — на уровне файловой системы и с универсальным API.
Применений этому несколько: во-первых, чтобы предотвратить выполнение того же самого приложениями (такими как P2P), неэффективно заполняющими файлы нулями — нужные блоки будут выделены разом.
Во-вторых, чтобы снизить фрагментацию — опять же потому, что блоки выделяются однократно, настолько непрерывно, насколько это возможно.
В-третьих, чтобы гарантировать, что приложение будет иметь столько места, сколько ему требуется, что особенно важно для приложений, работающих в реальном времени, поскольку файловая система может вдруг переполниться в процессе выполнения важной операции.
Эта возможность доступна через интерфейс libc posix_fallocate().
Создание файловой системы
Создать файловую систему linux, семейства ext, на устройстве можно с помощью команды mkfs. Ее синтаксис выглядит следующим образом:
sudo mkfs -t тип устройство
Доступны дополнительные параметры:
- -с - проверить устройство на наличие битых секторов
- -b - размер блока файловой системы
- -j - использовать журналирование для ext3
- -L - задать метку раздела
- -v - показать подробную информацию о процессе работы
- -V - версия программы
Создаем файловую систему на нашем устройстве. Будем создавать ext3:
sudo mkfs -t ext4 -L root /dev/sda6
Creating filesystem with 7847168 4k blocks and 1962240 inodes
Filesystem UUID: 3ba3f7f5-1fb2-47af-b22c-fa4ca227744a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
Использование Ext4
Я уже подробно рассказывал как создавать разделы Ext3 и Ext4 в отдельной статье. Сегодня я упомяну об этом только кратко. Чтобы создать раздел Ext4 выполните:
sudo mkfs -t ext4 /dev/sdb1
Здесь /dev/sdb1 - имя вашего раздела, на котором надо создать файловую систему. Куда интереснее разобраться с опциями монтирования Ext4:
- atime/noatime - обновлять или не обновлять временную метку последнего доступа к файлам;
- journal_checksum/nojournal_checksum - добавляет контрольные суммы для записей журнала, это позволяет лучше находить повреждения;
- barrier/nobarier - сбрасывать данные на диск, прежде, чем применять изменения для метаданных файловой системы. По умолчанию включено;
- min_batch_time - время между сбросами данных на жесткий диск. По умолчанию 0 миллисекунд. Увеличение этого параметра улучшит пропускную способность файловой системы, но увеличит задержки;
- discard/nodiscard - определяет надо ли выполнять команду discard/trim для диска при освобождении блоков, полезно для SSD, выключено по умолчанию;
- max_dir_size_kb - максимальный размер одной папки в килобайтах;
- data - определяет режим журналирования, о котором мы говорили выше: journal, ordered, writeback. По умолчанию используется ordered;
- acl/noacl - включает или отключает поддержку ACL списков
- quota - включает поддержку управления квотами в файловой системе, для управления используются специальные утилиты;
- commit - записывать изменения сохраненные в журнале в файловую систему каждые n секунд. По умолчанию - каждые 5 секунд;
- errors - указывает что надо делать при ошибке. Доступные значения: ontinue, remount-ro, panic.
Здесь перечислены далеко не все опции, а только самые интересные. Более подробное описание опций монтирования смотрите выполнив команду:
Монтирование Ext4 выполняется с помощью команды mount:
sudo mount /dev/sdb1 /mnt
Во время монтирования можно указать желаемые опции, например:
sudo mount -o data=journal,commit=60,noatime /dev/sdb1 /mnt
Например, здесь мы включили максимальный уровень журналирования, увеличили время между записями данных в файловую систему из журнала до 60 секунд, а также отключили обновление метки atime. Аналогично, опции можно задать в /etc/fstab. Для этого добавьте их в четвертую колонку строки монтирования диска:
/dev/sdb1 / ext4 defaults,data=journal,commit=60,noatime 1 0
Параметр defaults удалять не следует, просто добавляйте нужные вам опции после него.
3. Масштабируемость подкаталогов
В настоящий момент один каталог Ext3 не может содержать более, чем 32000 подкаталогов. Ext4 снимает это ограничение и позволяет создавать неограниченное количество подкаталогов.
Плюсы и минусы Ext4
К плюсам этой файловой системы можно отнести такие её особенности:
- Журналирование;
- Поддержка шифрования;
- Высокая стабильность, так как она проверена временем;
- Поддержка по умолчанию во многих дистрибутивах;
- Активная разработка;
- Не подвержена фрагментации;
- Лимитов вполне достаточно обычному пользователю, так и для серверных систем;
Минусов у файловой системы тоже хватает:
- Не поддерживаются функции файловых систем следующего поколения, такие как управление томами, дедупликация данных;
- Отсутствие проверки контрольных сумм для данных, что делает невозможным обнаружение повреждения данных из-за аппаратных сбоев оборудования.
- Плохая масштабируемость. Несмотря на то, что заявленный максимальный размер раздела один экзабайт, на деле лучше не создавать разделы больше 50 - 100 терабайт.
Извлечение файлов из Ext4 в Windows
Главное окно программы выглядит вот так:
Здесь вы можете выбрать нужный раздел с файловой системой ext4 и просмотреть все файлы, что там есть:
Чтобы извлечь любой из файлов или папку, кликните по ней правой кнопкой мыши и выберите Save As, затем выберите папку, в которую будет сохранен ваш файл:
Чтобы сохранить структуру папок нужно отметить флажок Save directory structure. Затем дождитесь завершения процесса копирования и можете делать с полученными файлами все что нужно уже в проводнике.
9. Режим без журналирования
Журналирование обеспечивает целостность файловой системы путём протоколирования всех происходящих на диске изменений. Но оно также вводит дополнительные накладные расходы на дисковые операции. В некоторых особых ситуациях журналирование и предоставляемые им преимущества могут оказаться излишними. Ext4 позволяет отключить журналирование, что приводит к небольшому приросту производительности.
7. Быстрый fsck
Fsck — это очень медленная операция, особенно это касается её первой стадии, проверки всех inodes в файловой системе.
То, что список неиспользуемых inodes составляется fsck, а не Ext4, будет хорошо заметно, если вы запустите fsck, чтобы он построил список неиспользуемых inodes, и когда только следующий запуск fsck пройдёт быстрее (запуск fsck всё равно необходим при конвертировании Ext3 в Ext4).
Кроме того, на ускорение fsck влияет и другая особенность — «гибкие группы блоков», также они ускоряют и другие файловые операции.
Разработка Ext4
Несмотря на то, что файловая система очень старая по меркам компьютерной индустрии, она всё ещё активно разрабатывается, хотя её разработчики и рассматривают эту файловую систему как временную, пока её не заменит файловая система следующего поколения. Есть ещё несколько вещей, которые активно разрабатываются.
Разработчики хотят научить файловую систему считать контрольные суммы для метаданных. Это позволит выявлять повреждённые суперблоки и использовать вместо них альтернативные. Сейчас это можно сделать только вручную. Ещё один момент, который хотят улучшить разработчики - это квоты. Сейчас они находятся в пространстве пользователя, но их надо перенести в ядро чтобы улучшить производительность. Кроме того надо увеличить максимальный размер блока. В наше время SSD уже используют размер блока в 8 килобайт, а Ext4 все ещё может выделять блоки до 4 килобайт. Это ещё больше уменьшит фрагментацию и улучшит производительность.
13. Механизм «шлагбаумов» по умолчанию включен
Это опция, обеспечивающая целостность файловой системы ценой некоторой потери производительности (её можно отключить с помощью «mount -o barrier=0», рекомендуется сделать это при замерах производительности).
Выдержка из статьи LWN: «Код файловой системы обязан перед созданием записи фиксации [журнала] быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени».
Эта статья для тех кто хочет перейти с с файловой системы Ext3 на Ext4, при этом сохранить все свои файлы и каталоги. Постараюсь описать наиболее общие ошибки возникающие в процессе миграции с Ext3 на Ext4, не устанавливая систему заново.
Основания для перехода.
Объяснение преимуществ и недостатком Ext4 выходит за рамки этой статьи (воспользуйтесь поиском по хабру — тут это есть). Если вы не страдаете от ограничений накладываемых Ext3 и не готовы рискнуть и просто так перейти на Ext4 то очень хорошо подумайте, а нужно ли это вам? ;) С другой стороны, перейдя на Ext4 вы можете почувствовать прирост производительности вашей файловой системы и увеличить её надёжность, при этом не понеся никаких накладных расходов ;)
Попытка смонтировать Ext4 без конвертации.
Интересным моментом является тот факт, что можно попробовать смонтировать файловую систему Ext3 как Ext4 не конвертируя её. Всё, что при этом нужно сделать это внести соответствующие изменения типа файловой системы в /etc/fstab и перегрузить систему. В этом случае можно будет в любое время вернуться к Ext3.
Это может быть хорошей проверкой, а готова ли ваша ОС поддерживать Ext4. Но следует помнить что в этом случае никакие расширения Ext4 включены не будут — это будет просто режим совместимости с Ext3.
Переход на Ext4.
Последние предупреждения.
Сделайте резервную копию вашей системы перед тем как продолжить. Может так случиться, что в процессе конвертации компьютер перезагрузится и будут утеряны все данные.
Файловые системы более не будут совместимы с Ext3 поэтому необходимо удостовериться что в вашем распоряжении есть инструментарий с поддержкой Ext4 для нормальной загрузки и восстановления файловой системы, на случай сбоя. Последние версии загрузчика, e2fsprogs, mount и ядро Linux'а включают в себя поддержку Ext4.
Инструментарий.
- e2fsprogs 1.41.6
- mount 2.16
- linux-image 2.6.30
- grub 1.96+20090808
Преобразование не корневой файловой системы в Ext4.
До тех пор пока мы будем конвертировать отмонтированные Ext3 в Ext4 это будет действительно простыми процедурами. В примере мы преобразуем /dev/sdc1 смонтированную как /home.
Следующим шагом проверим раздел на наличие ошибок чтобы убедиться в их отсутствии. Мы всё ещё в Ext3:
Включаем новые возможности Ext4 для раздела:
После этого запустим проверку файловой системы для Ext4:
Будут найдены ошибки — это нормально. Можете запустить проверку второй раз чтобы убедиться что ошибки исчезли.
Параметр -D при запуске fsck.ext4 фактически включит поддержку dir_index, восстановив индекс каталогов. Запуск с этой опцией в любое время можно сделать и позже.
Теперь изменим файл /etc/fstab для включения Ext4 для сконвертированного раздела, заменив ext3 на ext4, остальные параметры могут быть другими в вашей системе:
Примите поздравления если всё прошло успешно ;) Если нет то не паникуйте. В конце концов вы последовали совету выше и сделали резервную копию, не так ли? ;) Проверьте на самом ли деле у вас установлен указанный выше инструментарий (или версии выше) из unstable или experimental веток Debian'а (хотя может быть вы используете другой дистрибутив?), в случае необходимости — обновите эти пакеты. Попробуйте ещё раз проделать описанные выше шаги.
/boot раздел.
Если /boot является отдельным разделом в Ext3 то просто пока оставим всё как есть. Хотя последние версии grub и поддерживают Ext4 они могут быть не включены в дистрибутив.
Можно просто смонтировать раздел в Ext4 без реального преобразования, указав новый тип файловой системы раздела в /etc/fstab:
Большинство новинок Ext4 не будет использоваться но это мало на что повлияет в процессе начальной загрузки ОС, не так ли? ;) И по существу это остаётся всё ещё Ext3 раздел, так что даже старая версия grub не должна иметь каких либо проблем с загрузкой.
Если у вас раздел /boot не создан отдельно то в самое время задуматься об его отделении в отдельную область. В противном случае будьте очень осторожны и не включать фичи которые не поддерживаются вашей версией grub'а или обновите grub до той версии которая будет поддерживать их.
Конвертирование корневой файловой системы в Ext4.
Конвертировать корневую файловую систему несколько сложнее, так как мы не можем просто так взять и отмонтировать её. Тем не менее это возможно сделать и без использования внешних загрузочных носителей. Но всю процедуру конвертации корневой файловой системы надо будет проделать в однопользовательском монопольном режиме.
Первым шагом надо изменим /etc/fstab и скажем использовать для корневого раздела ext4 вместо ext3. Это важно так как дальше файловая система будет работать в режиме только для чтения и невозможно будет внести никакие изменения, в результате невозможно будет смонтировать корневую файловую систему при следующей загрузке.
Предположим, что корневой раздел / это /dev/sda1, так что после внесения изменений файл /etc/fstab строка для этого раздела должна выглядеть так:
Теперь перемонтируем файловую систему в режим только для чтения:
Запустим проверку файловой системы:
Тут нас расскажут, что надо перезагрузить систему. Что-ж, хорошая идея. Перезагрузимся в одномользовательский монопольный режим и снова перемонтируем корневую файловую систему в режиме только для чтения:
Хорошо, что мы уже отредактировали /etc/fstab и ext3 раздел может быть смонтировал как ext4 без предварительной конвертации.
Далее чтобы включить ext4 на корневой файловой системе запускаем:
И снова запускаем проверку для корневой файловой системы. Она найдёт и исправит ошибки, ну мы уже в курсе (читаем выше):
Если используется ядро 2.6.30 из репозитория Debian то будьте осторожны. Возможно потребуется обновить initrd чтобы добавить модуль ext4:
Если модуль ext4 не присутствует в initrd то вы не сможете загрузиться после того как сконвертируете Ext3 в Ext4.
Теперь перегружаемся. Вот, мы имеем быструю Ext4 файловую систему, ощущаем некоторый прирост производительности, нам доступны все улучшения Ext4. Ну, почти все, читаем дальше…
Преобразование файлов в extents.
Может показаться, что конвертация завершена. И это почти правда, за исключением того, что все ранее созданные файла будут использовать bitmap отображение ext3 вместо extents в ext4.
Нет, конечно-же рано или поздно, при последующей модификации файлов их отображение тоже обновится в extents. Но к великому сожалению гораздо больше файлов читается чем записывается (часто ли обновляются скомпилированные приложения ОС?). В итоге файлы могут отображаться в bitmap ещё длительное время и вы не почувствуете силу и не раскроете весь потенциал ext4.
Утилита e4defrag, которая могла бы перестроить файлы в новое отображение, на данный момент находится в этапе разработки. К сожалению она не полная и не готова для использования на реальных данных (во всяком случае, как говорят, пока).
К счастью не всё потеряно. Можно проделать необходимые действия используя chattr которая поставляется с пакетом e2fsprogs. Она позволяет установить атрибут который заставит ядро переписать файл в новом отображении extents. Это можно сделать на смонтированной и работающей файловой системе. Фактически это, наверное, единственный способ это сделать ;)
Для проверки расширенных атрибутов файла (и директория) можно воспользоваться lsattr:
Если не используется extents то увидим что-то наподобие этого:
Пунктирная линия это просто отображение атрибутов файла. В данном случае файл не имеет атрибутов.
Теперь установит атрибут для extents:
Снова отобразим атрибуты файла:
Обращаем внимание на «e» говорящую о том, что файл использует атрибут extents.
Для chattr можно передать несколько имён файлов. Но… Кто в наше время делает что-то вручную и по одному файлу. Используем магию:
Таким образом мы установим атрибут extents сначала для всех файлов, а затем для всех директорий раздела /home.
Эту же операцию можно проделать начиная с корневого раздела. Указание опции -xdev не позволит пытаться установить атрибут extents в тех местах где ему быть не надобно.
Возможно имеет смысл запустить эти команды в однопользовательском монопольном режиме чтобы свести к минимуму шансу, что какой-то другой процесс параллельно вмешается в работу.
Заключительное слово.
Автор этих строк не несёт ответственности если у вас что-то сломается в результате всех вышеописанных действий. Помните, что действуете вы на свой страх и риск ;) А в остальном успехов… ;)
Данная статья является достаточно вольным переводом
"Migrating a live system from ext3 to ext4 filesystem" (как оригинала к началу боевых действий) с некоторыми дополнениями. ;)
Критика, обсуждение, описание собственного опыта и прочее-прочее безусловно приветствуется…
В большинстве современных дистрибутивов Linux по умолчанию используется файловая система Ext4. В предыдущих версиях использовалась Ext3, ещё раньше Ext2 и если вернуться достаточно далеко, то и Ext. Без сомнения, на момент написания статьи, это самая популярная файловая система для Linux.
В этой статье мы поговорим об истории развития Ext4, разберемся чем она отличается от Ext, Ext2 и Ext3, с чего всё началось, а также рассмотрим основные возможности этой файловой системы в наше время.
Работа с файловой системой в Linux
Перед тем как переходить к работе с реальным жестким диском важно попрактиковаться. Если сменить метку или проверить на битые сектора можно и рабочий диск, то создавать новую файловую систему, изменять ее размер, рискуя потерять данные на реальном диске не рекомендуется. Можно отделить небольшой раздел диска для экспериментов с помощью Gparted и выполнять все действия в нем. Допустим, у нас этот раздел будет называться /dev/sda6.
8. Контрольные суммы журнала
Журнал является наиболее часто используемой частью диска, вследствие чего блоки, из которых он состоит, становятся особенно чувствительными к отказам оборудования. Более того, попытка восстановления при повреждённом журнале может привести к ещё более массовым повреждениям в данных. Ext4 подсчитывает контрольные суммы журнальных данных, что позволяет определить факт их повреждения. У этого есть и ещё одно преимущество: благодаря контрольным суммам можно превратить систему двухфазной фиксации журнала Ext3 в однофазную, что ускоряет файловые операции в отдельных случаях до 20 %, таким образом, улучшаются одновременно и надёжность, и производительность.
Примечание: часть, отвечающая за производительность — асинхронное протоколирование, — сейчас по умолчанию отключена, и будет включена в одном из последующих релизов, когда удастся добиться надёжной его работы.
4. Экстенты
Традиционные файловые системы, произошедшие от Unix, такие как Ext3, используют схему непрямого отображения блоков для отслеживания каждого блока, отвечающего за хранение данных файла. Такой подход неэффективен для больших файлов, особенно при операциях удаления и усечения таких файлов, поскольку карта соответствия содержит по одной записи на каждый отдельный блок. В больших файлах блоков много, их карты соответствия большие, и обрабатываются они медленно.
В современных файловых системах применяется иной подход, основанный на так называемых экстентах. Экстент — это в общем-то набор последовательных физических блоков. Он как бы говорит нам: «Эти данные находятся в следующих n блоках». Например, файл размером в 100 мегабайт может храниться в единственном экстенте такого же размера, вместо того, чтобы быть разбитым на 25600 4-килобайтных блоков, адресуемых путём непрямого отображения. Огромные файлы можно разделить на несколько экстентов.
Благодаря применению экстентов улучшается производительность, а также уменьшается фрагментированность, поскольку экстенты способствуют непрерывному размещению данных.
1. Установка драйвера ext2fsd
Загрузить установщик для вашей версии ОС можно с официального сайта программы. Процесс установки не должен вызвать никаких трудностей и сводиться к нажиманию кнопки Далее в мастере установки, как обычно при установке программ в Windows. Интерес представляет только это окно:
- Make Ex2Fsd automatically started when system boots - автоматическая загрузка драйвера во время загрузки системы, желательно включить.
- Enable write support for ext2 partitions - поддержка записи в файловую систему ext2
- Enable force writing support on Ext3 partitions - поддержка записи в файловую систему ext3
Установите необходимые галочки и еще несколько раз нажмите кнопку Далее.
5. Многоблочное распределение
Если в Ext3 нужно записать на диск новые данные, специальный механизм распределения блоков определяет, какие блоки из числа свободных будут для этого использованы. Проблема в том, что в Ext3 этот механизм распределяет в один присест только один блок (4 килобайта). Это означает, что, если нужно записать, скажем, ранее упомянутые 100 мегабайт данных, нужно будет обратиться к механизму распределения 25600 раз (речь идёт о каких-то 100 мегабайтах!). Мало того, что это неэффективно, это к тому же не позволяет оптимизировать политику распределения, поскольку соответствующий механизм не имеет понятия о реальном объёме данных, подлежащем записи, а знает только об одном-единственном блоке.
Ext4 использует механизм многоблочного распределения (multiblock allocator, mballoc) который позволяет распределить любое количество блоков с помощью единственного вызова и избежать огромных накладных расходов. Благодаря этому производительность существенно вырастает, что особенно заметно при отложенном распределении (см. ниже) с использованием экстентов. Эта возможность никак не влияет на формат данных.
Также можно отметить, что в механизм распределения блоков и inode в Ext4 получил и другие улучшения, подробно описанные в этом документе.
Проверка файловой системы Linux
При неправильном отключении носителей или неожиданном отключении питания, файловая система Linux может быть повреждена. Обычно проверка корневой файловой системы и домашнего каталога на ошибки выполняется во время загрузки. Но если эта проверка не была выполнена или нужно поверить другой носитель, придется все делать вручную. Для этого есть утилита fsck.
$ fsck [опции] устройство
- -p - автоматическое восстановление
- -n - только проверка, без восстановления
- -y - ответить да на все запросы программы
- -с - проверить на битые сектора (аналог badblocks
- -f - принудительная проверка, даже если раздел помечен как чистый
- -j - внешний журнал файловой системы
Проверка файловой системы Linux выполняется такой командой, проверим диск /dev/sda6, заметьте, что диск должен быть не примонтирован:
sudo fsck -a /dev/sda6
root: clean, 11/32704 files, 37901/102400 blocks
Читайте также: