Настройка хранилища#

SberLinux OS Core поставляется с простой компоновкой хранилища по умолчанию и требует не менее 1 ГБ. Если корневая файловая система меньше рекомендуемого размера, при входе в систему появится предупреждение. Если корневая файловая система меньше 1 ГБ и за ней следует другой раздел, OS Core откажется от загрузки.

Корневой раздел является последним и заполняет все доступное дисковое пространство. Все данные хранятся в корневом разделе, отдельно от загрузочного. Чтобы добавить дополнительные разделы после корневой файловой системы, нужно изменить размер корневого раздела, чтобы он был не менее 1 ГБ.

Дополнительная информация приведена в разделе «Разметка диска» ниже.

Ссылки на блочные устройства из файла Ignition#

Многие из приведенных ниже примеров будут ссылаться на блочные устройства, например, /dev/vda. Название доступных блочных устройств зависит от типа инфраструктуры (облачная или без программного обеспечения) и от типа экземпляра. Например, в AWS некоторые типы экземпляров имеют диски NVMe (/dev/nvme*), другие же используют /dev/xvda*.

Во время подготовки к установке можно использовать ссылку /dev/disk/by-id/oscore-boot-disk для более удобного обращения к устройству в случае если конфигурация диска простая и использует тот же диск, с которого была запущена SberLinux OS Core.

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

В случае физической аппаратуры наилучшим способом обратиться к другим устройствам является ссылка /dev/disk/by-id/ или /dev/disk/by-path.

Настройка отдельных разделов /var#

Пример конфигурации Butane для настройки /var на отдельной части основного диска (добавление раздела /var на основной диск):

variant: sbcos
version: 3.2.0
storage:
  disks:
  - # Ссылка на блочное устройство, с которого была загружена операционная система.
    device: /dev/disk/by-id/oscore-boot-disk
    # Не стирайте таблицу разделов, так как это основное устройство.
    wipe_table: false
    partitions:
    - number: 4
      label: root
      # Выделите корневым файлам не менее 8 гигабайт.
      size_mib: 8192
      resize: true
    - size_mib: 0
      # Присваиваем разделу описательную метку. Это важно для того, чтобы ссылаться на него независимо от устройства в других частях конфигурации
      label: var
  filesystems:
    - path: /var
      device: /dev/disk/by-partlabel/var
      # Можно выбрать файловую систему, которая подходит
      format: ext4
      # Запросите Butane сгенерировать модуль монтирования, чтобы эта файловая система монтировалась в реальном корневом каталоге
      with_mount_unit: true

Также возможно отдельно установить подраздел /var. Например, /var/lib/containers. Пример конфигурации для добавления подраздела /var/lib/containers на основной диск:

variant: sbcos
version: 3.2.0
storage:
  disks:
  - device: /dev/disk/by-id/oscore-boot-disk
    wipe_table: false
    partitions:
    - number: 4
      label: root
      # Выделяйте как минимум 1 Гб дискового пространства
      size_mib: 1024
      resize: true
    - size_mib: 0
      label: containers
  filesystems:
    - path: /var/lib/containers
      device: /dev/disk/by-partlabel/containers
      format: xfs
      with_mount_unit: true

Можно присоединить хранилище с другого диска. Например, примонтировать информацию об авторизации пользователей /var/log из раздела /dev/vdb.

Также можно добавить информацию об авторизации пользователей /var/log со вторичного диска. Пример конфигурации:

variant: sbcos
version: 3.2.0
storage:
  disks:
  - device: /dev/vdb
    wipe_table: false
    partitions:
    - size_mib: 0
      start_mib: 0
      label: log
  filesystems:
    - path: /var/log
      device: /dev/disk/by-partlabel/log
      format: xfs
      with_mount_unit: true

Определите диск с несколькими разделами. Например, ниже показано, как удалить диск и создать два новых раздела:

variant: sbcos
version: 3.2.0
storage:
  disks:
    -
      # Для гарантии уникальности используется идентификатор World Wide Name (WWN) ID
      device: /dev/disk/by-id/wwn-0x50014e2eb507fcdf
      # Нужно убедиться, что таблица разделов и сами разделы созданы заново.
      wipe_table: true
      partitions:
        # Размер первого раздела (слот номер 1) составляет 32 ГБ и начинается с нулевой отметки устройства.
        # type_guid определен как Linux swap partition
        - label: part1
          number: 1
          size_mib: 32768
          start_mib: 0
          type_guid: 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f
        # Второй раздел (слот номер 2) будет располагаться сразу после первого раздела и займет все доступное дисковое пространство
        # type_guid явно не указан, будет использоваться Linux native partititon
         - label: part2

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

