Red Hat System Administration II 8.2

Глава 6. Управление базовым хранилищем

Аннотация

Цель Создание запоминающих устройств, разделов, файловых систем, областей подкачки и управление ими из командной строки
Задачи
  • Создание разделов хранилища, форматирование их под файловые системы и монтирование для использования

  • Создание областей подкачки как дополнения к физической памяти и управление ими

Разделы
  • Добавление разделов, файловых систем и постоянных смонтированных каталогов (и упражнение)

  • Управление областью подкачки (и упражнение)

Лабораторная работа

Управление базовым хранилищем

Добавление разделов, файловых систем и постоянных смонтированных каталогов

Задачи

После завершения этого раздела учащиеся смогут создать разделы хранилища, отформатировать их под файловые системы и смонтировать для использования.

Разбиение диска на разделы

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

Вот несколько примеров ситуаций, в которых разбиение дисков необходимо или полезно:

  • ограничение пространства для приложений или пользователей;

  • отделение файлов операционной системы и приложений от файлов пользователей;

  • создание отдельной области для подкачки памяти;

  • ограничение использования дискового пространства для повышения производительности средств диагностики и создания резервных образов.

Таблица разделов MBR

С 1982 г. таблица разделов Master Boot Record (MBR) описывает способ разбиения дисков в системах, использующих BIOS. Эта таблица поддерживает до четырех основных разделов. В системах Linux администратор может создать до 15 разделов, используя расширенный и логические разделы. Поскольку данные о размере раздела хранятся в виде 32-битных значений, максимальный размер диска и раздела для дисков, использующих MBR, составляет 2 ТиБ.

Рисунок 6.1: Разбиение запоминающего устройства /dev/vdb на разделы MBR

Поскольку физические диски становятся все больше, а тома на основе SAN еще больше, предел в 2 ТиБ для размера диска и раздела в таблице MBR больше не является величиной, достижимой только в теории. Это уже реальная проблема, с которой системные администраторы все чаще и чаще сталкиваются в производственных средах. В результате старая таблица MBR заменяется новой таблицей разделов GUID (GPT).

Таблица разделов GPT

В системах, использующих Unified Extensible Firmware Interface (UEFI), GPT является стандартом для размещения таблиц разделов на жестких дисках. GPT — это часть стандарта UEFI, которая устраняет многие ограничения устаревшей таблицы MBR.

GPT предоставляет до 128 разделов. В отличие от таблицы MBR, использующей 32-битное поле для хранения адресов секторов и сведений о размере, GPT выделяет для этого 64 бита. Это позволяет GPT использовать разделы и диски размером до 8 зебибайт (ЗиБ) или 8 миллиардов тебибайт.

Помимо устранения ограничений MBR, GPT также предоставляет ряд дополнительных возможностей. GPT использует глобально уникальный идентификатор (GUID) для идентификации каждого диска и раздела. В отличие от таблицы MBR с единой точкой отказа, GPT обеспечивает избыточность данных таблицы разделов. Основная таблица GPT хранится в начале диска, а резервная копия (вторичная таблица GPT) — в конце диска. Кроме того, GPT использует контрольную сумму для обнаружения ошибок и повреждений в заголовке и таблице разделов GPT.

Рисунок 6.2: Разбиение запоминающего устройства /dev/vdb на разделы GPT

Управление разделами с помощью команды parted

Редакторы разделов — это программы, которые позволяют администраторам изменять таблицы разделов диска, например создавать и удалять разделы, а также менять их тип. Для выполнения этих операций администраторы могут использовать редактор разделов Parted как с MBR, так и с GPT.

Команда parted принимает имя устройства всего диска в качестве первого аргумента и одну или несколько подкоманд. В следующем примере используется подкоманда print для отображения таблицы разделов на диске /dev/vda.

