Дебиан – Подразделы верхнего уровня Btrfs – руководство

Вопрос или проблема

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

Предыстория: установщик Debian 12 не позволяет (в отличие от некоторых других ОС) создавать субтома Btrfs во время установки. В интернете есть руководства и видеоматериалы, которые рассматривают эту проблему (например, https://www.youtube.com/watch?v=uxHbV6pOytk или https://www.youtube.com/watch?v=bQRWNr3ZNfc), но они уже немного устарели (в основном использование опции space_cache, что в дальнейшем приводит к загрузке в файловую систему только для чтения).

Приведенная выше альтернатива требует использования Expert install и перехода в консоль в определенный момент для создания подтомов.

Шаги ниже основаны на идее не вмешиваться в процесс установки, а установить Debian, следуя указаниям установщика, и как только система установлена, перед тем как делать что-либо еще, создать подтомы Btrfs и смонтировать их соответственно.
Я бы опубликовал это на сайте, но у меня его нет, поэтому пишу здесь 🙂

Настройка целевых подтомов:

уровень 5 @rootfs

уровень 5 @home

уровень 5 @varlog

уровень 5 @varcache

Шаги:

  1. Установите систему Debian
    (Я использую единственный раздел Btrfs, смонтированный как / с установленным флагом загрузки + отдельный раздел подкачки; из ПО только основные системные утилиты и ssh-сервер)

  2. Загрузите новую установку и войдите на машину через ssh

  3. Создайте временные директории для монтирования

sudo mkdir -p /mnt/btrfs
sudo mkdir -p /mnt/home
sudo mkdir -p /mnt/var/log
sudo mkdir -p /mnt/var/cache
  1. Смонтируйте rootfs только для чтения (требуется перезагрузка, так как вряд ли вы сможете сделать это на работающей системе без понимания всех служб, которые нужно остановить…)
sudo nano /etc/fstab
# измените параметры точки монтирования /, чтобы включить ro; например, defaults,ro,subvol=@rootfs
# перезагрузите систему
sudo reboot
# проверьте, смонтирована ли система только для чтения
mount | grep "https://serverfault.com/"
  1. Смонтируйте rootfs вторично, на этот раз rw, и добавьте все атрибуты, которые вы хотите использовать для подтома позднее, например, сжатие и т.д. Ниже представлен мой пример.
    (конечно, используйте правильный UUID для вашего устройства – тот же, что и в fstab)
# монтируйте подтом (верхний уровень) в /mnt/btrfs
# запомните параметры монтирования, вам нужно будет указать их позже в fstab
sudo btrfs subvolume list /
# у вас должен быть только один root-подтом (вероятно, @rootfs) с ID=256
# НО ДЛЯ МОНТИРОВАНИЯ МЫ БУДЕМ ИСПОЛЬЗОВАТЬ subvolid=5 !!!
sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvolid=5 /dev/disk/by-uuid/UUID /mnt/btrfs
  1. теперь мы создаем подтопы на этой только что смонтированной rw системе
# опционально, если вы хотите @ как верхний уровень, переместите /mnt/btrfs/@rootfs в /mnt/btrfs/@
# но я этого не делаю, я оставлю @rootfs как верхний уровень
sudo btrfs subvolume create /mnt/btrfs/@home
sudo btrfs subvolume create /mnt/btrfs/@varlog
sudo btrfs subvolume create /mnt/btrfs/@varcache

# проверьте вывод btrfs subvolume list /
# у вас должны быть @rootfs, @home, @varlog, @varcache
# с ID 256, 257, 258, 259, но все на уровне 5 - Отлично, это то, что мы хотим
sudo btrfs subvolume list /
  1. Теперь мы монтируем эти новые подтопы в их временные точки монтирования. Опять же, используйте те параметры, которые вы позже будете использовать в fstab (признаю, это не строго обязательно, но давайте считать это хорошей практикой)
    Примечание: UUID всегда одинаков и такой же, как для @rootfs
# смонтируйте подтомы в их соответствующие точки монтирования
sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvol=@home /dev/disk/by-uuid/UUID /mnt/home
sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvol=@varlog /dev/disk/by-uuid/UUID /mnt/var/log
sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvol=@varcache /dev/disk/by-uuid/UUID /mnt/var/cache
# проверьте, правильно ли смонтированы подтомы
mount | grep ' /mnt/'
  1. Далее мы копируем содержимое каталогов, которые будут находиться на своих собственных подтопах.
    (примечание: в моем случае не было проблем с правами собственности)
# копируйте содержимое /home в /mnt/home
sudo cp -a /home/* /mnt/home/
# проверьте проблемы с правами собственности и при необходимости измените их

# копируйте содержимое /var/log в /mnt/var/log
sudo cp -a /var/log/* /mnt/var/log/

# копируйте содержимое /var/cache в /mnt/var/cache
sudo cp -a /var/cache/* /mnt/var/cache/
  1. Сотрите содержимое оригинальных каталогов (обратите внимание, мы стираем их на rw-монте, но оно, конечно, отразится и на корневой fs, смонтированной как ro. Это одна и та же fs, просто смонтированная дважды. Также убедитесь, что вы стираете только содержимое каталогов, а не сами каталоги, так как они будут использоваться в качестве точек монтирования в fstab)
# сотрите содержимое оригинальных каталогов
sudo rm -rf /mnt/btrfs/@rootfs/home/*
sudo rm -rf /mnt/btrfs/@rootfs/var/log/*
sudo rm -rf /mnt/btrfs/@rootfs/var/cache/*
  1. Отредактируйте fstab для монтирования подтопов при запуске
    Примечание: здесь параметры монтирования важны! Это то, что система будет использовать.
# создайте точки монтирования в оригинальных каталогах в fstab
sudo nano /mnt/btrfs/@rootfs/etc/fstab
# измените fstab, используйте те же параметры, что и для команд монтирования
    UUID=... /               btrfs   defaults,noatime,compress=zstd:3,subvol=@rootfs 0       0
    UUID=... /home           btrfs   defaults,noatime,compress=zstd:3,subvol=@home 0       0
    UUID=... /var/log        btrfs   defaults,noatime,compress=zstd:3,subvol=@varlog 0       0
    UUID=... /var/cache      btrfs   defaults,noatime,compress=zstd:3,subvol=@varcache 0       0
  1. Отмонтируйте временные монтирования и перезагрузите систему
# отмонтируйте подтомы
sudo umount /mnt/home
sudo umount /mnt/var/log
sudo umount /mnt/var/cache
sudo umount /mnt/btrfs

# Следующие 2 строки являются опциональными, но это просто, чтобы убедиться, что fstab корректен
sudo systemctl daemon-reload
sudo mount -a

sudo reboot
  1. После перезагрузки все должно быть так, как мы хотели для нашей целевой настройки.
# после перезагрузки проверьте, правильно ли смонтированы корень и подтомы
mount | grep "https://serverfault.com/"
mount | grep ' /home '
mount | grep ' /var/'

# теперь пересжимаем подтомы, используя btrfs filesystem defragment
sudo btrfs filesystem defragment -r -v -czstd /home
sudo btrfs filesystem defragment -r -v -czstd /var/log
sudo btrfs filesystem defragment -r -v -czstd /var/cache

# и также корневой под-том
sudo btrfs filesystem defragment -r -v -czstd /

И это все. Далее вы можете сделать снимок / и /home либо вручную, либо установить snapper и использовать его.

Я надеюсь, что кто-то найдет это полезным и жду любые комментарии и предложения.

С уважением,
B.

Ответ или решение

Настройка Btrfs подуровней в Debian 12: Подробное руководство

Для многих пользователей, работающих с файловой системой Btrfs в Debian 12, основной трудностью является невозможность создания подуровней (subvolumes) во время установки операционной системы. В отличие от других дистрибутивов, Debian пока не предоставляет такой возможности в стандартном установщике. Тем не менее, это не означает, что создание подуровней невозможно; это лишь требует некоторых дополнительных действий после установки. В данной статье я опишу процесс создания подуровней на базе Btrfs, рассмотрю его преимущества и возможные улучшения.

Теория

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

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

Пример: Пошаговая реализация

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

  1. Установка системы Debian: Установите Debian, используя стандартную установку, на одном разделе с файловой системой Btrfs, который будет смонтирован в корень (/), затем перезагрузите в установленную систему и войдите по SSH.
  2. Создание временных точек монтирования:
  3. sudo mkdir -p /mnt/btrfs
    sudo mkdir -p /mnt/home
    sudo mkdir -p /mnt/var/log
    sudo mkdir -p /mnt/var/cache
  4. Монтирование rootfs в режиме только для чтения: для этого потребуется перезагрузиться, изменив файл fstab, чтобы добавить атрибута ro (только для чтения) для точки монтирования /.
  5. Повторное монтирование rootfs в режиме чтения-записи: снова смонтируйте топовый подуровень, чтобы создать подуровни:
  6. sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvolid=5 /dev/disk/by-uuid/UUID /mnt/btrfs
  7. Создание подуровней: создайте необходимые подуровни:
  8. sudo btrfs subvolume create /mnt/btrfs/@home
    sudo btrfs subvolume create /mnt/btrfs/@varlog
    sudo btrfs subvolume create /mnt/btrfs/@varcache
  9. Монтирование подуровней в временные точки: используйте правильные опции монтирования:
  10. sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvol=@home /dev/disk/by-uuid/UUID /mnt/home
    sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvol=@varlog /dev/disk/by-uuid/UUID /mnt/var/log
    sudo mount -t btrfs -o defaults,noatime,compress=zstd:3,subvol=@varcache /dev/disk/by-uuid/UUID /mnt/var/cache
  11. Копирование содержимого каталогов: переместите данные из /home, /var/log и /var/cache в соответствующие временные точки монтирования.
  12. Очистка оригинальных каталогов: удалите содержимое оригинальных каталогов, оставив сам каталог нетронутым для использования в качестве точки монтирования.
  13. Редактирование fstab для автоматического монтирования подуровней при загрузке: внесите изменения, чтобы монтировать подуровни в свои настоящие местоположения:
  14. sudo nano /mnt/btrfs/@rootfs/etc/fstab
    UUID=... /               btrfs   defaults,noatime,compress=zstd:3,subvol=@rootfs 0       0
    UUID=... /home           btrfs   defaults,noatime,compress=zstd:3,subvol=@home 0       0
    UUID=... /var/log        бtrfs   defaults,noatime,compress=zstd:3,subvol=@varlog 0       0
    UUID=... /var/cache      btrfs   defaults,noatime,compress=zstd:3,subvol=@varcache 0       0
  15. Демонтирование временных точек и перезагрузка системы: убедитесь, что все работает как следует после перезагрузки.

Применение

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

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

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

Капча загружается...