Для перенастройки корневой файловой системы используйте /dev/disk/by-label/root, как ссылку на изначальный тип разделения корневой системы. Убедитесь, что в новой файловой системе присутствует метка root. Пример конфигурации для перехода от файловой системы xfs к ext4, c повторным использованием одного и того же раздела на основном диске:

variant: sbcos
version: 3.2.0
storage:
  filesystems:
    - device: /dev/disk/by-partlabel/root
      wipe_filesystem: true
      format: ext4
      label: root

Также можно полностью переместить корневую файловую систему. В примере ниже показан перенос root на устройство RAID0:

variant: sbcos
version: 3.2.0
storage:
  raid:
    - name: myroot
      level: raid0
      devices:
        - /dev/disk/by-id/virtio-disk1
        - /dev/disk/by-id/virtio-disk2
  filesystems:
    - device: /dev/md/myroot
      format: xfs
      wipe_filesystem: true
      label: root

Необязательно указывать параметры (ключи) path и with_mount_unit, SberLinux OS Core найдет и установит специальный раздел root самостоятельно.

Чтобы продублировать загрузочный диск на несколько дисков для обеспечения отказоустойчивости, необходимо отобразить все разделы по умолчанию (корневой, загрузочный, системный раздел EFI и начальный boot). Для этого существует специальный синтаксис конфигурации Butane. Пример разделения загрузочного диска на две копии:

variant: sbcos
version: 3.2.0
boot_device:
  mirror:
    devices:
      - /dev/sda
      - /dev/sdb

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

Ниже приведен пример создания файловой системы путем определения и маркировки разделов, объединения их в RAID-массив и форматирования этого массива как ext4.

Определение файловой системы на устройстве хранения RAID в конфигурации Butane:

variant: sbcos
version: 3.2.0
storage:
  disks:
  # Здесь определяются два раздела, каждый на своем диске. Диски идентифицируются по World Wide Name (WWN) ID
  - device: /dev/disk/by-id/wwn-0x50014ee261e524e4
    wipe_table: true
    partitions:
    -
      # Для каждого раздела назначается имя (label)
      label: "raid.1.1"
      # Каждый раздел начинается с нулевого сектора и имеет размер 64 ГБ
      number: 1
      size_mib: 65536
      start_mib: 0
  - device: /dev/disk/by-id/wwn-0x50014ee0b8442cd3
    wipe_table: true
    partitions:
    - label: "raid.1.2"
      number: 1
      size_mib: 65536
      start_mib: 0
      # Используются ранее определенные разделы в качестве устройств в массиве RAID1 MD.
  raid:
    - name: publicdata
      level: raid1
      devices:
      - /dev/disk/by-partlabel/raid.1.1
      - /dev/disk/by-partlabel/raid.1.2
      # Полученный массив MD используется для создания файловой системы EXT4.
  filesystems:
    - path: /var/publicdata
      device: /dev/md/publicdata
      format: ext4
      label: PUB
      with_mount_unit: true

Зашифрованное хранилище (LUKS)#

Пример настройки устройства LUKS в /var/lib/data:

variant: sbcos
version: 3.2.0
storage:
  luks:
    - name: data
      device: /dev/vdb
  filesystems:
    - path: /var/lib/data
      device: /dev/mapper/data
      format: xfs
      label: DATA
      with_mount_unit: true

Корневую файловую систему также можно переместить в LUKS. В этом случае устройство LUKS должно быть связано с Clevis (подключаемый пользователем фреймворк для автоматического дешифрования. Его можно использовать для обеспечения автоматического дешифрования данных или даже автоматической разблокировки томов LUKS). Доступны два основных типа плагина: TPM2 и Tang (или комбинация тех плагинов, которые используют Shamir Secret Sharing).

Плагин TPM2 просто связывает шифрование с используемой физической машиной. Обязательно изучите документацию, прежде чем выбирать между TPM2 и Tang.

Примечание

Для работы должно быть не менее 1 ГБ оперативной памяти для повторного выделения корневого раздела.

Существует упрощенный синтаксис конфигурации Butane для настройки шифрования и связывания корневой файловой системы. Ниже приведен пример его использования для создания зашифрованной корневой файловой системы, связанной с плагином TPM2.

Шифрование корневой файловой системы с помощью TPM2 Clevis:

variant: sbcos
version: 3.2.0
boot_device:
  luks:
    tpm2: true

Это эквивалентно шифрованию корневой файловой системы с помощью TPM2 Clevis без использования boot_device, как представлено в следующей расширенной конфигурации:

variant: sbcos
version: 3.2.0
storage:
  luks:
    - name: root
      label: luks-root
      device: /dev/disk/by-partlabel/root
      clevis:
        tpm2: true
      wipe_volume: true
  filesystems:
    - device: /dev/mapper/root
      format: xfs
      wipe_filesystem: true
      label: root

Примечание

Можно не указывать параметры path и with_mount_unit, SberLinux OS Core найдет и установит специальный раздел root самостоятельно.

Пример шифрования корневой файловой системы с помощью Tang Clevis с упрощенным синтаксисом:

variant: sbcos
version: 3.2.0
boot_device:
  luks:
    tang:
      - url: http://<example_IP>
        thumbprint: bV8aajlyN6sYqQ41lGqD4zlhe0E

Далее система свяжется с сервером Tang при загрузке.

Можно настроить Tang и TPM2 связки (в том числе несколько серверов Tang для избыточности). По умолчанию для разблокировки корневой файловой системы требуется только устройство TPM2 или один сервер Tang. Это можно изменить с помощью параметра threshold.

Пример шифрования корневой файловой системы с помощью TPM2 и Tang:

variant: sbcos
version: 3.2.0
boot_device:
  luks:
    tang:
      - url: http://<example_IP>
        thumbprint: bV8aajlyN6sYqQ41lGqD4zlhe0E
    tpm2: true
    # это позволит разблокировать rootfs только в том случае, если PINs TPM 2 и Tag доступны и действительны
    threshold: 2

Установка размера корневого раздела#

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

Пример переназначения размера корневого раздела до максимального:

variant: sbcos
version: 3.2.0
storage:
  disks:
    - device: /dev/vda
      partitions:
        - label: root
          number: 4
          # 0 означает использование всего доступного пространства
          size_mib: 0
          resize: true
  luks:
    - name: root
      device: /dev/disk/by-partlabel/root
      clevis:
        tpm2: true
      wipe_volume: true
  filesystems:
    - device: /dev/mapper/root
      format: xfs
      wipe_filesystem: true
      label: root

Добавление подкачки (swap)#

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

На примере ниже представлена настройка раздела подкачки на втором диске:

variant: sbcos
version: 3.2.0
storage:
  disks:
    - device: /dev/sdb
      wipe_table: true
      partitions:
        - number: 1
          label: swap
  filesystems:
    - device: /dev/disk/by-partlabel/swap
      format: swap
      wipe_filesystem: true
      with_mount_unit: true

Добавление сетевого хранилища#

SberLinux OS Core может быть настроена для монтирования сетевых файловых систем, таких как NFS и CIFS. Рекомендуется это делать с помощью конфигурации Ignition. Файловые системы можно смонтировать при загрузке, создав стандартный блок монтирования. Кроме того, файловая система может быть настроена, когда пользователи получают доступ к точке монтирования, создав дополнительный блок автомонтирования. Ниже приведены примеры каждого из них для файловой системы NFS.

Настройка монтирования NFS#

Пример создания системного устройства для подключения файловой системы NFS при загрузке:

Примечание

Файл .mount должен быть привязан к пути файла (например,/var/mnt/data = var-mnt-data.mount.)

variant: sbcos
version: 3.2.0
systemd:
  units:
    - name: var-mnt-data.mount
      enabled: true
      contents: |
        [Unit]
        Description=Mount data directory

        [Mount]
        What=example.org:/data
        Where=/var/mnt/data
        Type=nfs4

        [Install]
        WantedBy=multi-user.target

Пример создания системного устройства для монтирования файловой системы NFS при доступе пользователей к точке монтирования (автомонтирование):

variant: sbcos
version: 3.2.0
systemd:
  units:
    - name: var-mnt-data.mount
      contents: |
        [Unit]
        Description=Mount data directory

        [Mount]
        What=example.org:/data
        Where=/var/mnt/data
        Type=nfs4

        [Install]
        WantedBy=multi-user.target

    - name: var-mnt-data.automount
      enabled: true
      contents: |
        [Unit]
        Description=Automount data directory

        [Automount]
        TimeoutIdleSec=20min
        Where=/var/mnt/data

        [Install]
        WantedBy=multi-user.target

Разметка диска#

При первой загрузке корневая файловая система заполняет остальную часть диска. Образ диска можно настроить с использованием конфигураций Butane для перераспределения разделов диска и для создания/переформатирования файловых систем. Установка на Bare metall аналогична – установщик копирует изначальный образ на целевой диск и вводит указанный конфигуратор в /boot для использования при первой загрузке.

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

