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

Файловая система управляет хранением данных на диске и предоставляет доступ к ним. Linux поддерживает множество файловых систем, некоторые из которых являются собственными, например семейство ext (Extended Filesystem), а остальные пришли из других операционных систем - FAT из MS-DOS, NTFS из Windows NT, HFS и HFS+ из Mac OS и т.д.

Файловая система управляет хранением данных на диске и предоставляет доступ к ним. Linux поддерживает множество файловых систем, некоторые из которых являются собственными, например семейство ext (Extended Filesystem), а остальные пришли из других операционных систем - FAT из MS-DOS, NTFS из Windows NT, HFS и HFS+ из Mac OS и т.д.

Стандартным инструментом создания файловой системы в Linux является  mkfs (make file system). Вариант исполнения этого инструмента зависит от файловой системы, с которой он должен работать.

Создание файловой системы ext2/ext3/ext4

Расширенная файловая система ext (Extended File System) была первой файловой системой для Linux. С годами ее заменили новые версии под названием ext2, ext3 и ext4, которые в настоящее время являются файловой системой по умолчанию для многих дистрибутивов Linux.

Утилиты  mkfs.ext2mkfs.ext3 и mkfs.ext4  используются для создания файловых систем ext2, ext3 и ext4. Фактически, все эти утилиты существуют только как символические ссылки на другую утилиту под названием mke2fs.  mke2fs изменяет свои параметры по умолчанию в соответствии с именем, по которому она вызывается. Таким образом, все они имеют одинаковое поведение и параметры командной строки.

Самая простая команда выглядит так mkfs.ext2 TARGET, где TARGET - это имя раздела, в котором должна быть создана файловая система. Например, для создания файловой системы ext3 на блочном устройстве (разделе) /dev/sdb1  команда будет:

mkfs.ext3 /dev/sdb1

Вывести список блочных устройств (дисков и разделов) можно командой lsblk.
Как создать новый раздел на диске можно прочесть в этой статье.

Вместо использования команды с именем конкретной файловой системы, можно вызвать утилиту  mke2fs с параметром -t, за которым следует имя файловой системы. В примере ниже используются две эквивалентные команды, создающие одну файловую систему  ext4 на /dev/sdb1.

mkfs.ext4 /dev/sdb1
mke2fs -t ext4 /dev/sdb1

Параметры командной строки

mke2fs поддерживает широкий спектр параметров и опций командной строки. Вот некоторые наиболее важных из них. Все они также относятся к mkfs.ext2mkfs.ext3 и mkfs.ext4:

-b size
Задает размер блоков данных в устройстве, который может составлять 1024, 2048 или 4096 байт на блок.


Проверяет целевое устройство на наличие поврежденных блоков перед созданием файловой системы. Вы можете выполнить тщательную, но гораздо более медленную проверку, передав этот параметр дважды, например так mkfs.ext4 -c -c TARGET.

-d DIRECTORY
Копирует содержимое указанного каталога в корень новой файловой системы. Полезно, если вам нужно “предварительно заполнить” диск предопределенным набором файлов.

-F
Осторожно! Этот параметр заставит mke2fs создать файловую систему, даже если другие переданные параметры опасны или вообще не имеют смысла. Если параметр передать дважды  -F -F, то это запустит процесс создания файловой системы на устройстве, которое смонтировано или используется, что может привести к очень печальным последствиям.

-L VOLUME_LABEL
Установит метку тома VOLUME_LABEL. Эта метка должна содержать не более 16 символов.

-n
Это действительно полезная опция, которая имитирует создание файловой системы и отображает, что было бы сделано, если бы выполнялось без этой опции. Думайте об этом как о “пробном” режиме. Бывает полезно проверить, прежде чем вносить какие-либо изменения на диск.

-q
Тихий режим. mke2fs будет работать как обычно, но не будет выводить никаких данных на терминал. Полезно при запуске mke2fs из скрипта.

-U ID
Этот параметр установит UUID (универсальный уникальный идентификатор) раздела в значение, указанное в ID. UUID - это 128-битные числа в шестнадцатеричной системе счисления, которые служат для уникальной идентификации раздела в операционной системе. Это число задается как 32-значная строка в формате 8-4-4-4-12, что означает 8 цифр, дефис, 4 цифры, дефис, 4 цифры, дефис, 4 цифры, дефис, 12 цифр, например D249E380-7719-45A1-813C-35186883987E
Вместо ID вы также можете указать такие параметры, как 
clear - очистка UUID файловой системы,
random - использование случайно сгенерированного UUID,
time - создание UUID на основе времени.

