File systems (Русский) - ArchWiki

Jump to content

# File systems (Русский)

7 languages

- English
- Español
- Italiano
- 日本語
- Português
- Українська
- 中文（简体）

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи File systems. Дата последней синхронизации: 28 января 2024. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Разметка дисков
- Файл устройства#lsblk
- Разрешения и атрибуты файлов
- fsck (Русский)
- fstab (Русский)
- List of applications/Utilities#Mount tools
- QEMU#Mounting a partition from a raw image
- udev (Русский)
- udisks (Русский)
- umask (Русский)
- USB-накопители

Из Википедии:

  Фа́йловая систе́ма (англ. file system) — порядок, определяющий способ организации, хранения и именования данных на носителях информации в компьютерах, а также в другом электронном оборудовании: цифровых фотоаппаратах, мобильных телефонах и т. п. Файловая система определяет формат содержимого и способ физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имен файлов (и каталогов), максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.

Отдельные разделы дисков можно настроить с использованием одной из множества доступных файловых систем. У каждой есть свои преимущества, недостатки и уникальные особенности. Ниже приведён краткий обзор поддерживаемых файловых систем; также и ссылки на страницы Википедии, которые предоставляют гораздо больше информации.

## Типы файловых систем

Смотрите filesystems(5) для общего обзора и сравнение файловых систем в Википедии для подробного сравнения функций. Файловые системы, поддержка которых встроена в ядро или для которых загружены модули, перечислены в `/proc/filesystems`. Список доступных модулей, предоставляющих поддержку для различных файловых систем, можно посмотреть с помощью команды `ls /lib/modules/$(uname -r)/kernel/fs`.

Встроенные (in-tree) и FUSE файловые системы
Файловая система | Команда создания | Утилиты пользовательского пространства | Archiso [1] | Документация ядра [2] | Примечания
--- | --- | --- | --- | --- | ---
Bcachefs | bcachefs(8) | bcachefs-tools | Да |  | Доступна в Linux 6.7+, экспериментальная
Btrfs | mkfs.btrfs(8) | btrfs-progs | Да | btrfs.html | Статус стабильности
VFAT | mkfs.fat(8) | dosfstools | Да | vfat.html | Файловая система Windows 9x
exFAT | mkfs.exfat(8) | exfatprogs | Да |  | Поддержка встроена в Linux с версии 5.4 [3]
mkexfatfs(8) | exfat-utils | Нет | н/д (на основе FUSE) |
F2FS | mkfs.f2fs(8) | f2fs-tools | Да | f2fs.html | Ориентирована на использование с флеш-памятью
ext3 | mkfs.ext3(8) | e2fsprogs | Да | ext3.html |
ext4 | mkfs.ext4(8) | e2fsprogs | Да | ext4.html |
HFS | mkfs.hfsplus(8) | hfsprogsAUR | Нет | hfs.html | Файловая система классической Mac OS
HFS+ | mkfs.hfsplus(8) | hfsprogsAUR | Нет | hfsplus.html | Файловая система macOS (8–10.12)
JFS | mkfs.jfs(8) | jfsutils | Да | jfs.html |
NILFS2 | mkfs.nilfs2(8) | nilfs-utils | Да | nilfs2.html | Для использования с raw-доступом к флеш-памяти, например для SD-карт
NTFS |  |  | Да | ntfs3.html | Файловая система Windows NT. Новый драйвер, встроенный в Linux с версии 5.15.
| ntfs-3g[4] | Нет | ntfs.html[устаревшая ссылка 2024-07-30 ⓘ] | Старый драйвер. Имеет очень ограниченную поддержку записи. Официальные ядра собираются без `CONFIG_NTFS_FS`, поэтому этот драйвер недоступен.
mkfs.ntfs(8) | Да | н/д (на основе FUSE) | FUSE-драйвер с дополнительными возможностями.
ReiserFS | mkfs.reiserfs(8) | reiserfsprogsAUR | Да |  | ReiserFS объявлена устаревшей в Linux 5.18 и будет удалена в 2025 году.
UDF | mkfs.udf(8) | udftools | Да | udf.html |
XFS | mkfs.xfs(8) | xfsprogs | Да | xfs.html xfs-delayed-logging-design.html[устаревшая ссылка 2024-03-03 ⓘ] xfs-self-describing-metadata.html[устаревшая ссылка 2024-03-03 ⓘ] | Нельзя уменьшить размер