[root@host ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  10.7GB  10.7GB  primary  xfs          boot
 2      10.7GB  53.7GB  42.9GB  primary  xfs

Если не указать подкоманду, parted откроет интерактивный сеанс для ввода команд.

[root@host ~]# parted /dev/vda
GNU Parted 3.2
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  10.7GB  10.7GB  primary  xfs          boot
 2      10.7GB  53.7GB  42.9GB  primary  xfs

(parted) quit
[root@host ~]# 

По умолчанию команда parted отображает все размеры в степенях десятки (КБ, МБ, ГБ). Изменить это значение по умолчанию можно с помощью подкоманды unit, которая принимает следующие параметры:

  • s для сектора;

  • В для байта;

  • MiB, GiB или TiB (степени двойки);

  • MB, GB или TB (степени десятки).

[root@host ~]# parted /dev/vda unit s print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 104857600s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start      End         Size       Type     File system  Flags
 1      2048s      20971486s   20969439s  primary  xfs          boot
 2      20971520s  104857535s  83886016s  primary  xfs

Как показано в примере выше, можно указать несколько подкоманд (в примере ― unit и print) в одной строке.

Запись таблицы разделов на новый диск

Чтобы разбить новый диск на разделы, сначала необходимо присвоить ему метку диска. Метка диска указывает используемую таблицу разделов.

Предупреждение

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

Как пользователь root используйте следующую команду для присвоения диску метки MBR:

[root@host ~]# parted /dev/vdb mklabel msdos

Чтобы присвоить метку GPT, используйте следующую команду:

[root@host ~]# parted /dev/vdb mklabel gpt

Предупреждение

Подкоманда mklabel стирает существующую таблицу разделов. Применяйте команду mklabel только в том случае, если собираетесь использовать диск повторно, несмотря на потерю существующих данных. Если новая метка изменяет границы раздела, все данные в существующих файловых системах станут недоступны.

Создание разделов MBR

Процедура создания раздела MBR состоит из нескольких шагов.

  1. Укажите дисковое устройство, на котором будет создан раздел.

    Выполните команду parted от имени пользователя root, указав имя диска в качестве аргумента. Запустится команда parted в интерактивном режиме и откроется командная строка.

    [root@host ~]# parted /dev/vdb
    GNU Parted 3.2
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) 
  2. Используйте подкоманду mkpart для создания нового основного или расширенного раздела.

    (parted) mkpart
    Partition type?  primary/extended? primary

    Примечание

    Если на MBR-диске нужно больше четырех разделов, создайте три основных раздела и один расширенный. Расширенный раздел служит контейнером, в котором можно создать несколько логических разделов.

  3. Укажите тип файловой системы, которую необходимо создать для раздела, например xfs или ext4. Это не приведет к созданию файловой системы в разделе. Вы просто указываете нужный тип раздела.

    File system type?  [ext2]? xfs

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

    [root@host ~]# parted /dev/vdb help mkpart
      mkpart PART-TYPE [FS-TYPE] START END     make a partition
    
        PART-TYPE is one of: primary, logical, extended
        FS-TYPE is one of: btrfs, nilfs2, ext4, ext3, ext2, fat32, fat16, hfsx,
        hfs+, hfs, jfs, swsusp, linux-swap(v1), linux-swap(v0), ntfs, reiserfs,
        hp-ufs, sun-ufs, xfs, apfs2, apfs1, asfs, amufs5, amufs4, amufs3,
        amufs2, amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2,
        affs1, affs0, linux-swap, linux-swap(new), linux-swap(old)
        START and END are disk locations, such as 4GB or 10%.  Negative values
        count from the end of the disk.  For example, -1s specifies exactly the
        last sector.
    
        'mkpart' makes a partition without creating a new file system on the
        partition.  FS-TYPE may be specified to set an appropriate partition
        ID.
  4. Укажите сектор диска, с которого начнется новый раздел.

    Start? 2048s

    Обратите внимание на суффикс s, указывающий значение в секторах. Также можно использовать суффиксы MiB, GiB, TiB, MB, GB и TB. Если суффикс не указан, по умолчанию используется MB. Команда parted может округлить указанное значение согласно ограничениям диска.

    При запуске parted получает топологию диска с устройства. Например, parted получает информацию о размере физического блока диска. На основе этой информации parted обеспечивает правильное размещение раздела в структуре диска согласно указанной вами начальной позиции. Правильное выравнивание разделов ― важный фактор для обеспечения оптимальной производительности. Если начальная позиция смещает раздел, parted выдаст предупреждение. Для большинства дисков рекомендуется использовать начальный сектор, кратный числу 2048.

  5. Укажите сектор диска, где должен заканчиваться новый раздел.

    End? 1000MB

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

    Size = End - Start

    Как только вы укажете конечную позицию, parted внесет сведения о новом разделе в таблицу разделов на диске.

  6. Выйдите из parted.

    (parted) quit
    Information: You may need to update /etc/fstab.
    
    [root@host ~]# 
  7. Выполните команду udevadm settle. Она ждет, пока система обнаружит новый раздел и создаст соответствующий файл устройства в каталоге /dev. Команда возвращает управление только после завершения всех операций.

    [root@host ~]# udevadm settle
    [root@host ~]# 

