XFS - файловая система будущего? Изменение параметров файловой системы. Файловая система ext3

28.04.2019 Мобильный интернет

Файловая система EXT3

В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.

Разработанная в Red Hat

В данный момент является основной для LINUX.

Драйвер Ext3 хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) в памяти до завершения операции. Это может показаться расточительным. Полные блоки содержат не только изменившиеся данные, но и не модифицированные.

Такой подход называется "физическим журналированием ", что отражает использование "физических блоков" как основную единицу ведения журнала. Подход, когда хранятся только изменяемые байты, а не целые блоки, называется "логическим журналированием " (используется XFS). Поскольку ext3 использует "физическое журналирование", журнал в ext3 имеет размер больший, чем в XFS. За счет использования в ext3 полных блоков, как драйвером, так и подсистемой журналирования нет сложностей, которые возникают при "логическом журналировании".

Типы журналирования поддерживаемые Ext3, которые могут быть активированы из файла /etc/fstab:

· data=journal (full data journaling mode)- все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Самый медленный, но самый надежный.

· data=ordered - записываются изменения только мета-данных файловой системы, но логически metadata и data блоки группируются в единый модуль, называемый transaction. Перед записью новых метаданных на диск, связанные data блоки записываются первыми. Этот режим журналирования ext3 установлен по умолчанию.
При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при full data journaling mode). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных.

· data=writeback (metadata only) - записываются только изменения мета-данных файловой системы. Самый быстрый метод журналирования. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS.

XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).

Официальная информация на http://oss.sgi.com/projects/xfs/



XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.

Некоторые особенности:

· Более эффективно работает с большими файлами.

· Имеет возможность выноса журнала на другой диск, для повышения производительности.

· Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.

· В журнал записываются только мета-данные.

· Используются B+ trees.

· Используется логическое журналирование

Операционная система Linux поддерживает огромное количество разнообразных типов файловых систем. С точки зрения Linux файловые системы можно условно разделить на четыре группы:

  • «Родные» файловые системы. Имеется в виду, что файловая система поддерживает все атрибуты, свойственные Linux: права доступа, временные метки, информацию о владельце файла и т.д.;
  • «Неродные» файловые системы. То есть файловые системы, не поддерживающие атрибуты Linux;
  • Виртуальные. Это файловые системы, которые не имеют физического носителя;
  • Сетевые файловые системы.

К «родным» файловым системам можно отнести:

  • reiserfs

Файловая система ext2

Ext2 - это одна из первых файловых систем, используемых в Linux (Если говорить более точно, то первая файловая система Linux - это minix. Но возможности этой fs весьма ограничены, и она применялась только на начальном этапе развития Linux. ). Она была создана в 1993 году. Эта файловая система считается очень надёжной и проверенной временем. Но, поскольку ext2 разрабатывалась в те времена, когда жёсткий диск размером 300 Мбайт считался очень большим, ей присущи некоторые ограничения. Применять эту fs для больших разделов не имеет смысла, она начнёт «тормозить», когда в разделе будет большое количество файлов. То есть ext2 считается медленной (Понятие «медленная» очень относительное. Ext2 считается медленной в Linux. Но если сравнить её со стандартной файловой системой FreeBSD, окажется, что ext2 очень даже быстрая. ). Конечно, с увеличением размеров дисков, с появлением новых веяний, в файловую систему вносились изменения, улучшающие её работу и функциональность. Например, поддержка POSIX ACL. Но всё же её не коснулись глобальные изменения, позволяющие говорить:

Да, это та самая, единственная файловая система, которая меня полностью устраивает.

Кроме того, ext2 имеет серьёзные ограничения:

  • Максимальный размер файла - 2048 Гбайт.
  • Максимальный размер файловой системы - 32768 Гбайт.
  • Максимальное количество поддиректорий в одной директории - 32768.

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

Сейчас файловую систему ext2 уже практически не используют. И дело даже не в её ограничениях, ext2 достаточно надёжная файловая система. Всё дело в скорости загрузки Linux-серверов. Необходимо, чтобы сервер работал постоянно. Но чудес не бывает, сервера иногда приходится перегружать. Ваша задача - сделать так, чтобы после падения системы они перегружались как можно быстрее. При включении сервера происходит проверка дисков. Процедура проверки файловых систем, особенно больших, - достаточно длительная процедура. Если таких файловых систем несколько, то их проверка может занять очень много времени. А сервер должен работать!

Для уменьшения времени, тратящегося на проверку, и для увеличения надёжности были разработаны журналируемые файловые системы. Если вы работали с базами данных, вам наверняка известно такое понятие как транзакция. В транзакцию объединяют несколько SQL-операторов. Система должна выполнить все операторы. Если хотя бы один из них не срабатывает, то система откатывается на начало транзакции. Если система была отключена во время выполнения транзакции, при включении, если это возможно, она пытается выполнить оставшиеся операторы или вернуться на начало транзакции.

В современные файловые системы была добавлена поддержка журнала транзакций. С точки зрения работы файловой системы все операции с файлом выглядят как одна транзакция. Если посмотреть подробнее на файловые операции в Linux, запись или изменение файла - это довольно сложная процедура, состоящая из многих действий с данными на диске. При использовании журнала транзакций, прежде чем какие-либо физические изменения будут произведены на диске, в журнале открывается новая транзакция, в которой будут записаны все действия, которые будут производиться с файловой системой. И только после того, как транзакция будет сохранена на диске, будут производится изменения в файловой системе.

Если файловая система будет отключена некорректно, программа проверки сначала смотрит журнал транзакций и на основании данных, находящихся в нём, попытается либо вернуть (откатить) систему на момент начала транзакции, или, если это возможно, завершить действия, описанные в транзакции. Учитывая то, что журнал имеет небольшой размер (в файловой системе ext3 он равен 32 Мбайт), процесс восстановления файловой системы значительно ускоряется.

Файловая система ext3

Когда возникла необходимость внедрения журналируемых файловых систем в Linux, компания RedHat разработала файловую систему ext3. В RedHat пошли путём наименьшего сопротивления - за основу взяли хорошо известную ext2 и добавили поддержку журнала.

По своему физическому устройству ext2 идентична ext3. Эта особенность позволила применять для работы с ext3 такие же утилиты (создание, проверка и настройка файловых систем), как и для работы с ext2.

Несмотря на добавление журнала, ext3 работает быстрее, чем ext2. К достоинствам ext3 следует также отнести возможность журналирования не только необходимых действий, но и данных, что не позволяют делать другие журналируемые системы. Благодаря этой особенности ext3 считается очень надёжной.

Ext3 поддерживает три режима работы:

  • Writeback - в этом режиме не происходит журналирования данных. В журнал сначала помещаются так называемые метаданные (inode файла, ссылки на блоки). Только после того, как они попали в журнал, происходит запись данных в файловую систему.
  • Ordered (режим по умолчанию) - этот режим похож на описанный выше. Единственным отличием является то, что в режиме writeback в журнал сначала помещаются все метаданные, и только после этого происходят изменения в файловой системе. А в режиме ordered при помещении информации о блоке в журнал этот блок сразу же изменяется в файловой системе. Затем в журнал помещается информация о следующем блоке, и блок записывается, и так далее. То есть данные изменяются параллельно с изменением в журнале.
  • Journal - режим полного журналирования. В журнал попадают метаданные и данные. И только после этого происходит изменение в файловой системе.

Файловая система ReiserFS

ReiserFS разрабатывается Гансом Реизером (Hans Reiser) и его компанией Namesys (http://www.namesys.com). Это очень быстрая файловая система, хорошо приспособленная для хранения большого количества маленьких файлов.

В ней удалось решить проблему размещения на диске маленьких файлов. Например, в ext2/3 для размещения файла, содержащего единственный символ, на диске будет занят целый блок. Блок ext2/3 может иметь размер от 1 до 8 Кбайт (размер зависит от объема файловой системы ). А в ReiserFS в одном блоке могут быть размещены данные нескольких файлов. Более того, если размер файла очень мал, данные могут быть размещены в inode, то есть непосредственно в метаданных.

Файловая система базируется на оптимизированных деревьях (B tree). Это увеличивает скорость поиска в файловой системе и снимает вопрос ограничения количества файлов и директорий в директории.

С файлами большого размера данная файловая система тоже справляется весьма уверенно.

Для файловой системы ReiserFS версии 3.6 существуют следующие ограничения:

  • Максимальный размер файла - 8 Тбайт (для 32-битных компьютеров);
  • Максимальный размер файловой системы - 16 Тбайт.

Сейчас разрабатывается следующая версия ReiserFS - четвёртая. Ожидается, что она будет включена в ядрах версии 2.6.17 или 2.6.18.

Файловая система JFS

Эта файловая система разрабатывается компанией IBM и распространяется под лицензией GNU GPL. Описание JFS можно найти в Интернете на сайте . JFS используется не только в Linux, но и в других операционных системах, например, в AIX и OS/2.

JFS - журналируемая файловая система. Основной её конёк - использование совместно с LVM (Logical Volume Manager). LVM позволяет объединять несколько физических разделов жёстких дисков в один логический, который затем можно разбивать на разделы как обыкновенный жёсткий диск. При этом некоторые типы LVM позволяют на лету подключать новое дисковое пространство. И если на увеличивающихся разделах использовать файловую систему ext3, в один прекрасный момент вы получите сообщение о невозможности создания нового файла. Дело в том, что при форматировании раздела в ext3 в нём заранее, в зависимости от размера, резервируется конечное количество inodes. То есть заранее известно максимальное количество файлов. Если размер файловой системы не будет увеличиваться, то этого количества inodes вполне хватает для нормальной работы. В JFS есть возможность динамического увеличения файловой системы и количества inodes. Благодаря этому свойству, при увеличении размера файловой системы не возникает ограничение на количество создаваемых файлов.

Для файловой системы JFS существуют следующие ограничения:

  • Максимальный размер файла ограничивается разрядностью операционной системы.
  • Максимальный размер файловой системы - 512 Тбайт.

Файловая система XFS

Файловая система XFS разрабатывалась в компании SGI (бывшая Silicon Graphics, Inc.). XFS появилась на свет в 1994 году и изначально поставлялась с операционной системой IRIX. Компания SGI славится своими рабочими станциями для производства видео, а также серверами для хранения данных. Поэтому файловая система оптимизирована для обслуживания большого количества огромных файлов и для поддержки больших директорий. Благодаря своей структуре, она так же хорошо поддерживает большое количество маленьких файлов. По своему быстродействию она сопоставима с файловой системой ReiserFS, а по надёжности превосходит файловую систему Ганса (Сколько данных было мной потеряно в файловой системе ReiserFS на пустом месте. Спасало только резервное копирование. Поэтому сейчас я ReiserFS на серверах не использую. ).

Поддержка больших файлов возможна благодаря тому, что XFS - это 64-битная файловая система. А скорость работы файловой системы достигается благодаря использованию В+ деревьев для поиска и описания внутренних структур.

Внутренне устройство файловой системы достаточно сложное, и я не вижу необходимости в кратком описании ее структуры. Тем более, что в Интернете есть хорошие статьи, подробно описывающие XFS:

Файловые системы компании Microsoft

Если говорить о файловых системах компании Microsoft, в Linux поддерживаются FAT и NTFS. С FAT всё очень просто, структура файловой системы известна, поэтому в Linux она поддерживается полностью. Единственное, что необходимо учесть при использовании FAT, в Linux существует две её разновидности:

  • msdos - FAT12/16.
  • vfat - FAT32.

Поддержку FAT следует включать в том случае, если вы предполагаете использовать гибкие диски и различные USB-накопители: флеш-карты, жёсткие диски и т.д. Дело в том, что все они обычно отформатированы в FAT.

C NTFS немного сложнее. Эта файловая система нормально поддерживается в режиме только для чтения. В режиме записи её не рекомендуется использовать. Хотя режим записи поддерживается, но если почитать документацию к драйверам NTFS, вы увидите, что там большими буквами написано: в режиме записи можно только изменять содержимое существующих файлов, ни в коем случае нельзя создавать новые файлы, удалять или изменять размер существующих - это может разрушить файловую систему.

Файловые системы iso9660 и udf

Эти файловые системы используются для хранения информации на CD- и DVD-дисках.

Изначально iso9660 была очень простой файловой системой с большим количеством ограничений. Например, имена файлов как в MS DOS, ограничение на количество вложений директорий. Поэтому для iso9660 было написано несколько дополнений, расширяющих её возможности. В том числе, дополнения, позволяющие сохранять атрибуты файлов UNIX. Все дополнения поддерживаются драйвером файловой системы, и никаких затруднений при работе быть не должно. Более того, драйвер iso9660 поддерживает, как это ни странно звучит, режим записи. Он применяется при создании образов CD-ROM.

С udf тоже не замечено особых проблем. Таким образом, работа с CD- и DVD-дисками поддерживается в Linux без каких-либо ограничений.

Файловая система proc

Это очень полезная файловая система. В своей работе администратора вы очень часто будете обращаться к её возможностям. В одной из первых глав, рассказывающих об организации файловой системы Linux, я вкратце рассказывал о предназначении этой файловой системы. Просто напомню, что файлы, которые находятся в директории /proc - это отображение области данных ядра на файловую систему. То есть, если вы просматриваете содержимое какого-либо файла, на самом деле вы видите определённую часть области данных ядра.

Ниже я опишу некоторые интересные файлы, которые вы можете встретить в директории /proc . Содержимое файлов в вашей системе будет отличаться от содержимого файлов, показанных в качестве примеров.

/proc/cmdline

Содержит командную строку, переданную ядру при его запуске.

# cat cmdline BOOT_IMAGE=Linux-2613 ro root=303 #

/proc/cpuinfo

Информация о процессоре или процессорах.

# cat cpuinfo processor: 0 vendor_id: GenuineIntel cpu family: 6 model: 9 model name: Intel(R) Pentium(R) M processor 1400MHz stepping: 5 cpu MHz: 1399.050 cache size: 1024 KB fdiv_bug: no hlt_bug: no f00f_bug: no coma_bug: no fpu: yes fpu_exception: yes cpuid level: 2 wp: yes flags: fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe est tm2 bogomips: 2800.93 #

/proc/devices

Список устройств.

# cat devices Character devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 14 sound 21 sg 116 alsa 128 ptm 136 pts 171 ieee1394 180 usb 226 drm 254 pcmcia Block devices: 3 ide0 7 loop 8 sd 11 sr 65 sd #

/proc/dma

Использование каналов DMA.

# cat dma 4: cascade #

/proc/filesystems

Список поддерживаемых файловых систем.

# cat filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev sockfs nodev pipefs nodev futexfs nodev tmpfs nodev inotifyfs nodev eventpollfs nodev devpts ext3 ext2 nodev ramfs msdos vfat iso9660 ntfs udf nodev mqueue nodev usbfs #

/proc/interrupts

Распределение прерываний.

# cat interrupts CPU0 0: 850627 XT-PIC timer 1: 9691 XT-PIC i8042 2: 0 XT-PIC cascade 7: 2 XT-PIC parport0 8: 1 XT-PIC rtc 9: 6620 XT-PIC acpi 11: 238626 XT-PIC Intel 82801DB-ICH4, yenta, yenta, eth0, eth1, ohci1394, ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb4, radeon@pci:0000:01:00.0 12: 65575 XT-PIC i8042 14: 11538 XT-PIC ide0 NMI: 0 LOC: 0 ERR: 0 MIS: 0 #

/proc/modules

Список загруженных модулей.

# cat modules irtty_sir 5248 0 - Live 0xf8a09000 sir_dev 13548 1 irtty_sir, Live 0xf8a1d000 irda 107768 1 sir_dev, Live 0xf8a3f000 crc_ccitt 1792 1 irda, Live 0xf8a04000 parport_pc 24324 0 - Live 0xf8a16000 parport 30920 1 parport_pc, Live 0xf8a0d000 uhci_hcd 30416 0 - Live 0xf89e7000 ehci_hcd 27656 0 - Live 0xf897a000 usbcore 103740 3 uhci_hcd,ehci_hcd, Live 0xf8990000 ohci1394 31092 0 - Live 0xf895e000 ieee1394 86392 1 ohci1394, Live 0xf891e000 ipw2100 78204 0 - Live 0xf8936000 ieee80211 18948 1 ipw2100, Live 0xf8918000 ieee80211_crypt 4488 1 ieee80211, Live 0xf88f8000 eepro100 26512 0 - Live 0xf8909000 pcmcia 30568 4 - Live 0xf8900000 firmware_class 7680 2 ipw2100,pcmcia, Live 0xf88f2000 yenta_socket 20748 4 - Live 0xf8879000 rsrc_nonstatic 11264 1 yenta_socket, Live 0xf8875000 pcmcia_core 34640 3 pcmcia,yenta_socket,rsrc_nonstatic, Live 0xf88e2000 #

/proc/mounts

Содержит список подключенных файловых систем.

# cat mounts rootfs / rootfs rw 0 0 /dev/root / ext3 rw 0 0 proc /proc proc rw,nodiratime 0 0 sysfs /sys sysfs rw 0 0 none /dev ramfs rw 0 0 /dev/hda5 /usr ext3 rw 0 0 /dev/hda6 /home ext3 rw 0 0 /dev/hda1 /mnt/win ntfs ro,noatime,nodiratime,uid=0,gid=0,fmask=0177,dmask=077,nls=iso8859-1, errors=continue,mft_zone_multiplier=1 0 0 devpts /dev/pts devpts rw 0 0 usbfs /proc/bus/usb usbfs rw 0 0 #

/proc/partitions

Содержит список разделов всех подключенных накопителей.

# cat partitions major minor #blocks name 3 0 58605120 hda 3 1 10485688 hda1 3 2 506520 hda2 3 3 9775080 hda3 3 4 1 hda4 3 5 9775048 hda5 3 6 28062688 hda6 #

/proc/pci

Список устройств, обнаруженных на шине PCI.

Этот файл можно использовать для диагностики причин, почему не работают некоторые устройства. Обращайте внимание на прерывания: если оно равно 0, это значит, что устройству по какой-либо причине не было выделено прерывание. Я не буду полностью приводить содержимое этого файла, он очень большой.

# cat pci PCI devices found: Bus 0, device 0, function 0: Host bridge: Intel Corporation 82855PM Processor to I/O Controller (rev 3). Prefetchable 32 bit memory at 0xd0000000 . Bus 0, device 1, function 0: PCI bridge: Intel Corporation 82855PM Processor to AGP Controller (rev 3). Master Capable. Latency=96. Min Gnt=12. Bus 0, device 29, function 0: USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 1). IRQ 11. I/O at 0x1800 . #

/proc/swaps

Содержит список подключенных swap файлов и разделов.

# cat swaps Filename Type Size Used Priority /dev/hda2 partition 506512 0 -1 #

/proc/version

Содержит информацию о версии операционной системы и ядра Linux.

# cat version Linux version 2.6.13-rc3-my (root@master) (gcc version 3.3.6) #3 Tue Jul 19 22:25:23 GMT+3 2005 #

Информация о процессах

Кроме файлов в /proc находятся директории, имеющие в качестве имени число. Каждая директория описывает процесс, PID которого соответствует имени директории. Файлы в этой директории описывают параметры процесса. Содержимое одной из директория приведено ниже.

# ls /proc/4624 auxv cwd@ exe@ maps mounts oom_score seccomp statm task/ cmdline environ fd/ mem oom_adj root@ stat status wchan #

Только несколько из приведенных в примере файлов содержат информацию, которая была бы понятна без предварительной обработки.

cmdline

Содержит аргументы командной строки.

# cat cmdline -su #

environ

Содержит значения переменных среды окружения процесса.

# cat environ HZ=100TERM=xtermPATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/binHOME=/rootSHELL=/bin/bashUSER=rootLOGNAME=rootMAIL=/var/spool/mail/root #

status

Содержит информацию о состоянии процесса в формате понятном человеку.

# cat status Name: bash State: S (sleeping) SleepAVG: 98% Tgid: 4510 Pid: 4510 PPid: 4498 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 256 Groups: 0 1 2 3 4 6 10 11 VmSize: 2832 kB VmLck: 0 kB VmRSS: 1724 kB VmData: 388 kB VmStk: 88 kB VmExe: 628 kB VmLib: 1628 kB VmPTE: 12 kB Threads: 1 SigQ: 0/7168 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000384004 SigCgt: 000000004b813efb CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff #

Другие директории

Коме директорий, описывающих процессы системы, в /proc могут находиться и другие директории. Ниже приведу назначение некоторых из них:

  • ide - информация об устройствах, подключенных к ide интерфейсу.
  • irq - информация о распределении прерываний.
  • net - информация о сети. Содержимое таблицы arp и таблицы маршрутизации. Статистика по сетевым интерфейсам и протоколом. И так далее.
  • scsi - информация о SCSI устройствах.
  • sys - содержит изменяемые параметры системы.

/proc/sys

Файловая система /proc/sys - это отдельная большая тема. При помощи файлов, находящихся в этой директории можно «на лету» изменять параметры системы. Достаточно записать нужное значение в определенный файл. Описывать /proc/sys я не буду, слишком много информации и слишком много надо знать, что бы понять для чего используются файлы. Поэтому я расскажу где найти документацию и описание по этой файловой системе:

  • В первую очередь - это документация к ядру. Она поставляется с исходными кодами ядра. Описание /proc/sys можно найти в файле Documentation/filesystems/proc.txt . Ей посвящена отдельная (и далеко не маленькая) глава.

Файловая система XFS показывает великолепную производительность при работе с большими файлами и изначально разрабатывалась для использования на дисках большого объема. Недостатком данной системы считалась недостаточная производительность на большом количестве мелких файлов. Однако последние патчи, сделанные разработчиками системы XFS , устраняют данный недостаток и поднимают скорость работы с мелкими файлами до уровня файловых систем ext4, ReiserFS.

Одно из преимуществ XFS – это наличие штатного дефрагментатора (чтобы там не говорили, а при копировании больших и огромных файлов дефрагментация может существенно снизить скорость).

Набор утилит для управления файловой системой XFS называется xfsprogs. Рассмотрим какие возможности по оптимизации дают эти утилиты.

Просмотр информации о расположении файла

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

В зависимости от особенностей использования, файлы на XFS ней могут довольно значительно фрагментироваться.

Чтобы посмотреть карту экстентов в которых хранится файл, используется следующая команда:

Xfs_bmap -v /media/video/football_cup_1993.avi

Она выводит примерно следующую информацию:

/media/video/football_cup_1993.avi: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: : 18748384..19010399 0 (18748384..19010399) 262016 1: : 771769344..772031487 2 (253665088..253927231) 262144 2: : 767587184..768111471 2 (249482928..250007215) 524288 3: : 738171688..739220263 2 (220067432..221116007) 1048576 4: : 880928368..882928575 3 (103771984..105772191) 2000208

Как видно файл /media/video/football_cup_1993.avi располагается в пяти экстентах.

Дефрагментация XFS

Для реорганизации расположения файлов (дефрагментации) используется команда xfs_fsr. Она может использоваться как для всего раздела, так и для отдельного файла. Для выполнения дефрагментации необходимо, чтобы на разделе было достаточно свободного места для копирования любого файла. По завершению операции каждый файл будет занимать один экстент.

Для дефрагментации всего раздела используется команда:

Xfs_fsr -v /dev/<раздел>

Дефрагментация отдельного файла выполняется командой:

Xfs_fsr -v <имя файла>

опция -v выводит дополнительную информацию.

Проверка степени фрагментации XFS

Информацию о фрагментации раздела можно получить командой:

Xfs_db -r -c frag /dev/<раздел>

Опция -r необходима для проверки раздела, который примонтирован и используется в данный момент. Опция -c frag нужна непосредственно для вывода информации о фрагментированности раздела.

Выбор файловой системы всегда вызывал жаркие споры среди приверженцев Linux, которые готовы бить свою грудь, пытаясь убедить своих оппонентов в том, что они абсолютно ошибаются. И это более чем понятно, поскольку, в отличие от Windows или macOS, пользователям которых гораздо реже приходится думать об этом в ходе повседневных компьютерных приключений, в этой операционной системе нет недостатка в различных вариантах файловой системы. Хотя ext используется по умолчанию для большинства дистрибутивов Linux, XFS вряд ли воспитывает заднюю часть и пользуется большой популярностью в мире Linux. Но что это за файловая система и как она отличается от ее коллег?

XFS - это, по сути, одна из старейших и самых зрелых файловых систем, доступных для Linux. Будучи разработанной Silicon Graphics и представленная в 1994 году с их операционной системой IRIX, в 2001 году она перешла на ядро ​​Linux с целью успешно справиться с огромными объемами данных. Формат был необязательным в течение длительного времени и был окончательно выбран по умолчанию для Red Hat Enterprise Linux 7 в 2014 году. В настоящее время он поддерживается большинством дистрибутивов Linux, в то время как RHEL, Oracle Linux 7, CentOS 7 и некоторые другие используют его как файловая система по умолчанию.

XFS - это 64-битная файловая система ведения журнала. Содержимое каждого файла в XFS хранится в блоках данных на диске. Чтобы эффективно записывать все выделенное и свободное пространство, XFS группирует эти блоки в смежные последовательности, называемые экстентами, которые могут быть решены файловой системой как отдельные единицы. Минимальный размер экстента - один блок, и он может расти по мере увеличения размера файла. Вся информация о файле (его метаданных) хранится в специальной структуре данных, называемой inode. Сама файловая система состоит из трех основных компонентов:

The data section используется для хранения всех метаданных файловой системы, а также пользовательских данных (кроме файлов реального времени). Этот раздел разделен на определенное количество групп распределения с равным размером (вы можете заранее определить их количество или размер - минимальный - 16 МБ, а максимальный - до терабайта). Каждая группа распределения может рассматриваться как отдельная файловая система, которая самостоятельно контролирует использование собственного пространства. Несколько групп распределения позволяют XFS одновременно обрабатывать многочисленные операции, избегая ухудшения производительности. Для отслеживания свободного места в каждой группе распределения используется пара специальных структур, называемых деревьями B +, узлы которых содержат информацию об исходном блоке каждой свободной области и ее размере в блоках. Тот же подход используется для отслеживания блоков данных и inodes, принадлежащих каждому файлу.

The log section содержит всю информацию для ведения журнала, которая записывается, когда любые изменения внесены в метаданные файловой системы и хранятся там до тех пор, пока они не будут выполнены: в случае внезапного сбоя или затемнения это позволяет завершить все операции, которые были выполнены в этот момент и таким образом сохранить согласованность файловой системы.

The real-time section хранит данные файлов в реальном времени - файлы, которые необходимо немедленно записать или обновить, без каких-либо задержек.

Такая конструкция делает XFS особенно полезной при обработке больших файлов и хранилищ. Максимальный размер файла в настоящий момент составляет 9 экзабайт, а один том может составлять до 18 экзабайт. Общее количество файлов не ограничено. Среди других сильных сторон этой файловой системы:

Journaling . Использование журналирования для операций метаданных гарантирует согласованность XFS даже после сбоя или потери мощности.

Delayed allocation . Данные в XFS не сразу записываются на жесткий диск, а хранятся в ОЗУ в течение некоторого времени, в то время как необходимое количество блоков данных просто резервируется. В конце концов, может получиться, что нет необходимости писать его вообще. Таким образом, XFS оптимизирует производительность записи и уменьшает фрагментацию файлов.

Preallocation . XFS резервирует дисковое пространство до того, как будут записаны блоки данных. Это также помогает избежать фрагментации файлов, поскольку полный файл становится более вероятным для записи в непрерывный ряд блоков на диске.

Sparse files . Если файл содержит фрагменты нулевых данных, вместо того, чтобы выделять для них дисковое пространство, система записывает только некоторые метаданные, представляющие эти пустые блоки, и, таким образом, позволяет избежать потери пространства на «нули».

Disk quotas. XFS поддерживает дисковые квоты, которые позволяют эффективно управлять дисковыми ресурсами, ограничивая количество файлов, созданных определенной группой пользователей / пользователей, или количество используемого пространства памяти.

Extended attributes . Расширенные атрибуты позволяют пользователю прикреплять произвольные метаданные (в виде пары имя-значение) к любому файлу или inode. В отличие от обычных атрибутов, которые строго определяются файловой системой, они могут содержать любую информацию, такую ​​как автор документа или цифровую подпись.

Advanced Input/Output . Использование нескольких групп распределения позволяет осуществлять высокоскоростные параллельные операции ввода-вывода.

Volume snapshots. Снимки позволяют создавать копию тома в определенный момент времени и при необходимости возвращать файловую систему обратно в это состояние.

Online defragmentation and resizing . Файловая система может быть дефрагментирована или увеличена при установке и активации.

Native backup/restore . XFS имеет встроенное резервное копирование и восстановление, которое может быть выполнено с помощью встроенных утилит xfsdump и xfsrestore. Более того, даже файлы, которые по какой-то причине не получили резервной копии, вопреки распространенному мнению, в случае потери данных имеют чрезвычайно высокие шансы на восстановление. Хотя некоторые специалисты утверждают, что потеря данных из XFS полностью невосстанавливается, многие средства восстановления данных, такие как UFS Explorer , Recovery Explorer и Raise Data Recovery , успешно справляются с этой задачей в течение многих лет.

Тем не менее, эта файловая система также имеет несколько недостатков. Прежде всего, раздел, отформатированный с помощью XFS, не может быть сокращен, хотя вы все равно можете сделать резервную копию, создать новую меньшую файловую систему и затем восстановить ее. Во-вторых, XFS не имеет встроенных методов сжатия данных. Более того, файловая система не использует контрольные суммы для обеспечения целостности сохраненных пользовательских данных и как можно скорее обнаруживает все гнилые биты, поэтому некоторые файлы могут бесшумно испортиться, и когда это наконец выйдет, возможно, уже слишком поздно для устранения проблемы, и огромная потеря данных будет неизбежной. Кроме того, XFS использует журналирование для метаданных, но не изменяет никаких изменений данных, поэтому в случае непредвиденного выключения системы вы, вероятно, потеряете данные из файлов, открытых в этот момент. Кроме того, если у вас есть система двойной загрузки Windows / Linux, Windows не сможет прочитать раздел в формате XFS без каких-либо дополнительных инструментов.

Чтобы узнать, поддерживает ли XFS ваш диск, используйте команду file с опцией -s, которая покажет информацию о типе файловой системы.

В целом, несмотря на отсутствие недостатков, XFS представляет собой довольно надежную и многофункциональную файловую систему, которая выделяется при управлении высокопроизводительными носителями. Если вам нужно хранить и получать доступ к большим файлам, XFS, вероятно, лучше всего.

XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).