Сторонние (out-of-tree) файловые системы
Файловая система | Команда создания | Патчи для ядра | Утилиты пользовательского пространства | Примечания
--- | --- | --- | --- | ---
APFS | mkapfs(8) | linux-apfs-rw-dkms-gitAUR | apfsprogs-gitAUR | Файловая система macOS (10.13 и новее). Поддержка экспериментальная, только для чтения. Смотрите также apfs-fuse-gitAUR — FUSE-версия.
Reiser4 | mkfs.reiser4(8) |  | reiser4progsAUR |
ZFS |  | zfs-linuxAUR, zfs-dkmsAUR | zfs-utilsAUR | Порт OpenZFS

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

Все вышеупомянутые файловые системы, за исключением ext2, FAT16/32, Reiser4 (опционально), Bcachefs, Btrfs и ZFS, используют ведение журнала. Журналирование обеспечивает отказоустойчивость путём записывания изменений в журнал перед фактическим изменением файловой системы. В случае сбоя системы или сбоя питания такие файловые системы быстрее возвращаются в работу и реже оказываются повреждёнными. Ведение журнала происходит в отдельной области файловой системы.

Не все методы ведения журнала одинаковы. Ext3 и ext4 предлагают журналирование в режиме данных, при котором в журнал записываются как данные, так и метаданные, а также возможность вести журнал только изменений метаданных. Журналирование в режиме данных снижает скорость и не включено по умолчанию. В том же ключе Reiser4 предлагает так называемые «модели транзакций», которые меняют не только предоставляемые возможности, но и режим журналирования. В ней используются различные методы журналирования: специальная модель «блуждающих журналов» («wandering logs»), избавляющая от необходимости записывать данные на диск дважды, «запись везде» («write-anywhere») — чистое копирование при записи (в основном эквивалентное используемому по умолчанию Btrfs, но с принципиально иной конструкцией «дерева») и комбинированный подход, который эвристически чередует два первых.

Примечание: Reiser4 обеспечивает поведение журналирования, почти эквивалентное стандартному поведению ext4 (только метаданные), с помощью плагина node41, который также поддерживает метаданные и встроенные контрольные суммы, а также поведение «блуждающих журналов», которое он предоставляет, в зависимости от того, какая модель транзакций выбрана во время монтирования.

Другие файловые системы обеспечивают упорядоченное ведение журнала (ordered-mode), при котором записываются только метаданные. Хотя любое журналирование позволяет восстановить файловую систему после сбоя, журналирование в режиме данных обеспечивает максимальную защиту от повреждений и потери данных. Однако это влияет на производительность системы, поскольку журналирование в режиме данных выполняет две операции записи: сначала в журнал, а затем на диск (Reiser4 избегает это с помощью «блуждающих журналов»). При выборе типа файловой системы следует учитывать компромисс между скоростью системы и безопасностью данных. Reiser4 — единственная файловая система, которая реализует полную атомарность, а также контрольные суммы как для метаданных, так и для встроенных данных (операции либо полностью выполняются, либо полностью не выполняются, не повреждая данные наполовину выполненной операцией) и поэтому гораздо менее подвержена потере данных, чем другие файловые системы, например Btrfs.

Файловые системы, основанные на механизме копирования при записи (copy-on-write или write-anywhere), такие как Reiser4, Bcachefs, Btrfs и ZFS, не нуждаются в использовании традиционного журнала для защиты метаданных, потому что они никогда не обновляют данные в том же месте. Хотя Btrfs всё ещё имеет дерево, подобное журналу, оно используется только для ускорения работы fdatasync/fsync.

### Файловые системы на основе FUSE

Смотрите статью FUSE (Русский).

### Штабелируемые файловые системы

- 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://docs.kernel.org/filesystems/overlayfs.html || linux

- unionfs-fuse — реализация пользовательского пространства Unionfs.

  https://github.com/rpodgorny/unionfs-fuse || unionfs-fuseAUR

### Файловые системы только для чтения

- EROFS — Enhanced Read-Only File System — легковесная файловая система только для чтения, направленная на улучшение производительности и сжатия.

  https://docs.kernel.org/filesystems/erofs.html || erofs-utils

- SquashFS — Файловая система, хранящая данные в сжатом виде только для чтения. SquashFS сжимает файлы, индексные дескрипторы и каталоги, а также поддерживает блоки размером до 1 МиБ для лучшего сжатия.

  https://github.com/plougher/squashfs-tools || squashfs-tools

### Кластерные файловые системы

- BeeGFS — Параллельная файловая система, разработанная и оптимизированная для высокопроизводительных вычислений.

  https://www.beegfs.io/c/ || beegfs-clientAUR

- Ceph — Унифицированная распределённая система хранения, разработанная для отличной производительности, надёжности и масштабируемости.

  https://ceph.com/ || cephAUR

- Glusterfs — Кластерная файловая система, способная масштабироваться до нескольких петабайт.

  https://www.gluster.org/ || glusterfs

- IPFS — Одноранговый протокол гипермедиа, чтобы сделать Интернет более быстрым, безопасным и открытым. IPFS нацелена на замену HTTP и создание лучшей сети для всех нас. Использует блоки для хранения частей файла, каждый сетевой узел хранит только интересующий контент, обеспечивает дедупликацию, распространение, масштабируемую систему, ограниченную только пользователями. (В настоящее время в alpha)

  https://ipfs.io/ || kubo

- MinIO — Высокопроизводительное объектное хранилище, совместимое с S3.

  https://min.io || minio

- MooseFS — Отказоустойчивая, высокодоступная и высокопроизводительная сетевая распределённая файловая система.

  https://moosefs.com || 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/ || sheepdogAUR

- Tahoe-LAFS — Tahoe Least-Authority File Store — это бесплатное и открытое, безопасное, децентрализованное, отказоустойчивое, одноранговое распределённое хранилище данных и распределённая файловая система.

  https://tahoe-lafs.org/ || tahoe-lafsAUR[ссылка недействительна: package not found]

### Файловые системы с общим доступом к диску

- GFS2 — GFS2 позволяет всем участникам кластера иметь прямой параллельный доступ к одному и тому же общему блочному хранилищу.

  https://pagure.io/gfs2-utils || gfs2-utilsAUR

- OCFS2 — The Oracle Cluster File System (версия 2) — файловая система с общим дисковым пространством, разработанная корпорацией Oracle и выпущенная под лицензией GNU GPL.

  https://oss.oracle.com/projects/ocfs2/ || ocfs2-toolsAUR

- VMware VMFS — Virtual Machine File System — используется во vSphere — флагманском пакете компании для виртуализации серверов.

  https://www.vmware.com/products/vi/esx/vmfs.html[устаревшая ссылка 2024-07-30 ⓘ] || vmfs-toolsAUR

## Определение существующих файловых систем

Чтобы определить существующие файловые системы, вы можете использовать lsblk:

    $ lsblk -f

    NAME   FSTYPE LABEL     UUID                                 MOUNTPOINT
    sdb
    └─sdb1 vfat   Transcend 4A3C-A9E9

Существующая файловая система, если она есть, будет показана в столбце `FSTYPE`. Если она смонтирована, то она появится в столбце `MOUNTPOINT`.

## Создание файловой системы

Файловые системы обычно создаются на разделе, внутри логических контейнеров, таких как LVM, RAID и dm-crypt, или в обычном файле (смотрите Wikipedia:Loop device). В этом разделе описывается создание файловой системы на разделе.

Примечание: Можно создать файловую систему без разделов на всём диске целиком, что называют «superfloppy» или неразмеченный (безраздельный, partitionless) диск. С этим методом связаны определённые ограничения, особенно при загрузке с такого диска. Пример есть в разделе Btrfs (Русский)#Диск Btrfs без разделов.
Важно:

- После создания новой файловой системы данные, ранее сохраненные на этом разделе, вряд ли можно будет восстановить. Создайте резервную копию любых данных, которые вы хотите сохранить.
- Цель использования раздела может ограничить выбор файловой системы. Например, системный раздел EFI должен содержать файловую систему FAT32, а файловая система, содержащая каталог `/boot`, должна поддерживаться используемым вами загрузчиком.

Прежде чем продолжить, определите устройство, в котором будет создана файловая система, и проверьте, не примонтировано ли оно. Например:

    $ lsblk -f

    NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
    sda
    ├─sda1                      C4DA-2C4D
    ├─sda2 ext4                 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt
    └─sda3                      56adc99b-a61e-46af-aab7-a6d07e504652