В качестве альтернативы интерактивному режиму создать раздел также можно следующим образом:

[root@host ~]# parted /dev/vdb mkpart primary xfs 2048s 1000MB

Создание разделов GPT

Для создания разделов GTP также используется команда parted.

  1. Укажите дисковое устройство, на котором будет создан раздел.

    Как пользователь root, выполните команду parted, указав в качестве единственного аргумента дисковое устройство, чтобы запустить parted в интерактивном режиме с командной строкой.

    [root@host ~]# parted /dev/vdb
    GNU Parted 3.2
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) 
  2. Используйте подкоманду mkpart, чтобы начать создание нового раздела.

    В таблице GPT каждому разделу присваивается имя.

    (parted) mkpart
    Partition name?  []? usersdata
  3. Укажите тип файловой системы, которую необходимо создать для раздела, например xfs или ext4. Это не приведет к созданию файловой системы в разделе. Вы просто указываете нужный тип раздела.

    File system type?  [ext2]? xfs
  4. Укажите сектор диска, с которого начнется новый раздел.

    Start? 2048s
  5. Укажите сектор диска, где должен заканчиваться новый раздел.

    End? 1000MB

    Как только вы укажете конечную позицию, parted внесет сведения о новом разделе в таблицу разделов на диске.

  6. Выйдите из parted.

    (parted) quit
    Information: You may need to update /etc/fstab.
    
    [root@host ~]# 
  7. Выполните команду udevadm settle. Она ждет, пока система обнаружит новый раздел и создаст соответствующий файл устройства в каталоге /dev. Команда возвращает управление только после завершения всех операций.

    [root@host ~]# udevadm settle
    [root@host ~]# 

В качестве альтернативы интерактивному режиму создать раздел также можно следующим образом:

[root@host ~]# parted /dev/vdb mkpart usersdata xfs 2048s 1000MB

Удаление разделов

Следующие шаги применяются как для MBR, так и для GPT.

  1. Укажите диск, содержащий раздел, который необходимо удалить.

    Как пользователь root, выполните команду parted, указав в качестве единственного аргумента дисковое устройство, чтобы запустить parted в интерактивном режиме с командной строкой.

    [root@host ~]# parted /dev/vdb
    GNU Parted 3.2
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) 
  2. Укажите номер раздела, который нужно удалить.

    (parted) print
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 5369MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    
    Number  Start   End     Size   File system  Name       Flags
     1      1049kB  1000MB  999MB  xfs          usersdata
  3. Удалите раздел.

    (parted) rm 1

    Подкоманда rm сразу удаляет раздел из таблицы разделов на диске.

  4. Выйдите из parted.

    (parted) quit
    Information: You may need to update /etc/fstab.
    
    [root@host ~]# 

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

После создания блочного устройства следующим шагом будет добавление на него файловой системы. Red Hat Enterprise Linux поддерживает различные типы файловых систем, из них наиболее часто используются XFS и ext4. Anaconda (установщик Red Hat Enterprise Linux) по умолчанию использует XFS.

Как пользователь root используйте команду mkfs.xfs, чтобы добавить на блочное устройство файловую систему XFS. Чтобы добавить файловую систему ext4, используйте команду mkfs.ext4.