-V
Подробный режим, печатает гораздо больше информации во время работы, чем обычно. Полезно для целей отладки.

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

Файловая система FAT возникла из MS-DOS и за прошедшие годы претерпела множество изменений, кульминацией которых стал формат FAT32, выпущенный в 1996 году с Windows 95 OSR2.

VFAT - это расширение формата FAT16 с поддержкой длинных (до 255 символов) имен файлов. Обе файловые системы обрабатываются одной и той же утилитой mkfs.fat, которая так же является алиасом утилиты mke2fs.

Файловая система FAT имеет значительные недостатки, которые ограничивают ее использование на больших дисках. Например, FAT16 поддерживает тома не более 4 ГБ и максимальный размер файла 2 ГБ. FAT32 увеличивает размер тома до 2 ПБ, а максимальный размер файла - до 4 ГБ. Из-за этого файловые системы FAT сегодня чаще используются на небольших флэш-накопителях или картах памяти (размером до 2 ГБ) или на устаревших устройствах и операционных системах, которые не поддерживают более продвинутые файловые системы.

Самая простая команда для создания файловой системы FAT - это mkfs.fat TARGET, где TARGET это раздел, в котором вы хотите создать файловую систему. Например: 

mkfs.fat /dev/sdc1

Как и другие утилиты, mkfs.fat поддерживает ряд параметров командной строки. Ниже приведены наиболее важные из них. Полный список и описание каждой опции можно прочитать в руководстве к утилите, используя команду man mkfs.fat.

-c
Проверяет целевое устройство на наличие поврежденных блоков перед созданием файловой системы.

-C FILENAME BLOCK_COUNT
Создаст файл, указанный в FILENAME, а затем создаст внутри него файловую систему FAT, фактически создавая пустой “образ диска”, который позже можно записать на устройство с помощью утилиты, такой как dd или смонтировать как петлевое устройство loopback. При использовании этой опции количество блоков в файловой системе (BLOCK_COUNT) должно быть указано после имени устройства.

-F SIZE
Определяет размер FAT (таблицы распределения файлов) - 12, 16 или 32: то есть FAT12, FAT16 или FAT32. Если не указано, то mkfs.fat будет выбран соответствующий параметр в зависимости от размера файловой системы.

-n NAME
Задает метку тома (имя) для файловой системы. Она может быть длиной до 11 символов, а по умолчанию - без имени.

-v
Подробный режим. Выводит гораздо больше информации чем обычно, что полезно для отладки.

mkfs.fat не способен создавать “загрузочную” файловую систему. В руководстве утилиты сказано, что “это не так просто, как вы думаете” и не будет реализовано.

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

exFAT - это файловая система, созданная Корпорацией Майкрософт в 2006 году, которая устраняет одно из наиболее значимых ограничений FAT32: размер файла и диска. В exFAT максимальный размер файла составляет 16 эксабайт (против 4 ГБ в FAT32), а максимальный размер диска составляет 128 петабайт.

Поскольку эта файловая система поддерживается всеми тремя основными операционными системами (Windows, Linux и mac OS), то будет хорошим выбором там, где требуется совместимость: например, на флэш-накопителях большой емкости, картах памяти и внешних дисках. Ассоциация SD рекомендует exFAT как файловую систему по умолчанию для карт памяти формата SDXC объемом более 32 ГБ.

Создание файловых систем exFAT выполняется утилитой mkfs.exfat, которая является ссылкой на mkexfatfs. Основное использование команды выглядит так: 
mkfs.exfat TARGET, где TARGET это раздел, в котором вы хотите создать файловую систему. Например: 

mkfs.exfat /dev/sdb2

В отличие от других утилит, рассмотренных в этом уроке, mkfs.exfat имеет очень мало параметров командной строки.

-i VOL_ID
Устанавливает идентификатор тома в значение, указанное в VOL_ID. Это 32-разрядное шестнадцатеричное число. Если не определено, то устанавливается идентификатор, основанный на текущем времени.

-n NAME
Задает метку или название тома. Может содержать до 15 символов, по умолчанию имя не используется .