Перед продолжением необходимо размонтировать файловую систему. В приведённом выше примере существующая файловая система находится на `/dev/sda2` и монтируется в `/mnt`. Размонтировать можно командой:

    # umount /dev/sda2

Чтобы найти только смонтированные файловые системы, смотрите #Список смонтированных файловых систем.

Чтобы создать новую файловую систему, используйте mkfs(8). Смотрите #Типы файловых систем для точного типа, а также утилиты пользовательского пространства, которые вы, возможно, захотите установить для конкретной файловой системы.

Например, чтобы создать новую файловую систему типа ext4 (обычно для разделов данных Linux) на `/dev/sda1`, запустите:

    # mkfs.ext4 /dev/sda1

Совет:

- Используйте флаг `-L` mkfs.ext4, чтобы указать метку файловой системы. e2label можно использовать для изменения метки в существующей файловой системе.
- Размер файловых систем можно изменить после создания, но с определёнными ограничениями. Например, размер файловой системы XFS можно только увеличить, но не уменьшить. Для получения дополнительной информации смотрите Возможности изменения размера и документацию интересующей вас файловой системы.

Новая файловая система теперь может быть смонтирована в желаемый каталог.

## Монтирование файловой системы

Чтобы вручную смонтировать файловую систему, расположенную на устройстве (например, раздел) к каталогу, используйте mount(8). В этом примере монтируется `/dev/sda1` в `/mnt`.

    # mount /dev/sda1 /mnt

Это прикрепляет файловую систему раздела `/dev/sda1` в каталог `/mnt`, делая содержимое файловой системы видимым. Любые данные, существовавшие в `/mnt` перед этим действием, становятся невидимыми до тех пор, пока устройство не будет размонтировано.

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

Если устройство указано в `/etc/fstab` и в команду mount передаётся только устройство или точка монтирования, то остальные параметры монтирования будут взяты из этого файла. Например, если `/etc/fstab` содержит строку, указывающую, что `/dev/sda1` должен быть смонтирован в `/mnt`, тогда такие команды mount будут автоматически монтировать это устройство в этот каталог:

    # mount /dev/sda1

Или

    # mount /mnt

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

- использование флагов в командной строке с mount
- редактирование fstab
- создание правил udev
- самостоятельное компилирование ядра
- или скрипты монтирования, специфичные файловой системы (расположенные в `/usr/bin/mount.*`).

Более подробную информацию смотрите в связанных статьях и статье интересующей файловой системы.

Совет:

- Файловые системы также можно монтировать с помощью команды systemd-mount вместо mount. Если точка монтирования не указана, то файловая система будет смонтирована в `/run/media/system/идентификатор_устройства/`. Это позволяет легко смонтировать файловую систему без необходимости решать, куда её монтировать. Использование и подробности описаны в systemd-mount(1).
- Для монтирования файловых систем от имени обычного пользователя можно использовать udisks. Он также позволяет выполнять монтирование без прав суперпользователя и может использоваться через графический интерфейс, например, в файловых менеджерах, использующих udisks.

### Список смонтированных файловых систем

Чтобы увидеть все смонтированные файловые системы, используйте findmnt(8):

    $ findmnt

findmnt принимает множество аргументов, которые могут фильтровать вывод и отображать дополнительную информацию. Например, в качестве аргумента может принимать устройство или точку монтирования для отображения только информации о том, что указывается:

    $ findmnt /dev/sda1

findmnt собирает информацию из `/etc/fstab`, `/etc/mtab` и `/proc/self/mounts`.

### Размонтирование файловой системы

Чтобы размонтировать файловую систему, используйте umount(8). Можно указать либо устройство, содержащее файловую систему (например, `/dev/sda1`), либо точку монтирования (например, `/mnt`):

    # umount /dev/sda1

или

    # umount /mnt

## Решение проблем

### "linux Structure needs cleaning"

Размонтируйте файловую систему и выполните fsck для проблемного тома.

## Смотрите также

- filesystems(5)
- systemd-mount(1)
- Документация файловых систем, поддерживаемых в Linux
- Википедия:Файловая система
- Википедия:mount

Categories:

- File systems (Русский)
- Lists (Русский)

Hidden categories:

- Pages with dead links
- Pages with missing package links
- Pages with broken package links