[root@host ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1              isize=512    agcount=4, agsize=60992 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=243968, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1566, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

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

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

Монтирование файловых систем вручную

С помощью команды mount администраторы могут вручную присоединить устройство к каталогу или точке монтирования. Команда mount принимает в качестве аргументов устройство, точку монтирования и параметры файловой системы. Параметры файловой системы определяют ее поведение.

[root@host ~]# mount /dev/vdb1 /mnt

С помощью команды mount также можно просмотреть смонтированные файловые системы, точки монтирования и параметры.

[root@host ~]# mount | grep vdb1
/dev/vdb1 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

Монтирование файловых систем на постоянной основе

Монтирование файловой системы вручную — прекрасный способ убедиться, что отформатированное устройство доступно и работает так, как ожидается. Однако при перезагрузке сервера система не монтирует автоматически файловую систему в дерево каталогов. Данные остаются в файловой системе, но у пользователей нет доступа к ним.

Чтобы при загрузке системы автоматически монтировалась файловая система, добавьте запись в файл /etc/fstab. В этом файле конфигурации указаны файловые системы, монтируемые при загрузке системы.

/etc/fstab ― это файл, содержащий по шесть полей в каждой строке, с пробелом в качестве разделителя.

[root@host ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Feb 13 16:39:59 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=a8063676-44dd-409a-b584-68be2c9f5570   /        xfs   defaults   0 0
UUID=7a20315d-ed8b-4e75-a5b6-24ff9e1f9838   /dbdata  xfs   defaults   0 0

После добавления или удаления записи в файле /etc/fstab необходимо выполнить команду systemctl daemon-reload или перезагрузить сервер, чтобы демон systemd зарегистрировал новую конфигурацию.

[root@host ~]# systemctl daemon-reload

В первом поле указано устройство. В этом примере для указания устройства используется UUID. Файловые системы создают и сохраняют UUID в своем суперблоке во время создания. Вы также можете использовать файл устройства, например /dev/vdb1.

Примечание

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

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

[root@host ~]# lsblk --fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sr0
vda
└─vda1 xfs          a8063676-44dd-409a-b584-68be2c9f5570 /
vdb
└─vdb1 xfs          7a20315d-ed8b-4e75-a5b6-24ff9e1f9838 /dbdata

Второе поле — это точка монтирования каталога, из которой блочное устройство будет доступно в структуре каталогов. Точка монтирования уже должна существовать. Если это не так, создайте ее с помощью команды команду mkdir.

Третье поле содержит тип файловой системы, например xfs или ext4.

Четвертое поле ― это разделенный запятыми список опций, применяемых к устройству. defaults — это набор наиболее часто используемых опций. На man-странице mount(8) описаны также другие доступные опции.

Пятое поле используется командой dump для резервного копирования устройства. Другие приложения резервного копирования обычно к данному полю не обращаются.

Последнее поле  — порядок выполнения fsck. Оно определяет, должна ли команда fsck выполняться при загрузке системы для обеспечения чистоты файловых систем. Значение в этом поле указывает порядок выполнения команды fsck. Для файловых систем XFS задайте в этом поле значение 0, поскольку XFS не использует fsck для проверки статуса файловой системы. В случае файловых систем ext4 задайте значение 1 для корневой файловой системы и 2 для других файловых систем ext4. fsck сначала обработает корневую файловую систему, а затем параллельно проверит файловые системы на отдельных дисках и последовательно файловые системы на одном диске.

Примечание

Если в файле /etc/fstab будет задана неправильная запись, возможны проблемы с загрузкой машины. Администратору необходимо проверить правильность записи: размонтировать новую файловую систему и с помощью команды mount /mountpoint, которая читает файл /etc/fstab, снова смонтировать ее. Если команда mount вернет ошибку, исправьте, прежде чем перезагружать машину.

Для проверки файла /etc/fstab также можно использовать команду findmnt --verify.

Ссылки

info parted (руководство пользователя GNU Parted)

Man-страницы parted(8), mkfs(8), mount(8), lsblk(8) и fstab(5)

Дополнительные сведения см. в руководстве Configuring and managing file systems: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_and_managing_file_systems/