не найдено подходящих услуг
Установка 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 или домашний компьютер с достаточным объемом памяти для хранения резервной копии, выполните на этом компьютере следующую команду:
где target — это имя хоста VPS, который вы преобразуете. Это скопирует всю корневую файловую систему по SSH на резервный компьютер, и восстановление этой резервной копии на целевом VPS позже будет простым. Если вам нужно сжать резервную копию из-за нехватки места, вы можете вместо этого создать сжатый архив TGZ:
# rsync -aqrxz root@target:/ backup.d
Однако при восстановлении корневой файловой системы из архива TAR потребуется воссоздать все символьные ссылки, чьи цели имеют абсолютные пути, поскольку TAR преобразует их цели в относительные пути, поэтому использование rsync является более простым вариантом. Как правильно восстановить архив TAR, будет показано позже.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Шаг 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. Это делается следующим образом:
Этот VPS имеет раздел подкачки на 2 ГБ в /dev/vda2, который достаточно велик для хранения ISO. Создайте файловую систему EXT4, смонтируйте её и загрузите на неё 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
затем настройте GRUB2 для загрузки с этого ISO; отредактируйте /etc/grub.d/40_custom следующим образом:# swapoff /dev/vda2 # отключить раздел подкачки
# mkfs.ext4 /dev/vda2 # создать файловую систему EXT4
# mount /dev/vda2 /mnt # смонтировать освобождённое пространство
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
и примените конфигурацию с помощью#!/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
}
Когда вы перезагрузите VPS, меню GRUB2 предложит возможность загрузки с live-образа. Продолжите оттуда, используя VNC rescue console, предоставляемую панелью управления провайдера.update-grub2
- Шаг 3: Установите ZFS в среде live OS
-
Загрузите live-образ и откройте его терминал. Затем установите пакеты ZFS в среде live OS:
Теперь live OS имеет модуль ядра ZFS и утилиты ZFS, необходимые для форматирования корневой файловой системы вашего VPS.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Шаг 4: Разделите диск VPS
-
Существует два альтернативных сценария для разделения диска VPS:
- Если вы сохранили live ISO в /dev/vda2, вы не можете изменять этот раздел сейчас, так как live-система зависит от него, и никакое разделение диска VPS не будет выполнено. ZFS будет отформатирован на существующем разделе /dev/vda2, а /dev/vda1 останется как есть и позже будет перепрофилирован как постоянный загрузочный раздел для хранения ядра и initrd. Перейдите к Шагу 5.
-
Если ваша рабочая среда не зависит от ISO-файла, хранящегося на диске VPS, переразметьте диск, создав один небольшой загрузочный раздел для GRUB2 и один большой раздел для корневой файловой системы ZFS, который занимает всё оставшееся пространство на диске. Выполните команду fdisk, чтобы создать следующие два раздела:
Создайте основной загрузочный раздел размером 100 МБ и отметьте его как загрузочный с помощью звездочки (*), с идентификатором раздела = 83 (Linux). Он будет отформатирован как EXT4 для совместимости с GRUB2 и будет содержать загрузочные данные. Затем создайте еще один основной раздел для ZFS с идентификатором = bf (Solaris). Запишите изменения на диск и закройте 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
# mkfs.ext4 /dev/vda2
- Шаг 5: Установите ZFS на диск VPS
-
Отформатируйте /dev/vda1 как том ZFS:
Этот набор параметров рекомендуется документацией ZFS для обеспечения максимальной совместимости с новейшими и будущими дисками. Параметр compression=zstd включает алгоритм сжатия ZSTD, который имеет более высокий коэффициент сжатия, чем стандартный LZ4, хотя вы можете использовать compression=lz4, чтобы снизить нагрузку на процессор, если ваш VPS имеет высокую нагрузку на диск. Пул назван rpool, что является наиболее часто используемым именем для корневых пулов. Когда эта команда завершится, rpool будет смонтирован в каталог /mnt в live-среде, как указано параметром -R /mnt выше, но он будет автоматически монтироваться на / при каждой последующей загрузке. Монтирование его на /mnt необходимо для восстановления вашей резервной копии на него из live-среды.
# 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
- Шаг 6: Восстановление резервной копии на новую корневую файловую систему ZFS
-
Установите сервер OpenSSH в live-среде для получения данных резервной копии с резервного VPS:
Для упрощения включите PermitRootLogin yes в /etc/ssh/sshd_config в рабочей среде, затем установите безопасный пароль root и перезапустите OpenSSH:
# apt install openssh-server
и начните восстановление резервных данных с резервного VPS, что заполнит корневой пул ZFS, смонтированный на /mnt:# passwd
# service restart ssh
или, если вы использовали TAR для создания резервной копии, восстановите её с помощью:## с резервного VPS
# rsync -arxz backup.d/* root@target:/mnt/
однако, как я писал в Шаге 1, при извлечении TAR преобразует целевой путь абсолютных символических ссылок в относительные пути; все эти ссылки можно правильно восстановить следующим образом. Обратите внимание, что это восстановление не требуется, если вы не использовали TAR для резервного копирования корневой файловой системы. С резервного VPS перечислите все символические ссылки, содержащиеся в архиве:## с резервного VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
затем скопируйте список на целевую VPS в /mnt, который теперь содержит корневую файловую систему, восстановленную из резервной копии:## с резервного VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
На целевой VPS выполните chroot в /mnt и выполните этот Bash-скрипт для восстановления всех абсолютных символьных ссылок:## from the backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
Ваша корневая файловая система теперь полностью восстановлена из резервной копии и может быть загружена, но сначала вам понадобится рабочий загрузчик.## 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 и смонтируйте загрузочный раздел:
Вы можете скопировать любое существующее содержимое из /mnt/boot/ на новый загрузочный раздел. Перейдите в chroot в корневой пул и, находясь в нем, установите ZFS initramfs hook, модуль ядра ZFS и пользовательские инструменты ZFS, необходимые для создания initrd:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
затем установите пакет GRUB2:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
отредактируйте /etc/default/grub, чтобы установить пул ZFS в качестве корневого устройства, изменив переменную GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
затем примените конфигурацию:## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
и, наконец, установите GRUB2 в MBR:# update-grub
# grub-install /dev/vda
- Шаг 8: Загрузка в корневой пул ZFS
-
Система готова, полностью восстановлена из резервной копии и может быть загружена. Выйдите из chroot и отмонтируйте все виртуальные файловые системы, затем экспортируйте корневой пул ZFS:
Теперь вы можете удалить ISO-образ из панели управления VPS, если вы использовали эту опцию, или удалить ISO с жесткого диска и перезагрузить систему в корневой пул ZFS:
# exit # выйти из chroot rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
Преобразование корневой файловой системы VPS с EXT4 на ZFS завершено, и VPS загрузится в вашу старую установленную систему как обычно.# reboot
Читать больше статей
