независимая поисковая система для VPS, ранжированных по цене

совпадений не найдено

Установка ZFS на корневой раздел в работающем VPS

Это руководство объясняет, как установить ZFS в качестве корневой файловой системы на VPS с существующей установкой Linux без потери данных. VPS будет иметь небольшой загрузочный раздел EXT4 для GRUB2 с ядром и initrd, а также большой пул ZFS, смонтированный на корневой раздел с включенным сжатием. Большинство команд будет выполняться с образа live CD, и будет показано обходное решение, если VPS не поддерживает монтирование ISO-образов.

Содержание:
1. Создайте резервную копию данных
2. Загрузите live OS образ
3. Установите ZFS в среде live OS
4. Разделите диск VPS
5. Установите ZFS на диск VPS
6. Восстановите резервную копию на новую корневую файловую систему ZFS
7. Установка GRUB2
8. Загрузка в ZFS root pool
Шаг 1: Резервное копирование данных
Если у вас есть второй VPS или домашний компьютер с достаточным объемом памяти для хранения резервной копии, выполните на этом компьютере следующую команду:
# rsync -aqrxz root@target:/ backup.d
где target — это имя хоста VPS, который вы преобразуете. Это скопирует всю корневую файловую систему по SSH на резервный компьютер, и восстановление этой резервной копии на целевом VPS позже будет простым. Если вам нужно сжать резервную копию из-за нехватки места, вы можете вместо этого создать сжатый архив TGZ:
# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
Однако при восстановлении корневой файловой системы из архива TAR потребуется воссоздать все символьные ссылки, чьи цели имеют абсолютные пути, поскольку TAR преобразует их цели в относительные пути, поэтому использование rsync является более простым вариантом. Как правильно восстановить архив TAR, будет показано позже.
Шаг 2: Загрузка live OS образа
Преобразование в ZFS будет выполнено с использованием live CD операционной системы. В зависимости от возможностей вашей панели управления VPS, у вас может быть уже готовый live OS образ для загрузки. В противном случае, вы можете загрузить live ISO Debian с зеркала Debian и загрузить его в панель управления VPS, затем загрузиться с этого ISO; это будет работать даже если ваш VPS использует другое дистрибутив. Будьте внимательны, чтобы использовать именно live OS ISO образ, а не установочный ISO, так как установочные образы не содержат apt и не могут установить необходимое программное обеспечение в live среду. Если ваша панель управления VPS поддерживает загрузку с пользовательского ISO образа, перейдите к Шагу 3, в противном случае вы все еще можете загрузить загруженный ISO, преобразовав раздел подкачки, если он есть, в EXT4 и сохранив ISO в этом освобожденном пространстве, затем GRUB2 может быть настроен для загрузки с этого ISO. Это делается следующим образом:
# fdisk --list /dev/vda
Диск /dev/vda: 35 GiB, 37580963840 байт, 73400320 секторов
Единицы: секторы по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x495b5ce4

Устройство Загрузка Начало Конец Секторы Размер Id Тип
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
Этот VPS имеет раздел подкачки на 2 ГБ в /dev/vda2, который достаточно велик для хранения ISO. Создайте файловую систему EXT4, смонтируйте её и загрузите на неё ISO:
# swapoff /dev/vda2     # отключить раздел подкачки
# mkfs.ext4 /dev/vda2   # создать файловую систему EXT4
# mount /dev/vda2 /mnt  # смонтировать освобождённое пространство
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
затем настройте GRUB2 для загрузки с этого ISO; отредактируйте /etc/grub.d/40_custom следующим образом:
#!/bin/sh
exec tail -n +3 $0
# Этот файл предоставляет простой способ добавления пользовательских пунктов меню. Просто введите
# пункты меню, которые вы хотите добавить, после этого комментария. Будьте осторожны, не изменяйте
# строку 'exec tail' выше.

menuentry "Live ISO" {
  set ISOFile="/images/image_file.iso"
  loopback loop (hd0,2)$ISOFile
  linux (loop)/live/vmlinuz boot=live findiso=$ISOFile
  initrd (loop)/live/initrd.img
}
и примените конфигурацию с помощью
update-grub2
Когда вы перезагрузите VPS, меню GRUB2 предложит возможность загрузки с live-образа. Продолжите оттуда, используя VNC rescue console, предоставляемую панелью управления провайдера.
Шаг 3: Установите ZFS в среде live OS
Загрузите live-образ и откройте его терминал. Затем установите пакеты ZFS в среде live OS:
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
Теперь live OS имеет модуль ядра ZFS и утилиты ZFS, необходимые для форматирования корневой файловой системы вашего VPS.
Шаг 4: Разделите диск VPS
Существует два альтернативных сценария для разделения диска VPS:
  1. Если вы сохранили live ISO в /dev/vda2, вы не можете изменять этот раздел сейчас, так как live-система зависит от него, и никакое разделение диска VPS не будет выполнено. ZFS будет отформатирован на существующем разделе /dev/vda2, а /dev/vda1 останется как есть и позже будет перепрофилирован как постоянный загрузочный раздел для хранения ядра и initrd. Перейдите к Шагу 5.
  2. Если ваша рабочая среда не зависит от ISO-файла, хранящегося на диске VPS, переразметьте диск, создав один небольшой загрузочный раздел для GRUB2 и один большой раздел для корневой файловой системы ZFS, который занимает всё оставшееся пространство на диске. Выполните команду fdisk, чтобы создать следующие два раздела:
    # fdisk /dev/vda

    Command (m for help): p

    Disk /dev/vda: 35 GiB, 37580963840 bytes, 73400320 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x495b5ce4

    Device     Boot    Start      End  Sectors Size Id Type
    /dev/vda1           2048 69203583 69201536  33G bf Solaris
    /dev/vda2  *    69203584 73397887  4194304   2G 83 Linux
    Создайте основной загрузочный раздел размером 100 МБ и отметьте его как загрузочный с помощью звездочки (*), с идентификатором раздела = 83 (Linux). Он будет отформатирован как EXT4 для совместимости с GRUB2 и будет содержать загрузочные данные. Затем создайте еще один основной раздел для ZFS с идентификатором = bf (Solaris). Запишите изменения на диск и закройте fdisk. Теперь, когда диск правильно разбит на разделы, вы можете отформатировать загрузочный раздел:
    # mkfs.ext4 /dev/vda2