Использование чисел для обозначения конкретных разделов не рекомендуется, вместо этого используйте метки (labels) или UUID. В SberLinux OS Core используются следующие labels:

  • boot;

  • boot-\<number>;

  • root;

  • root-\<number>;

  • BIOS-BOOT;

  • bios-\<number>;

  • EFI-SYSTEM;

  • esp-\<number>;

  • md-boot;

  • md-root для имен RAID-устройств.

Примечание

Не рекомендуется создавать новые разделы, файловые системы или RAID-устройства с вышеприведенными именами.

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

Образ диска x86_64 отформатирован GPT с защитным MBR. Он поддерживает загрузку через BIOS и UEFI (включая безопасную загрузку).

Макет разделов для x86_64 представлен в таблице ниже:

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

Номер

Метка

Содержание

Тип раздела

1

BIOS-BOOT

Образ BIOS GRUB

Исходные данные

2

EFI-SYSTEM

Образ EFI GRUB и прокладка безопасной загрузки

FAT32

3

boot

Конфигурация GRUB, образы kernel/initramfs

ext4

4

root

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

xfc

Раздел EFI-SYSTEM можно удалить или переформатировать при загрузке BIOS. Аналогичным образом BIOS-BOOT - при загрузке EFI.

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

SberLinux OS Core использует OSTree — систему для управления несколькими деревьями загрузочных операционных систем, которые совместно используют хранилище. В SberLinux OS Core каждая версия операционной системы является частью файловой системы /. Все развертывания используют одно и то же хранилище /var, которое может находиться в одной файловой системе или монтироваться отдельно. В SberLinux OS Core каждая версия ОС является частью файловой системы.

Ниже показаны точки монтирования по умолчанию на x86_64 для системы SberLinux OS Core, установленной на диске /dev/vda:

findmnt --real #некоторые детали опущены

Пример вывода команды:

TARGET        SOURCE                                                   FSTYPE  OPTIONS
/             /dev/vda4[/ostree/deploy/sb-oscore/deploy/$hash]         xfs     rw
|-/sysroot    /dev/vda4                                                xfs     ro
|-/etc        /dev/vda4[/ostree/deploy/sb-oscore/deploy/$hash/etc]     xfs     rw
|-/usr        /dev/vda4[/ostree/deploy/sb-oscore/deploy/$hash/usr]     xfs     ro
|-/var        /dev/vda4[/ostree/deploy/sb-oscore/deploy/var]           xfs     rw
`-/boot       /dev/vda3                                                ext4    ro

В примере раздел системы EFI, который ранее был установлен на /boot/efi, находится в другом месте. В системах, настроенных с зеркалированием загрузочных устройств, на каждом входящем диске есть независимые разделы EFI.

Неизменяемые точки монтирования / и /usr#

В SberLinux OS Core раздел /usr предназначен только для чтения, поэтому каталог /usr/local/bin/ также будет доступен только для чтения (если не будет смонтирован другой диск). Это позволяет использовать автоматическое обновление SberLinux OS Core.

Поскольку OSTree используется для управления всеми файлами, принадлежащими ОС, точки монтирования / и /usr не предназначены для записи. Любые изменения в ОС должны применяться через rpm-ostree.

Точка монтирования /boot также не предназначена для записи, потому что система разделов EFI не монтируется по умолчанию. Эти файловые системы управляются rpm-ostree и bootupd, и не должны изменяться администратором.

/ (в корне файловой системы в корневом разделе) настроен в режиме «только для чтения» в /sysroot, и также должен быть недоступен для просмотра и изменений напрямую.

Конфигурация /etc и состояние /var#

Единственные поддерживаемые места для записи – это /etc и /var. Каталог /etc должен содержать только файлы конфигурации, хранение данных не допускается. Все данные должны храниться в каталоге /var, не изменяемом при обновлениях системы.

Места, обычно используемые для хранения неизменной информации (например, /home или /srv), являются символическими ссылками на каталоги в /var (например, /var/home или /var/srv).

Выбор версии и загрузка#

Вход в меню загрузчика операционной системы GRUB создается для каждой версии SberLinux OS Core, которая в настоящее время доступна в системе. Вход в меню ссылается на развертывание ostree, которое состоит из ядра Linux, инициатора и хеша, связывающегося с ostreecommit (передается через аргумент ядра Ostree =). Во время загрузки ostree прочитает этот аргумент ядра, чтобы определить, какое развертывание использовать в качестве корневой файловой системы. Каждое обновление или изменение в системе (установка пакета, добавление аргументов ядра) создает новое развертывание. Это позволяет возвращаться к предыдущей версии, если обновление вызывает проблемы.