совпадений не найдено
Установка 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. Это делается следующим образом:
# 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
# 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
}
update-grub2
- Шаг 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
- Шаг 4: Разделите диск VPS
-
Существует два альтернативных сценария для разделения диска VPS:
- Если вы сохранили live ISO в /dev/vda2, вы не можете изменять этот раздел сейчас, так как live-система зависит от него, и никакое разделение диска VPS не будет выполнено. ZFS будет отформатирован на существующем разделе /dev/vda2, а /dev/vda1 останется как есть и позже будет перепрофилирован как постоянный загрузочный раздел для хранения ядра и initrd. Перейдите к Шагу 5.
-
Если ваша рабочая среда не зависит от 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
# 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
- Шаг 6: Восстановление резервной копии на новую корневую файловую систему ZFS
-
Установите сервер OpenSSH в live-среде для получения данных резервной копии с резервного VPS:
# apt install openssh-server
# passwd
# service restart ssh
## с резервного VPS
# rsync -arxz backup.d/* root@target:/mnt/
## с резервного VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
## с резервного VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
## 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 и смонтируйте загрузочный раздел:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
# apt install grub-pc
# update-initramfs -u -k all
## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
# update-grub
# 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
# reboot
Читать больше статей