Хранилища
Разметка диска
Дисковое пространство делится на разделы (partition)
Разделы именуются согласно типу диска
/dev/nvme0 - для NVMe дисков
/dev/sda(1,2,3) - для классических дисков (изначально SD - SCSI Disk)
/dev/vda - для виртуальных дисков (VD - Virtual Disk)
Система загружается при помощи BIOS или UEFI (EFI), что определяет тип адресации диска
Для BIOS - MBR (Master Boot Record)
Хранит только 64 байта информации о разделах, что приводит к лимиту в 4 раздела
Для UEFI - GPT (GUID Partition Table)
Хранит до 128 разделов
Для преодоления лимита MBR была введена концепция логических разделов (logical partition) и расширенного раздела (extended partition)
Последний раздел в диске назначается как extended, в рамках которого создаются логические разделы
Типы управления хранилищами
Разделы
Стандартное решение, используемое в любых случаях
Отдельная часть хранилища для конкретного типа данных
LVM (Logical Volume Manager) логические тома
Используется по-умолчанию в RHEL
Добавляет гибкости в работе с хранилищами (изменение размера, снэпшоты и т.д.)
Страты (stratis)
Следующее поколение
VMF (Volume Managing Filesystem)
Используются тонкие провижины по-умолчанию
Встроено в пользовательское пространство, что делает доступным использование API
Virtual Data Optimizer
Нацелено на эффективность использования диска (компрессия, дедупликация)
GPT и MBR
MBR является частью PC спецификации 1981 года
512 байт для загрузочной информации
64 байта для хранилищ
Только 4 хранилища с размером до 2 Тб
Для большего числа хранилищ необходимо использовать логические хранилища
GPT разработан в 2010 году
Больше пространства для хранения разделов (128)
Разработан специально для UEFI
Работа с parted
При создании раздела файловая система не создается автоматически
parted записывает только неважные метаданные файловой системы
parted в RHEL 8 является утилитой по-умолчанию
Выбор раздела осуществляется через parted /dev/<name>
print покажет текущую таблицу разделов
mklabel msdos | gpt - создать таблицу разделов (MBR или GPT соответственно)
mkpart part-type name fs-type start end
part-type - только для MBR, определяет основной, логический или расшренный раздел
name - имя, необходимо для GPT
fs-type - НЕ изменяет файловую систему, но устанавливает метаданные ФС
start end - начало и конец диска для раздела
mkpart primary 1024MiB 2048 MiB
udevadm settle для обновления данных
Работа с MBR
Выбрать нужный раздел в fdisk:
fdisk /dev/nvme0n3
Разделы, которые изменяются в fdisk, могут быть заняты на момент изменений
В такой случае рекомендуется проверить выполнененные изменения через partprobe
Файловые системы
Файловая система определяет способ, которым будет осуществляться запись данных на диск, организация данных в блоки и структуры
По-умолчанию в RHEL файловой системой выбран XFS
Быстрая и масштабируемая файловая система
Использует CoW (Copy on Write) для предотвращения потери целостности данных
Размер может быть увеличен, но не уменьшен
Вплоть до RHEL 6 использовалась ext4
Обратная совместимость с ext2
Использует журналирование (отслеживание изменений на диске) для обеспечения целостности данных
Размер может быть как уменьшен, так и увеличен
BTRFS
Создает временные метки и чексуммы для целостности
Поддерживает снэпшоты
Использует CoW
Управление файловой системой
mkfs.xfs - создать XFS систему
Соответственно mkfs.ext4 для ext4
mkfs.[tab][tab] - для вывода всех вариантов
mkfs без уточнения создаст ext2
После создания файловой системы, она может быть примонтирована командой mount
umount для размонтирования
Работа с /etc/fstab
Главный конфигурационный файл для постоянного монтирования разделов
Содержимое файла используется systemd-fstab-generator для создания точек монтирования
Соотвественно для обновления данных после редактирования /etc/fstab необходимо перезагрузить демона через systemctl daemon-reload
Столбцы:
/dev/mapper/cs-root - раздел
/ - точка монтирования
xfs - файловая система
defaults - создать с параметрами по-умолчанию
0 0 - флаги dump и systemcheck, которые не используются в современных системах
Атрибуты имен
В средах дата-центров имена девайсов могут меняться
Например, при удалении логического раздела, следующие за ним меняют свою нумерацию, в результате чего fstab не может инициализировать раздел
Для того, чтобы сохранить именование существуют различные решения:
UUID (Universal Unique ID) автоматически генерируется для каждого устройства, которое содержит файловую систему или что-то похожее
Label (метка)
Опция "-L" при создании файловой системы используется для установки имени, которое может использоваться при монтировании
Уникальные имена хранятся в /dev/disk
Вывести список UUID можно через команду blkid:
Для установки метки можно использовать tune2fs
В fstab раздел меняется на LABEL=testlabel
Для XFS можно использовать xfs_admin
То, каким образом можно идентифицировать раздел, и как это делает система, можно узнать в /dev/disk
Управление systemd монтированием
/etc/fstab уже является списком точек монтирования systemd
Точки монтирования также могут быть созданы с помощью .mount файлов
.mount файлы позволяют точнее работать с зависимостями за счет использваония таргетов, которые позволяют определять порядок монтирования и условия
Для примера можно использовать systemctl cat tmp.mount
Пример монтирования:
cp /usr/lib/systemd/system/tmp.mount /etc/systemd/system/articles.mount
tmp.mount монтируется на место articles в fstab
Если необходимо использовать структуру дерева при монтировании, то используется тире
/etc/systemd/system/data-articles.mount будет смонтировано в /data/articles
Управление XFS
xfsdump использутся для создания бэкапов XFS устройств и имеет несколько особенностей:
xfsdump работает на устройстве, отформатированном только в XFS
xfsdump может делать полные бэкапы или инкрементальные бэкапы разного уровня
xfsdump -I 0 -f /backupfiles/data.xfsdump /data создаст полный бэкап раздела data
xfsrestore -f /backupfiles/data.xfsdump /data восстановит раздел из бэкапа
xfsrepare используется для восстановления
Swap раздел
Swap - эмуляция RAM на диске
Все системы Linux должны иметь хотя бы часть памяти под swap
Размер swap зависит от использования системы, обычно размер выставляется равным RAM
Swap может быть создан на любом устройстве
При создании через parted, файловая система выбирается как linux-swap
mkswap создаст Swap FS
Активируется swap через swapon
Созданный вручную swap раздел необходимо также добавить в fstab для сохранения монтирования после перезагрузки
Структура LVM
LVM состоит из трех основных компонентов:
Physical Volume (PV)
Volume Group
Logical Volume (LV)
PV - все физические устройства, которые используются для хранения данных (жесткие диски, разделы, LUNы и т.д.)
Все физические устройства объединены в единый уровень абстракции - Volume Group
Из VG создаются LV с необходимыми свойствами
Размер LV не соотносится напрямую с PV, он может быть больше размером, чем один PV, что и определяет его преимущество
Поверх LV работает файловая система
Таким образом формируется иерархия тома /dev/vg<name>/lv<name>
Настройка LVM
Создать раздел из parted, используя set <number> lvm on
Создать PV через pvcreate /dev/<partition name>
pvs для проверки созданного PV
Создать VG через vgcreate <vg name> /dev/<partition name>
Создать LV через lvcreate -n <lvname> -L 1G <vg name>
lvs для проверки созданного LV
Создать файловую систему через mkfs.<fsname> /dev/<vg name>/<lv name>
Поместить в /etc/fstab
При этом не нужно использовать UUID, поскольку LV не привязаны к устройствам
Для отображения дерева монтирования полезна команда findmnt
LVM Device Mapper
Системный компонент, который используется ядром для создания интерфейсов доступа к устройствам
Device Mapper создает несмысловые имена для подсистем его использующих
/dev/dm-0, /dev/dm-1 и т.д.
Несмысловые имена формируются как символьные ссылки через /dev/mapper
/dev/mapper/<vgname>-<lvname>
Изменение размеров LVM
Чтобы увеличить LV используется команда lvextend
lvextend -r -L +1G - увеличивает размер LV на 1Гб вместе с файловой системой(флаг "-r")
Для того, чтобы увеличить LV, необходимо, чтобы в VG было достаточно места
Проверяется командой vgs
Соответственно для увеличения VG в случае нехватки объема используется команда vgextend для добавления PV
e2resize - отдельная утилита для изменения размера EXT файловых систем
xfs_growfs - используется соответственно для XFS файловых систем
Stratis
Stratis - файловая система от Red Hat, являющаяся аналогом BTRFS и ZFS
Для работы Stratis сверху него необходима регулярная файловая система (по-умолчанию XFS)
Stratis доступен поверх любого устройства блочных данных, включая LVM
Предлагает такой функционал: снапшоты, уровни кэширования, программируемый API, мониторинг и восстановление, тонкий провижининг
Архитектура Stratis:
Пул страты (stratis pool) создается из одного или более устройства хранения (blockdev)
Страта создает директорию /dev/stratis/<my-pool> для каждого пула
Директория содержит линки до устройств, которые представляют файловую систему в пуле
Устройства блочных данных в пуле могут не быть на тонком провижининге
Файловая система помещается в раздел поверх пула и является его интегральной частью
Каждый пул может содержать одну или более файловую систему
Файловые системы с тонким провижинингом не имеют фиксированного объема
Раздел увеличивается в размере по мере увеличения данных в нем
Понятия файловой системы (file system) и раздела (volume) взаимозаменяемы в данном случае
Настройка Stratis
Установить утилиту для управления и настройки stratis
yum install stratis-cli stratisd
Активировать службу
systemctl enable --now stratisd
Создать пул
stratis pool create <mypool> /dev/nvme0n2
Создать файловую систему (создаст XFS)
stratis fs create <mypool> <myfs1>
Отобразить созданные компоненты
stratis pool list - отобразить пулы
stratis fs list <mypool> - отобразить файловую систему
stratis blockdev list <mypool> - отобразит устройства
Добавление нового устройства (опционально)
stratis blockdev add-data
Разделы не поддерживаются
Объем устройства для добавления в пул должен быть минимум 1G
Раздел монтируется в fstab по UUID
Рекомендуется перезагрузить систему после проведенных настроек
Управление Stratis
Расширение пула:
stratis pool add-data <mypool> /dev/nvme0n3 для добавления нового устройства
Стандартные системные утилиты не предоставляют точной информации о томах из-за тонкого провижининга
Для этих целей лучше использовать stratis blockdev
stratis pool показывает информацию о пулах
stratis filesystem отображают отдельные файловые системы
Используемое пулами пространство не должно приближаться по размеру к физическому объему устройства
Снапшоты Stratis:
Снапшот представляет собой отдельную файловую систему, которую можно примонтировать
После создания снапшоты могут быть изменены
Снапшот не связан непосредственно с файловой системой, с которой он сделан и может существовать отдельно от нее после создания
Каждый снапшот должен иметь резервного пространства не меньше 0,5 Гб для хранения XFS лога
Создание снапшота:
stratis fs snapshot <mypool> <myfs1> <myfs1-snapshot>
При этом последующие изменения в оригинальной файловой системе не будут отражены в снапшоте
Примонтировать снапшот можно через команду mount /stratis/<mypool>/<mysnaphot> /mnt
Откат файловой системы из ранее сделанного снапшота:
unnount /<myfs1>
stratis fs destroy <mypool> <myfs1>
stratis fs snapshot <mypool> <myfs1-snapshot> <myfs1>
По факту создается снапшота снапшота
Данный подход не работает при использовании LVM
Удаление снапшота и файловой системы:
stratis filesystem destroy <mypool> <mysnapshot> для удаления снапшота
stratis filesystem destroy <mypool> <myfs> для удаления файловой системы
stratis pool destroy <mypool> для удаления всего пула, если в нем нет файловых систем
VDO
Virtual Data Optimizer
Используется для оптимизации хранимых на диске данных
Используется как отдельный менеджер томов, поверх которого создаются файловые системы
Обеспечивает тонкий провижининг
10-ти кратный логический размер по отношению к физическому для виртуальных машин и контейнеров
3-х кратный логический размер по отношению к физическому для объектных хранилищ
Используется в облачных и контейнерных средах
VDO управляет дедуплицированными и сжатыми пулами в RHEL 8
Настройка VDO
Нижележащий уровень устройства должен быть размеров не менее 4 ГиБ
Установить пакет:
yum install vdo kmod-vdo
Создать VDO:
vdo create --name=vdo1 --device=/dev/nmve0np2 --vdoLogicalSize=1T
Создать файловую систему:
mkfs.xfs -K /dev/mapper/vdo1
Зарегистрировать новое имя устройства
udevadm settle
Примонтировать в fstab
C флагом x-systemd.requires=vdo.service
Проверка состояния:
vdostats --human-readable
LUKS
Linux Unified Key Setup-on-disk-format
Технология зашифрованных разделов
Принцип работы заключается в следующем:
Поверх устройства, например /dev/sda1, создается настройка шифрования - cryptsetup luksFormat с парольной защитой
Для доступа к данным формируется виртуальный раздел cryptsetup luksOpen <secret_volume>
Этот раздел создается в /dev/mapper/<secret_volume>
Поверх создается файловая система и она же монтируется для доступа
В результате похищения данных такого тома фактически данных в нем не будет, так как они останутся на изначальном /dev/sda1
Настройка LUKS
Создаем раздел в parted или fdisk
Форматируем его в LUKS
cryptsetup luksFormat
Открываем раздел и создаем имя в device mapper
cryptsetup luksOpen /dev/<devicename> <namesecret>
Монтируем полученное в device mapper устройство
Для автоматизации luksOpen используется /etc/crypttab
Для автоматизации монтирования тома - /etc/fstab
Last updated
Was this helpful?