-p SECTOR
Задает первый сектор первого раздела на диске. Это необязательное значение и по умолчанию оно равно нулю.

-s SECTORS
Определяет какое количество физических секторов будет распределено на каждый кластер. Это должна быть степень двойки, например 1, 2, 4, 8 и так далее.

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

XFS - это высокопроизводительная файловая система, первоначально разработанная Silicon Graphics в 1993 году для своей операционной системы IRIX. Благодаря своим характеристикам производительности и надежности она обычно используется для серверов и других сред, требующих высокой (или гарантированной) пропускной способности файловой системы.

Инструменты для управления файловыми системами XFS являются частью пакета xfsprogs. Возможно потребуется установить этот пакет вручную, поскольку он не включен по умолчанию в некоторые дистрибутивы Linux. А в других, например Red Hat Enterprise Linux, XFS используют в качестве файловой системы по умолчанию.

Файловые системы XFS разделены как минимум на 2 части: раздел журнала, в котором ведется журнал всех операций файловой системы (обычно называемый Журналом), и раздел данных. Раздел журнала может быть расположен внутри раздела данных (поведение по умолчанию) или вообще на отдельном диске для повышения производительности и надежности.

Самая основная команда для создания файловой системы XFS - это mkfs.xfs TARGET, где TARGET это раздел, в котором вы хотите создать файловую систему. Например: 

mkfs.xfs /dev/sda1

mkfs.xfs поддерживает ряд параметров командной строки. Вот некоторые из наиболее распространенных:

-b size=VALUE
Устанавливает размер блока в файловой системе в байтах, равный размеру указанному в VALUE. Значение по умолчанию - 4096 байт (4 КБ), минимальное - 512, а максимальное - 65536 (64 КБ).

-m crc=VALUE
Параметры, начинающиеся с -m, являются параметрами метаданных. Этот параметр задействует (если VALUE  1) или отключит (если VALUEесть0) использование CRC32c для проверки целостности метаданных на диске. Это позволяет лучше обнаруживать ошибки и восстанавливать после сбоев, связанных с проблемами оборудования. Поэтому эта проверка включена по умолчанию. Обычно нет причин ее отключать, так как влияние этой проверки на производительность минимально.

-m uuid=VALUE
Устанавливает UUID раздела в значение, указанное в VALUE. Помните, что UUID - это 32-символьные (128 бит) числа с шестнадцатеричным основанием, заданные группами из 8, 4, 4, 4 и 12 цифр, разделенных тире. Например 1E83E3A3-3AE9-4AAC-BF7E-29DFFECD36C0.

-f
Принудительно создает файловую систему на целевом устройстве, даже если на нем обнаружена файловая система.

-l logdev=DEVICE
Раздел журнала файловой системы будет размещен на указанном устройстве, а не внутри раздела данных.

-l size=VALUE
Размер раздела журнала будет равен размеру, указанному в VALUE. Размер может быть указан в байтах с использованием суффиксов  m или g. Например -l size=10m, раздел журнала будет ограничен 10 мегабайтами.

-q
Тихий режим. В этом режиме mkfs.xfs не будет выводить информации о параметрах создаваемой файловой системы.

-L LABEL
Задает метку файловой системы, длина которой может составлять не более 12 символов.

-N
Аналогично -n параметру в mke2fs, заставит mkfs.xfs печатать все параметры создания файловой системы, фактически не создавая ее (имитирует создание файловой системы).

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

Btrfs (официально файловая система B-Tree, произносится как “Butter FS”, “Better FS” или даже “Butterfuss”, на ваш выбор) - это файловая система, которая разрабатывается с 2007 года специально для Linux корпорацией Oracle и другими компаниями, включая Fujitsu, Red Hat, Intel и SUSE.

Существует множество функций, которые делают Btrfs привлекательными в современных системах, где распространены большие объемы памяти. Среди них поддержка нескольких устройств (включая чередование, зеркальное отображение и чередование + зеркальное отображение, как при настройке RAID), прозрачное сжатие, оптимизация SSD, инкрементное резервное копирование, моментальные снимки, онлайн-дефрагментация, проверки в автономном режиме, поддержка вложенных объемов (с квотами), дедупликация и многое другое.