Шаг 5: Установите ZFS на диск VPS
Отформатируйте /dev/vda1 как том ZFS:
# zpool create -o ashift=12 \
  -O acltype=posixacl -O canmount=on -O compression=zstd \
  -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \
  -O mountpoint=/ -R /mnt \
  rpool /dev/vda1
Этот набор параметров рекомендуется документацией ZFS для обеспечения максимальной совместимости с новейшими и будущими дисками. Параметр compression=zstd включает алгоритм сжатия ZSTD, который имеет более высокий коэффициент сжатия, чем стандартный LZ4, хотя вы можете использовать compression=lz4, чтобы снизить нагрузку на процессор, если ваш VPS имеет высокую нагрузку на диск. Пул назван rpool, что является наиболее часто используемым именем для корневых пулов. Когда эта команда завершится, rpool будет смонтирован в каталог /mnt в live-среде, как указано параметром -R /mnt выше, но он будет автоматически монтироваться на / при каждой последующей загрузке. Монтирование его на /mnt необходимо для восстановления вашей резервной копии на него из live-среды.
Шаг 6: Восстановление резервной копии на новую корневую файловую систему ZFS
Установите сервер OpenSSH в live-среде для получения данных резервной копии с резервного VPS:
# apt install openssh-server
Для упрощения включите PermitRootLogin yes в /etc/ssh/sshd_config в рабочей среде, затем установите безопасный пароль root и перезапустите OpenSSH:
# passwd
# service restart ssh
и начните восстановление резервных данных с резервного VPS, что заполнит корневой пул ZFS, смонтированный на /mnt:
## с резервного VPS
# rsync -arxz backup.d/* root@target:/mnt/
или, если вы использовали TAR для создания резервной копии, восстановите её с помощью:
## с резервного VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
однако, как я писал в Шаге 1, при извлечении TAR преобразует целевой путь абсолютных символических ссылок в относительные пути; все эти ссылки можно правильно восстановить следующим образом. Обратите внимание, что это восстановление не требуется, если вы не использовали TAR для резервного копирования корневой файловой системы. С резервного VPS перечислите все символические ссылки, содержащиеся в архиве:
## с резервного VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
затем скопируйте список на целевую VPS в /mnt, который теперь содержит корневую файловую систему, восстановленную из резервной копии:
## from the backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
На целевой VPS выполните chroot в /mnt и выполните этот Bash-скрипт для восстановления всех абсолютных символьных ссылок:
## from the chroot environment
while read -r row; do
  src=$(echo "$row" | grep -Po '(?<=[0-9]{2}:[0-9]{2} )[^ ]+')
  tgt=$(echo "$row" | grep -Po '(?<= -> ).+')

  echo "linking: $src -> $tgt"
  ln -fs "$tgt" "$src"
done </root/list_of_symlinks.txt
Ваша корневая файловая система теперь полностью восстановлена из резервной копии и может быть загружена, но сначала вам понадобится рабочий загрузчик.
Шаг 7: Установка GRUB2
Если вы находитесь внутри chroot, выйдите из него и вернитесь в live-среду. Затем привяжите виртуальные файловые системы к /mnt и смонтируйте загрузочный раздел:
# mount --bind /dev  /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys  /mnt/sys
# mount /dev/vda2 /mnt/boot
Вы можете скопировать любое существующее содержимое из /mnt/boot/ на новый загрузочный раздел. Перейдите в chroot в корневой пул и, находясь в нем, установите ZFS initramfs hook, модуль ядра ZFS и пользовательские инструменты ZFS, необходимые для создания initrd:
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
затем установите пакет GRUB2:
# apt install grub-pc
# update-initramfs -u -k all
отредактируйте /etc/default/grub, чтобы установить пул ZFS в качестве корневого устройства, изменив переменную GRUB_CMDLINE_LINUX:
## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
затем примените конфигурацию:
# update-grub
и, наконец, установите GRUB2 в MBR:
# grub-install /dev/vda
Шаг 8: Загрузка в корневой пул ZFS
Система готова, полностью восстановлена из резервной копии и может быть загружена. Выйдите из chroot и отмонтируйте все виртуальные файловые системы, затем экспортируйте корневой пул ZFS:
# exit # выйти из chroot rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Теперь вы можете удалить ISO-образ из панели управления VPS, если вы использовали эту опцию, или удалить ISO с жесткого диска и перезагрузить систему в корневой пул ZFS:
# reboot
Преобразование корневой файловой системы VPS с EXT4 на ZFS завершено, и VPS загрузится в вашу старую установленную систему как обычно.

Читать больше статей
Английский Арабский Бенгальский Вьетнамский Индонезийский Испанский Китайский Корейский Малайский Немецкий Польский Португальский Русский Турецкий Филиппинский Французский Японский
Помощь  –  Индекс  –  Политика конфиденциальности  –  Контакты  –