Официальная информация на http://oss.sgi.com/projects/xfs/

XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.

Некоторые особенности:

    Более эффективно работает с большими файлами.

    Имеет возможность выноса журнала на другой диск, для повышения производительности.

    Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.

    В журнал записываются только мета-данные.

    Используются B+ trees.

    Используется логическое журналирование

11.6.4 Файловая система rfs

RFS (RaiserFS) - журналируемая файловая система разработанная Namesys.

Официальная информация на RaiserFS

Некоторые особенности:

    Более эффективно работает с большим количеством мелких файлов, в плане производительности и эффективности использования дискового пространства.

    Использует специально оптимизированные b* balanced tree (усовершенствованная версия B+ дерева)

    Динамически ассигнует i-узлы вместо их статического набора, образующегося при создании "традиционной" файловой системы.

    Динамические размеры блоков.

11.6.4 Файловая система jfs

JFS (Journaled File System) - журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.

Официальная информация на Journaled File System Technology for Linux

Некоторые особенности:

    Журналы JFS соответствуют классической модели транзакций, принятой в базах данных

    В журнал записываются только мета-данные

    Размер журнала не больше 32 мегабайт.

    Асинхронный режим записи в журнал - производится в моменты уменьшения трафика ввода/вывода

    Используется логическое журналирование.