Поскольку Btrfs это файловая система с копированием при записи, она очень устойчива к сбоям. И вдобавок ко всему, Btrfs проста в использовании и хорошо поддерживается многими дистрибутивами Linux. И некоторые из них, такие как SUSE, используют его в качестве файловой системы по умолчанию.

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

Для создания файловой системы Btrfs используется утилита mkfs.btrfs. Использование команды без каких-либо параметров создает файловую систему Btrfs на заданном устройстве, например:

mkfs.btrfs /dev/sdb1

Если  в вашей системе нет утилиты mkfs.btrfs, найдите btrfs-progs в менеджере пакетов вашего дистрибутива и установите ее.

Вы можете использовать -L чтобы задать метку (или имя) для вашей файловой системы. Метки Btrfs могут содержать до 256 символов. Если используются пробелы заключите имя в кавычки:

mkfs.btrfs /dev/sdb1 -L "New disk"

Обратите внимание на эту особенность Btrfs: вы можете передать в команду mkfs.btrfs несколько устройств. В случае передачи команде более одного устройства, будет создана одна файловая система на всех устройствах, что аналогично настройке RAID или LVM. Используйте параметр -m, чтобы указать как будут распределяться метаданные на дисковом массиве. Допустимыми параметрами являются raid0, raid1, raid5, raid6, raid10, single и dub.

Например, чтобы создать файловую систему, объединяющую два раздела /dev/sdb1 и /dev/sdc1 в один большой раздел, используйте:

mkfs.btrfs -d single -m single /dev/sdb /dev/sdc

Файловые системы, охватывающие несколько разделов, на первый взгляд могут показаться выгодными. Но это плохая идея с точки зрения безопасности данных, поскольку сбой на одном диске массива означает определенную потерю данных. Чем больше дисков вы используете, тем выше риск потери данных, так как у вас больше возможных точек отказа.

Управление вложенными томами

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

Вложенные тома не являются разделами. Раздел занимает фиксированное пространство на диске. Это может привести к дальнейшим проблемам, например к тому, что на одном разделе заканчивается свободное место, когда на другом остается достаточно места. С вложенными томами иначе, поскольку они “разделяют” свободное пространство из своей корневой файловой системы и растут по мере необходимости.

Предположим, у вас есть файловая система Btrfs, смонтированная на диске /mnt/disk, и вы хотите создать внутри нее вложенный том для хранения ваших резервных копий. Давайте назовем этот том BKP:

btrfs subvolume create /mnt/disk/BKP

Далее выведем содержимое файловой системы /mnt/disk. Вы увидите, что появился новый каталог, названный в честь вложенного тома.

$ ls -lh /mnt/disk/
total 0
drwxr-xr-x 1 root   root     0 jul 13 17:35 BKP
drwxrwxr-x 1 carol carol 988 jul 13 17:30 Images

Да, к вложенным томам можно получить доступ так же как к директории.

Мы можем проверить, что вложенный объем активен, с помощью команды:

# btrfs subvolume show /mnt/disk/BKP/
	Name: 			BKP
	UUID: 			e90a1afe-69fa-da4f-9764-3384f66fa32e
	Parent UUID: 		-
	Received UUID: 		-
	Creation time: 		2019-07-13 17:35:40 -0300
	Subvolume ID: 		260
	Generation: 		23
	Gen at creation: 	22
	Parent ID: 		5
	Top level ID: 		5
	Flags: 			-
	Snapshot(s):

Вы можете смонтировать вложенный том в /mnt/BKP, передав команде mount параметры -t btrfs -o subvol=NAME.

mount -t btrfs -o subvol=BKP /dev/sdb1 /mnt/bkp

где параметр -t задает тип монтируемой файловой системы.

Работа со снэпшотами

Снэпшоты аналогичны вложенным объемам, но предварительно заполняются содержимым тома, из которого был сделан снимок.

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

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

Команда для создания моментального снимка такая же как и для создания вложенного объема, просто добавьте параметр snapshot после btrfs subvolume. Приведенная ниже команда создаст снимок файловой системы Btrfs, смонтированной в /mnt/disk/, в директорию mnt/disk/snap:

btrfs subvolume snapshot /mnt/disk /mnt/disk/snap

Теперь представьте, что у вас есть следующее содержимое в/mnt/disk:

$ ls -lh
total 2,8M
-rw-rw-r-- 1 carol carol 109K jul 10 16:22 Galaxy_Note_10.png
-rw-rw-r-- 1 carol carol 484K jul 5 15:01 geminoid2.jpg
-rw-rw-r-- 1 carol carol 429K jul 5 14:52 geminoid.jpg
-rw-rw-r-- 1 carol carol 467K jul 2 11:48 LG-G8S-ThinQ-Mirror-White.jpg
-rw-rw-r-- 1 carol carol 654K jul 2 11:39 LG-G8S-ThinQ-Range.jpg
-rw-rw-r-- 1 carol carol 94K jul 2 15:43 Mimoji_Comparativo.jpg
-rw-rw-r-- 1 carol carol 112K jul 10 16:20 Note10Plus.jpg
drwx------ 1 carol carol 366 jul 13 17:56 snap
-rw-rw-r-- 1 carol carol 118K jul 11 16:36 Twitter_Down_20190711.jpg
-rw-rw-r-- 1 carol carol 324K jul 2 15:22 Xiaomi_Mimoji.png

Обратите внимание на каталог snap, содержащий снэпшот. Теперь давайте удалим некоторые файлы и проверим содержимое каталога:

$ rm LG-G8S-ThinQ-*
$ ls -lh
total 1,7M
-rw-rw-r-- 1 carol carol 109K jul 10 16:22 Galaxy_Note_10.png
-rw-rw-r-- 1 carol carol 484K jul 5 15:01 geminoid2.jpg
-rw-rw-r-- 1 carol carol 429K jul 5 14:52 geminoid.jpg
-rw-rw-r-- 1 carol carol 94K jul 2 15:43 Mimoji_Comparativo.jpg
-rw-rw-r-- 1 carol carol 112K jul 10 16:20 Note10Plus.jpg
drwx------ 1 carol carol 366 jul 13 17:56 snap
-rw-rw-r-- 1 carol carol 118K jul 11 16:36 Twitter_Down_20190711.jpg
-rw-rw-r-- 1 carol carol 324K jul 2 15:22 Xiaomi_Mimoji.png

Но если проверить содержимое каталога со снэпшотом, то удаленные файлы будут все еще там и при необходимости их можно восстановить.

$ ls -lh snap/
total 2,8M
-rw-rw-r-- 1 carol carol 109K jul 10 16:22 Galaxy_Note_10.png
-rw-rw-r-- 1 carol carol 484K jul 5 15:01 geminoid2.jpg
-rw-rw-r-- 1 carol carol 429K jul 5 14:52 geminoid.jpg
-rw-rw-r-- 1 carol carol 467K jul 2 11:48 LG-G8S-ThinQ-Mirror-White.jpg
-rw-rw-r-- 1 carol carol 654K jul 2 11:39 LG-G8S-ThinQ-Range.jpg
-rw-rw-r-- 1 carol carol 94K jul 2 15:43 Mimoji_Comparativo.jpg
-rw-rw-r-- 1 carol carol 112K jul 10 16:20 Note10Plus.jpg
-rw-rw-r-- 1 carol carol 118K jul 11 16:36 Twitter_Down_20190711.jpg
-rw-rw-r-- 1 carol carol 324K jul 2 15:22 Xiaomi_Mimoji.png

Также возможно создавать моментальные снимки, доступные только для чтения. Они работают точно так же как доступные для записи моментальные снимки, но с той разницей, что содержимое моментального снимка не может быть изменено. Просто добавьте параметр -rпри создании снимка:

btrfs subvolume snapshot -r /mnt/disk /mnt/disk/snap

Несколько слов о сжатии в Btrfs

Btrfs поддерживает прозрачное сжатие файлов с тремя различными алгоритмами, доступными пользователю. Оно выполняется автоматически для каждого файла, если файловая система смонтирована с помощью этой опции -o compress. Алгоритм сжатия достаточно умен, чтобы обнаружить несжимаемые файлы и не будет пытаться сжать их, экономя таким образом системные ресурсы. Итак, в одном каталоге у вас могут быть сжатые и несжатые файлы вместе. Алгоритм сжатия по умолчанию - ZLIB, но доступны LZO (быстрее, но худшая степень сжатия) или ZSTD (быстрее чем ZLIB и сопоставимое сжатие) с несколькими уровнями сжатия.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *