- Файловые системы в Linux
- File systems (Русский)
- Contents
- Типы файловых систем
- Журналирование
- Файловые системы на основе FUSE
- Штабелируемые файловые системы
- Файловые системы только для чтения
- Кластерные файловые системы
- Определение существующих файловых систем
- Создание файловой системы
- Монтирование файловой системы
- Список смонтированных файловых систем
- Размонтирование файловой системы
Файловые системы в Linux
XFS — начало разработки 1993 год, фирма Silicon Graphics, в мае 2000 года предстала в GNU GPL, для пользователей большинства Linux систем стала доступна в 2001-2002 гг. Отличительная черта системы — прекрасная поддержка больших файлов и файловых томов, 8 эксбибайт — 1 байт (8*2 60 -1 байт) для 64-х битных систем. Ко всему прочему обладает другими немаловажными особенностями — непрерывные области дискового пространства, задержка выделения пространства и онлайн дефрагментация. Является одной из старейших журналируемых файловых систем для *nix, и содержит в себе наиболее отлаженный, в этом контексте, исходный код.
ReiserFS (Reiser3) — одна из первых журналируемых файловых систем под Linux, разработана Namesys. Имеет некоторые врождённые головные боли, но в целом неплохая система, ведущая отсчёт дней своих с 2001 года. Оговорюсь, что смысл журналируемых систем заключается в дисковых транзакциях, которые последовательно пишутся в специальную зону диска (журнал, он же лог), перед тем как данные попадают в конечные точки файловой системы. Максимальный объём тома для этой системы равен 16 тебибайт (16*2 40 байт).
JFS (Journaled File System) — файловая система, детище IBM, явившееся миру в далёком 1990 году для ОС AIX (Advanced Interactive eXecutive). В виде первого стабильного релиза, для пользователей Linux, система стала доступна в 2001 году. Из плюсов системы — неплохая масштабируемость. Из минусов — не особо активная поддержка на протяжении всего жизненного цикла. Максимальный рамер тома 32 пэбибайта (32*2 50 байт).
ext (extended filesystem) — появилась в апреле 1992 года, это была первая файловая система, изготовленная специально под нужды Linux ОС. Разработана Remy Card с целью преодолеть ограничения файловой системы Minix.
ext2 (second extended file system) — была разработана Remy Card в 1993 году. Не журналируемая файловая система, это был основной её недостаток, который исправит ext3.
ext3 (third extended filesystem) — по сути расширение исконной для Linux ext2, способное к журналированию. Разработана Стивеном Твиди (Stephen Tweedie) в 1999 году, включена в основное ядро Linux в ноябре 2001 года. На фоне других своих сослуживцев обладает более скромным размером пространства, до 4 тебибайт (4*2 40 байт) для 32-х разрядных систем. На данный момент является наиболее стабильной и поддерживаемой файловой системой в среде Linux.
Reiser4 — первая попытка создать файловую систему нового поколения для Linux. Впервые представленная в 2004 году, система включает в себя такие передовые технологии как транзакции, задержка выделения пространства, а так же встроенная возможность кодирования и сжатия данных. Ханс Рейзер (Hans Reiser), главный разработчик системы, рекламировал использовать своё детище непосредственно как БД с улучшенными метаданными. После того, как Ханс Рейзер был осуждён за убийство в 2008 году, дальнейшая судьба системы стала сомнительной.
ext4 — попытка создать 64-х битную ext3 способную поддерживать больший размер файловой системы (1 эксбибайт). Позже добавились возможности — непрерывные области дискового пространства, задержка выделения пространства, онлайн дефрагментация и прочие. Обеспечивается прямая совместимость с системой ext3 и ограниченная обратная совместимость при недоступной способности к непрерывным областям дискового пространства.
UPD: Btrfs (B-tree FS или Butter FS) — проект изначально начатый компанией Oracle, впоследствии поддержанный большинством Linux систем. Многие считаеют систему эдаким ответом на ZFS. Ключевыми особенностями данной файловой системы являются технологии: copy-on-write, позволяющая сделать снимки областей диска (снапшоты), которые могут пригодится для последующего восстановления; контроль за целостностью данных и метаданных (с повышенной гарантией целостности); сжатие данных; оптимизированный режим для накопителей SSD (задаётся при монтировании) и прочие. Немаловажным фактором является возможность перехода с ext3 на Btrfs. С августа 2008 года данная система выпускается под GNU GPL.
Tux2 — известная, но так и не анонсированная публично файловая система. Создатель Дэниэл Филипс (Daniel Phillips), система базируется на алгоритме «Фазового Дерева», который как и журналирование защищает файловую систему от сбоев. Организована как надстройка на ext2.
Tux3 — наступая на пятки Btrfs, представлена новая файловая система. Система создана на основе FUSE (Filesystem in Userspace), специального модуля для создания файловых систем на *nix платформах. Данный проект ставит перед собой цель избавиться от привычного журналирования, взамен предлагая версионное восстановление (состояние в определённый промежуток времени). Преимуществом используемой в данном случае версионной системы, является способ описания изменений, где для каждого файла создаётся изменённая копия, а не переписывается текущая версия. Такой подход позволяет более гибко управлять версиями.
UPD: Xiafs — задумка и разработка данной файловой системы принадлежат Frank Xia, основана на файловой системе MINIX. В настоящее время считается устаревшей и практически не используется. Наряду с ext2 разрабатывалась, как замена системе ext. В декабре 1993 года система была добавлена в стандартное ядро Linux. И хотя система обладала большей стабильностью и занимала меньше дискового пространства под контрольные структуры — она оказалась слабее ext2, ведущую роль сыграли ограничения максимальных размеров файла и раздела, а так же способность к дальнейшему расширению.
UPD: ZFS (Zettabyte File System) — изначально созданная в Sun Microsystems файловая система, для небезызвестной операционной системы Solaris в 2005 году. Отличительные особенности — отсутствие фрагментации данных как таковой, возможности по управлению снапшотами (snapshots), пулами хранения (storage pools), варьируемый размер блоков, 64-х разрядный механизм контрольных сумм, а так же способность адресовать 128 бит информации! В Linux системах может использоваться посредствам FUSE.
Источник
File systems (Русский)
Файловая система (англ. file system) — порядок, определяющий способ организации, хранения и именования данных на носителях информации в компьютерах, а также в другом электронном оборудовании: цифровых фотоаппаратах, мобильных телефонах и т.п. Файловая система определяет формат содержимого и способ физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имен файлов и (каталогов), максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.
Отдельные разделы дисков можно настроить с использованием одной из множества доступных файловых систем. У каждой есть свои преимущества, недостатки и уникальные особенности. Ниже приведен краткий обзор поддерживаемых файловых систем; также и ссылки на страницы Википедии, которые предоставляют гораздо больше информации.
Contents
Типы файловых систем
Смотрите filesystems(5) для общего обзора и Википедию:Сравнение файловых систем для подробного сравнения функций. Файловые системы, поддерживаемые ядром, перечислены в /proc/filesystems .
Файловая система | Команда создания | Утилиты пользовательского пространства | Archiso [1] | Документация ядра [2] | Заметки |
---|---|---|---|---|---|
Btrfs | mkfs.btrfs(8) | btrfs-progs | Да | btrfs.html | Статус стабильности |
VFAT | mkfs.vfat(8) | dosfstools | Да | vfat.html | |
exFAT | mkfs.exfat(8) | exfat-utils | Опционально | N/A (на основе FUSE) | |
F2FS | mkfs.f2fs(8) | f2fs-tools | Да | f2fs.html | Флэш-устройства |
ext3 | mke2fs(8) | e2fsprogs | Да ( base ) | ext3.html | |
ext4 | mke2fs(8) | e2fsprogs | Да ( base ) | ext4.html | |
HFS | mkfs.hfsplus(8) [устаревшая ссылка 2017-11-25] | hfsprogs AUR | Опционально | hfs.html | Файловая система MacOS |
JFS | mkfs.jfs(8) | jfsutils | Да ( base ) | jfs.html | |
NILFS2 | mkfs.nilfs2(8) | nilfs-utils | Да | nilfs2.html | |
NTFS | mkfs.ntfs(8) | ntfs-3g | Да | N/A (на основе FUSE) | Файловая система Windows |
Reiser4 | mkfs.reiser4(8) | reiser4progs AUR | Нет | ||
ReiserFS | mkfs.reiserfs(8) | reiserfsprogs | Да ( base ) | ||
XFS | mkfs.xfs(8) | xfsprogs | Да ( base ) | ||
ZFS | zfs-linux AUR | Нет | N/A (порт OpenZFS) |
Журналирование
Все вышеупомянутые файловые системы, за исключением ext2, FAT16/32, Btrfs и ZFS, используют ведение журнала. Журналирование обеспечивает отказоустойчивость путем регистрации изменений до того, как они будут привязаны к файловой системе. В случае сбоя системы или сбоя питания такие файловые системы быстрее возвращаются в сеть и реже становятся поврежденными. Ведение журнала происходит в выделенной области файловой системы.
Не все методы ведения журнала одинаковы. Ext3 и ext4 предлагают журналирование в режиме данных, в котором регистрируются как данные, так и метаданные, а также возможность вести журнал только изменений метаданных. Журналирование в режиме данных имеет ограничение скорости и не включено по умолчанию. В том же ключе Reiser4 предлагает так называемые «модели транзакций», которые включают в себя чистое ведение журнала (эквивалентное журнальному ведению журнала данных ext4), чистый подход копирования при записи (эквивалент по умолчанию btrfs) и комбинированный подход, который эвристически чередуется между двумя бывшими.
Другие файловые системы обеспечивают упорядоченное ведение журнала, которое регистрирует только метаданные. Хотя все журналирование вернет файловую систему в допустимое состояние после сбоя, журналирование в режиме данных обеспечивает максимальную защиту от повреждений и потери данных. Однако есть компромисс в производительности системы, поскольку журналирование в режиме данных выполняет две операции записи: сначала в журнал, а затем на диск. При выборе типа файловой системы следует учитывать компромисс между скоростью системы и безопасностью данных.
Файловые системы, основанные на механизме копирования при записи, такие как Btrfs и ZFS, не должны использовать традиционный журнал для защиты метаданных, потому что они никогда не обновляются на месте. Хотя Btrfs все еще имеет журнальное дерево, подобное журналу, оно используется только для ускорения работы fdatasync/fsync.
Файловые системы на основе FUSE
Файловая система в пользовательском пространстве (FUSE) — это механизм для Unix-подобных операционных систем, который позволяет не-привилегированным пользователям создавать свои собственные файловые системы без редактирования кода ядра. Это достигается путем запуска кода файловой системы в пространстве пользователя, в то время как модуль ядра FUSE предоставляет только «мост» для реальных интерфейсов ядра.
Некоторые файловые системы на основе FUSE:
Штабелируемые файловые системы
- aufs — усовершенствованная многоуровневая файловая система унификации, объединенная файловая система на основе FUSE, полностью переписанная Unionfs, отклоненная от основной линии Linux, и вместо этого OverlayFS был объединен в ядро Linux.
http://aufs.sourceforge.net || linux-aufsAUR
- eCryptfs — корпоративная криптографическая файловая система представляет собой пакет программного обеспечения для шифрования диска Linux. Он реализует шифрование на уровне файловой системы, совместимый с POSIX, с целью предложить функциональность, аналогичную функции GnuPG на уровне операционной системы.
https://ecryptfs.org || ecryptfs-utils
- mergerfs — объединенная файловая система на основе FUSE.
https://github.com/trapexit/mergerfs || mergerfsAUR
- mhddfs — файловая система Multi-HDD FUSE, объединенная на основе FUSE.
http://mhddfs.uvw.ru || mhddfsAUR
- overlayfs — это служба файловой системы для Linux, которая реализует объединение для монтирования других файловых систем.
https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html || linux
- Unionfs — это служба файловой системы для Linux, FreeBSD и NetBSD, которая реализует объединение монтирования для других файловых систем.
https://unionfs.filesystems.org/ || not packaged? search in AUR
- unionfs-fuse — реализация пользовательского пространства Unionfs.
https://github.com/rpodgorny/unionfs-fuse || unionfs-fuse
Файловые системы только для чтения
- SquashFS — сжимающая файловая система для GNU/Linux, предоставляющая доступ к данным в режиме «только для чтения». Squashfs сжимает файлы, индексные дескрипторы и каталоги, а также поддерживает блоки размером до 1024 Кбайт для лучшего сжатия.
http://squashfs.sourceforge.net/ || squashfs-tools
Кластерные файловые системы
- Ceph — унифицированная распределенная система хранения, предназначенная для отличной производительности, надежности и масштабируемости.
https://ceph.com/ || ceph
- Glusterfs — кластерная файловая система способна масштабироваться до нескольких пета-байт.
https://www.gluster.org/ || glusterfs
- IPFS — одноранговый протокол гипермедиа, чтобы сделать Интернет более быстрым, безопасным и открытым. IPFS нацелена на замену HTTP и создание лучшей сети для всех нас. Использует блоки для хранения частей файла, каждый сетевой узел хранит только интересующий контент, обеспечивает дедупликацию, распространение, масштабируемую систему, ограниченную только пользователями. (В настоящее время в aplha)
https://ipfs.io/ || go-ipfs
- MooseFS — это отказоустойчивая, высокодоступная и высокопроизводительная сетевая распределенная файловая система.
https://www.gluster.org/ || moosefs
- OpenAFS — реализация с открытым исходным кодом распределенной файловой системы AFS
https://www.openafs.org || openafsAUR
- OrangeFS — это масштабируемая сетевая файловая система, предназначенная для прозрачного доступа к дисковой памяти на нескольких серверах параллельно. Имеет оптимизированную поддержку MPI-IO для параллельных и распределенных приложений. Упрощает использование параллельного хранения не только для клиентов Linux, но и для Windows, Hadoop и WebDAV. POSIX-совместимая. Часть ядра Linux, начиная с версии 4.6.
https://www.orangefs.org/ || not packaged? search in AUR
- Sheepdog — распределенная система хранения объектов для объемных и контейнерных сервисов и разумно управляет дисками и узлами.
https://sheepdog.github.io/sheepdog/ || not packaged? search in AUR
- Tahoe-LAFS — файловая система Thahoe Least-Authority — это бесплатное и открытое, безопасное, децентрализованное, отказоустойчивое, одноранговое распределенное хранилище данных и распределенная файловая система.
https://tahoe-lafs.org/ || tahoe-lafsAUR
Определение существующих файловых систем
Чтобы определить существующие файловые системы, вы можете использовать lsblk:
Существующая файловая система, если она есть, будет показана в столбце FSTYPE . Если она смонтирована, тогда появится в столбце MOUNTPOINT .
Создание файловой системы
Файловые системы обычно создаются на разделе, внутри логических контейнеров, таких как LVM, RAID и dm-crypt, или в обычном файле (смотрите w:Loop device). В этом разделе описывается случай раздела.
Прежде чем продолжить, определите устройство, в котором будет создана файловая система, и независимо от того, монтируется ли она. Например:
Перед продолжением необходимо размонтировать файловые системы. В приведенном выше примере существующая файловая система находится на /dev/sda2 и монтируется в /mnt . Он будет размонтирован командой:
Чтобы найти только смонтированные файловые системы, смотрите #Список смонтированных файловых систем.
Чтобы создать новую файловую систему, используйте mkfs(8) . Смотрите #Типы файловых систем для точного типа, а также утилиты пользовательского пространства, которые вы, возможно, захотите установить для конкретной файловой системы.
Например, чтобы создать новую файловую систему типа ext4 (обычно для разделов данных Linux) на /dev/sda1 , запустите:
Новая файловая система теперь может быть смонтирована в выбранный каталог.
Монтирование файловой системы
Чтобы вручную смонтировать файловую систему, расположенную на устройстве (например, раздел) к каталогу, используйте mount(8) . В этом примере монтируется /dev/sda1 в /mnt .
Это прикрепляет файловую систему раздела /dev/sda1 в каталог /mnt , делая содержимое файловой системы видимым. Любые данные, существовавшие в /mnt перед этим действием, становятся невидимыми до тех пор, пока устройство не будет размонтировано.
fstab содержит информацию о том, как устройства должны автоматически монтироваться, если они присутствуют. Для получения дополнительной информации о том, как изменить это поведение, смотрите статью fstab.
Если устройство указано в /etc/fstab , и в командной строке указывается только устройство или точки монтирования, эта информация будет использоваться при монтирование. Например, если /etc/fstab содержит строку, указывающую, что /dev/sda1 должен быть смонтирован в /mnt , тогда он автоматически будет монтировать это устройство к этому месту:
mount содержит несколько параметров, многие из которых зависят от указанной файловой системы. Параметры могут быть изменены:
- использование флагов в командной строке с mount
- редактирование fstab
- создание правил udev
- самостоятельно компилировать ядро
- или используя скрипты монтирования файловой системы (расположенные по адресу /usr/bin/mount.* ).
Более подробную информацию смотрите в связанных статьях и статье интересующей файловой системы.
Список смонтированных файловых систем
Чтобы просмотреть все смонтированные файловые системы, используйте findmnt(8) :
findmnt принимает множество аргументов, которые могут фильтровать вывод и отображать дополнительную информацию. Например, в качестве аргумента может принимать устройство или точку монтирования для отображения только информации о том, что указывается:
findmnt собирает информацию из /etc/fstab , /etc/mtab и /proc/self/mounts .
Размонтирование файловой системы
Чтобы размонтировать файловую систему, используйте umount(8) . Можно указать либо устройство, содержащее файловую систему (например, /dev/sda1 ), либо точку монтирования (например, /mnt ):
Источник