11.7 Сравнительная таблица некоторых современных файловых систем

Хранение информации о файлах

Максимальный размер раздела

16 Эбайт (2 60)

4 гигаблоков (т.к. блоки динамические)

Размеры блоков

от 512 байт до 64 Кбайт

1 Кбайт - 4 Кбайт

До 64 Кбайт (сейчас фиксированы 4 Кбайт)

от 512 байт до 64 Кбайт

512/1024/ 2048/4096 байт

Максимальное число блоков

Максимальный размер файла

16 Тбайт (для 4Кбайт блоков)

4 Пбайт (2 50)

Максимальная длина имени файла

Журналирование

Управление свободными блоками

На основе битовой карты

B-деревья, индексированные по смещению и по размеру

Дерево+ Binary Buddy

Экстенты для свободного пространства

B-деревья для элементов каталогов

Как поддерево основного дерева файловой системы

B-деревья для адресации блоков файлов

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

Экстенты для адресации блоков файлов

Да (с 4 версии)

Данные внутри inode (небольшие файлы)

Данные симво-льных ссылок внутри inode

Элементы каталогов внутри inode (небольшие каталоги)

Динамическое выделение inode/MFT

Структуры управления динамически выделяемыми inode

Общее B*дерево

B+дерево с непрерывными областями inode

Поддержка разреженных файлов