- File systems (Русский)
- Contents
- Типы файловых систем
- Журналирование
- Файловые системы на основе FUSE
- Штабелируемые файловые системы
- Файловые системы только для чтения
- Кластерные файловые системы
- Определение существующих файловых систем
- Создание файловой системы
- Монтирование файловой системы
- Список смонтированных файловых систем
- Размонтирование файловой системы
- File systems
- Contents
- Types of file systems
- Journaling
- FUSE-based file systems
- Stackable file systems
- Read-only file systems
- Clustered file systems
- Shared-disk file system
- Identify existing file systems
- Create a file system
- Mount a file system
- List mounted file systems
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 ):
Источник
File systems
In computing, a file system or filesystem controls how data is stored and retrieved. Without a file system, information placed in a storage medium would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into pieces and giving each piece a name, the information is easily isolated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a «file». The structure and logic rules used to manage the groups of information and their names is called a «file system».
Individual drive partitions can be setup using one of the many different available filesystems. Each has its own advantages, disadvantages, and unique idiosyncrasies. A brief overview of supported filesystems follows; the links are to Wikipedia pages that provide much more information.
Contents
Types of file systems
The factual accuracy of this article or section is disputed.
See filesystems(5) for a general overview and Wikipedia:Comparison of file systems for a detailed feature comparison. File systems supported by the kernel are listed in /proc/filesystems .
File system | Creation command | Userspace utilities | Archiso [1] | Kernel documentation [2] | Notes |
---|---|---|---|---|---|
Btrfs | mkfs.btrfs(8) | btrfs-progs | Yes | btrfs.html | Stability status |
VFAT | mkfs.fat(8) | dosfstools | Yes | vfat.html | Windows 9x file system |
exFAT | mkfs.exfat(8) | exfatprogs | Yes | Native file system in Linux 5.4. [3] | |
mkexfatfs(8) | exfat-utils | No | N/A (FUSE-based) | ||
F2FS | mkfs.f2fs(8) | f2fs-tools | Yes | f2fs.html | Flash-based devices |
ext3 | mkfs.ext3(8) | e2fsprogs | Yes | ext3.html | |
ext4 | mkfs.ext4(8) | e2fsprogs | Yes | ext4.html | |
HFS | mkfs.hfsplus(8) | hfsprogs AUR | No | hfs.html | Classic Mac OS file system |
HFS+ | mkfs.hfsplus(8) | hfsprogs AUR | No | hfsplus.html | macOS (8–10.12) file system |
JFS | mkfs.jfs(8) | jfsutils | Yes | jfs.html | |
NILFS2 | mkfs.nilfs2(8) | nilfs-utils | Yes | nilfs2.html | Raw flash devices, e.g. SD card |
NTFS | No | ntfs.html | Windows NT file system. Kernel’s in-built driver has very limited write support. officially supported kernels are built without CONFIG_NTFS_FS so this driver is not available. | ||
mkfs.ntfs(8) | ntfs-3g | Yes | N/A (FUSE-based) | FUSE driver with extended capabilities. | |
ReiserFS | mkfs.reiserfs(8) | reiserfsprogs | Yes | ||
UDF | mkfs.udf(8) | udftools | Yes | udf.html | |
XFS | mkfs.xfs(8) | xfsprogs | Yes |
File system | Creation command | Kernel patchset | Userspace utilities | Notes |
---|---|---|---|---|
APFS | mkapfs(8) | linux-apfs-rw-dkms-git AUR | apfsprogs-git AUR | macOS (10.13 and newer) file system. Read only, experimental. |
Bcachefs | bcachefs(8) | linux-bcachefs-git AUR | bcachefs-tools-git AUR | |
NTFS3 | ntfs3-dkms AUR | Paragon NTFS3 driver FAQ | ||
Reiser4 | mkfs.reiser4(8) | reiser4progs AUR | ||
ZFS | zfs-linux AUR , zfs-dkms AUR | zfs-utils AUR | OpenZFS port |
Journaling
All the above filesystems with the exception of exFAT, ext2, FAT16/32, Reiser4 (optional), Btrfs and ZFS, use journaling. Journaling provides fault-resilience by logging changes before they are committed to the filesystem. In the event of a system crash or power failure, such file systems are faster to bring back online and less likely to become corrupted. The logging takes place in a dedicated area of the filesystem.
Not all journaling techniques are the same. Ext3 and ext4 offer data-mode journaling, which logs both data and meta-data, as well as possibility to journal only meta-data changes. Data-mode journaling comes with a speed penalty and is not enabled by default. In the same vein, Reiser4 offers so-called «transaction models» which not only change the features it provides, but in its journaling mode. It uses a different journaling techniques: a special model called wandering logs which eliminates the need to write to the disk twice, write-anywhere—a pure copy-on-write approach (mostly equivalent to btrfs’ default but with a fundamentally different «tree» design) and a combined approach called hybrid which heuristically alternates between the two former.
The other filesystems provide ordered-mode journaling, which only logs meta-data. While all journaling will return a filesystem to a valid state after a crash, data-mode journaling offers the greatest protection against corruption and data loss. There is a compromise in system performance, however, because data-mode journaling does two write operations: first to the journal and then to the disk (which Reiser4 avoids with its «wandering logs» feature). The trade-off between system speed and data safety should be considered when choosing the filesystem type. Reiser4 is the only filesystem that by design operates on full atomicity and also provides checksums for both meta-data and inline data (operations entirely occur, or they entirely do not and does not corrupt or destroy data due to operations half-occurring) and by design is therefore much less prone to data loss than other file systems like Btrfs.
Filesystems based on copy-on-write (also known as write-anywhere), such as Reiser4, Btrfs and ZFS, have no need to use traditional journal to protect metadata, because they are never updated in-place. Although Btrfs still has a journal-like log tree, it is only used to speed-up fdatasync/fsync.
FUSE-based file systems
Stackable file systems
- aufs — Advanced Multi-layered Unification Filesystem, a FUSE based union filesystem, a complete rewrite of Unionfs, was rejected from Linux mainline and instead OverlayFS was merged into the Linux Kernel.
http://aufs.sourceforge.net || linux-aufsAUR
- eCryptfs — The Enterprise Cryptographic Filesystem is a package of disk encryption software for Linux. It is implemented as a POSIX-compliant filesystem-level encryption layer, aiming to offer functionality similar to that of GnuPG at the operating system level.
https://ecryptfs.org || ecryptfs-utils
- mergerfs — a FUSE based union filesystem.
https://github.com/trapexit/mergerfs || mergerfsAUR
- mhddfs — Multi-HDD FUSE filesystem, a FUSE based union filesystem.
http://mhddfs.uvw.ru || mhddfsAUR
- overlayfs — OverlayFS is a filesystem service for Linux which implements a union mount for other file systems.
https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html || linux
- Unionfs — Unionfs is a filesystem service for Linux, FreeBSD and NetBSD which implements a union mount for other file systems.
https://unionfs.filesystems.org/ || not packaged? search in AUR
- unionfs-fuse — A user space Unionfs implementation.
https://github.com/rpodgorny/unionfs-fuse || unionfs-fuse
Read-only file systems
- EROFS — Enhanced Read-Only File System is a lightweight read-only file system, it aims to improve performance and compress storage capacity.
https://www.kernel.org/doc/html/latest/filesystems/erofs.html || erofs-utils
- SquashFS — SquashFS is a compressed read only filesystem. SquashFS compresses files, inodes and directories, and supports block sizes up to 1 MB for greater compression.
https://github.com/plougher/squashfs-tools || squashfs-tools
Clustered file systems
- Ceph — Unified, distributed storage system designed for excellent performance, reliability and scalability.
https://ceph.com/ || ceph
- Glusterfs — Cluster file system capable of scaling to several peta-bytes.
https://www.gluster.org/ || glusterfs
- IPFS — A peer-to-peer hypermedia protocol to make the web faster, safer, and more open. IPFS aims replace HTTP and build a better web for all of us. Uses blocks to store parts of a file, each network node stores only content it is interested, provides deduplication, distribution, scalable system limited only by users. (currently in alpha)
https://ipfs.io/ || go-ipfs
- MooseFS — MooseFS is a fault tolerant, highly available and high performance scale-out network distributed file system.
https://moosefs.com || moosefs
- OpenAFS — Open source implementation of the AFS distributed file system
https://www.openafs.org || openafsAUR
- OrangeFS — OrangeFS is a scale-out network file system designed for transparently accessing multi-server-based disk storage, in parallel. Has optimized MPI-IO support for parallel and distributed applications. Simplifies the use of parallel storage not only for Linux clients, but also for Windows, Hadoop, and WebDAV. POSIX-compatible. Part of Linux kernel since version 4.6.
https://www.orangefs.org/ || not packaged? search in AUR
- Sheepdog — Distributed object storage system for volume and container services and manages the disks and nodes intelligently.
https://sheepdog.github.io/sheepdog/ || sheepdogAUR
- Tahoe-LAFS — Tahoe Least-Authority Filesystem is a free and open, secure, decentralized, fault-tolerant, peer-to-peer distributed data store and distributed file system.
https://tahoe-lafs.org/ || tahoe-lafsAUR
Shared-disk file system
- GFS2 — GFS2 allows all members of a cluster to have direct concurrent access to the same shared block storage
https://pagure.io/gfs2-utils || gfs2-utilsAUR
- OCFS2 — The Oracle Cluster File System (version 2) is a shared disk file system developed by Oracle Corporation and released under the GNU General Public License
https://oss.oracle.com/projects/ocfs2/ || ocfs2-toolsAUR
- VMware VMFS — VMware’s VMFS (Virtual Machine File System) is used by the company’s flagship server virtualization suite, vSphere.
https://www.vmware.com/products/vi/esx/vmfs.html || vmfs-toolsAUR
Identify existing file systems
To identify existing file systems, you can use lsblk:
An existing file system, if present, will be shown in the FSTYPE column. If mounted, it will appear in the MOUNTPOINT column.
Create a file system
File systems are usually created on a partition, inside logical containers such as LVM, RAID and dm-crypt, or on a regular file (see Wikipedia:Loop device). This section describes the partition case.
Before continuing, identify the device where the file system will be created and whether or not it is mounted. For example:
Mounted file systems must be unmounted before proceeding. In the above example an existing filesystem is on /dev/sda2 and is mounted at /mnt . It would be unmounted with:
To find just mounted file systems, see #List mounted file systems.
To create a new file system, use mkfs(8) . See #Types of file systems for the exact type, as well as userspace utilities you may wish to install for a particular file system.
For example, to create a new file system of type ext4 (common for Linux data partitions) on /dev/sda1 , run:
The new file system can now be mounted to a directory of choice.
Mount a file system
To manually mount filesystem located on a device (e.g., a partition) to a directory, use mount(8) . This example mounts /dev/sda1 to /mnt .
This attaches the filesystem on /dev/sda1 at the directory /mnt , making the contents of the filesystem visible. Any data that existed at /mnt before this action is made invisible until the device is unmounted.
fstab contains information on how devices should be automatically mounted if present. See the fstab article for more information on how to modify this behavior.
If a device is specified in /etc/fstab and only the device or mount point is given on the command line, that information will be used in mounting. For example, if /etc/fstab contains a line indicating that /dev/sda1 should be mounted to /mnt , then the following will automatically mount the device to that location:
mount contains several options, many of which depend on the file system specified. The options can be changed, either by:
- using flags on the command line with mount
- editing fstab
- creating udev rules
- compiling the kernel yourself
- or using filesystem-specific mount scripts (located at /usr/bin/mount.* ).
See these related articles and the article of the filesystem of interest for more information.
List mounted file systems
To list all mounted file systems, use findmnt(8) :
findmnt takes a variety of arguments which can filter the output and show additional information. For example, it can take a device or mount point as an argument to show only information on what is specified:
findmnt gathers information from /etc/fstab , /etc/mtab , and /proc/self/mounts .
Источник