nenhum serviço correspondente encontrado
Instalando o ZFS na Raiz de um VPS em Execução
Este guia explica como instalar o ZFS como o sistema de arquivos raiz de um VPS que contém uma instalação Linux existente sem causar perda de dados. O VPS terá uma pequena partição de inicialização EXT4 para o GRUB2 com o kernel e initrd, e um grande pool ZFS montado na raiz com compressão habilitada. A maioria dos comandos será emitida a partir de uma imagem de live CD e será mostrada uma solução alternativa se o VPS não suportar a montagem de imagens ISO.
- Índice:
- 1. Faça backup dos dados
- 2. Inicialize uma imagem de live OS
- 3. Instale o ZFS no ambiente de live OS
- 4. Particione o disco do VPS
- 5. Instale o ZFS no disco do VPS
- 6. Restaure o backup para o novo sistema de arquivos raiz ZFS
- 7. Instalar o GRUB2
- 8. Inicializar no pool raiz ZFS
- Passo 1: Fazer backup dos dados
-
Se você tiver um segundo VPS ou um computador doméstico com espaço suficiente para armazenar os dados de backup, a partir desse computador, execute:
onde target é o nome do host do VPS que está sendo convertido. Isso copiará todo o sistema de arquivos raiz via SSH para a máquina de backup, e restaurar esse backup no VPS de destino posteriormente será direto. Se você precisar compactar o backup por falta de espaço, pode, alternativamente, criar um arquivo TGZ compactado:
# rsync -aqrxz root@target:/ backup.d
No entanto, ao restaurar um sistema de arquivos raiz a partir de um arquivo TAR, será necessário recriar todos os links simbólicos cujos destinos tenham nomes de caminho absolutos, porque o TAR converte seus destinos em nomes de caminho relativos, então usar o rsync é a alternativa mais simples. Como restaurar corretamente o arquivo TAR será mostrado mais adiante.# ssh root@target "tar -cf - --acls --xattrs --one-file-system --absolute-names /" | gzip -1 >backup.tgz
- Passo 2: Inicialize uma imagem de sistema operacional live
-
A conversão para ZFS será feita a partir de um sistema operacional live CD. Dependendo da capacidade do painel de controle do seu VPS, ele pode já ter uma imagem de sistema operacional live pronta para inicialização. Alternativamente, você pode baixar um ISO live do Debian do espelho do Debian e enviá-lo para o painel de controle do seu VPS, então inicializar o ISO a partir daí; isso funcionará bem mesmo que seu VPS execute uma distribuição diferente. Tenha cuidado para usar uma imagem ISO de sistema operacional live, não uma ISO de instalação, porque as imagens de instalação não possuem apt e não conseguem instalar o software necessário no ambiente live. Se o painel de controle do seu VPS suportar a inicialização a partir de uma imagem ISO fornecida pelo usuário, pule para o Passo 3, caso contrário, você ainda pode inicializar o ISO baixado convertendo uma partição de swap, se existir, em EXT4 e armazenando o ISO nesse espaço de armazenamento recuperado, então o GRUB2 pode ser configurado para inicializar a partir desse ISO. Isso é feito da seguinte forma:
Este VPS possui uma partição de swap de 2GB em /dev/vda2, que é grande o suficiente para armazenar a ISO. Crie o sistema de arquivos EXT4, monte-o e faça o download da ISO nele:
# fdisk --list /dev/vda
Disco /dev/vda: 35 GiB, 37580963840 bytes, 73400320 setores
Unidades: setores de 1 * 512 = 512 bytes
Tamanho de setor (lógico/físico): 512 bytes / 512 bytes
Tamanho de E/S (mínimo/ótimo): 512 bytes / 512 bytes
Tipo de rótulo do disco: dos
Identificador do disco: 0x495b5ce4
Dispositivo Inicialização Início Fim Setores Tamanho Id Tipo
/dev/vda1 * 2048 69203583 69201536 33G 83 Linux
/dev/vda2 69203584 73397887 4194304 2G 82 Linux swap
em seguida, instrua o GRUB2 a inicializar a partir desta ISO; edite /etc/grub.d/40_custom da seguinte forma:# swapoff /dev/vda2 # desabilitar partição de swap
# mkfs.ext4 /dev/vda2 # criar sistema de arquivos EXT4
# mount /dev/vda2 /mnt # montar o espaço recuperado
# mkdir /mnt/images/
# wget -O /mnt/images/image_file.iso <image_URL>
e aplique a configuração com#!/bin/sh
exec tail -n +3 $0
# Este arquivo fornece uma maneira fácil de adicionar entradas personalizadas ao menu. Basta digitar as
# entradas de menu que você deseja adicionar após este comentário. Tenha cuidado para não alterar
# a linha 'exec tail' acima.
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
}
Quando você reiniciar o VPS, o menu do GRUB2 oferecerá a opção de inicializar a partir da imagem live. Prossiga a partir daí usando o console de resgate VNC oferecido pelo painel de controle do provedor.update-grub2
- Passo 3: Instale o ZFS no ambiente do sistema operacional live
-
Inicialize a imagem do sistema operacional live e acesse seu terminal. Em seguida, instale os pacotes do ZFS no ambiente do sistema operacional live:
Agora, o sistema operacional live possui o módulo do kernel ZFS e os utilitários ZFS necessários para formatar o sistema de arquivos raiz do seu VPS.
# echo deb http://deb.debian.org/debian stretch contrib >> /etc/apt/sources.list
# apt update
# apt install zfs-dkms
# modprobe zfs
- Passo 4: Particione o disco do VPS
-
Existem dois cenários alternativos para particionar o disco do VPS:
- Se você armazenou a ISO live em /dev/vda2, você não deve alterar essa partição agora, pois o sistema live depende dela, e nenhuma particionamento será feito no disco do VPS. O ZFS será formatado na partição existente /dev/vda2, e /dev/vda1 permanecerá como está e posteriormente será reutilizado como sua partição de boot permanente para armazenar o kernel e o initrd. Pule para Passo 5.
-
Se o seu ambiente ao vivo não depender de um arquivo ISO armazenado no disco do VPS, reparticione o disco criando uma pequena partição de inicialização para o GRUB2 e uma partição grande para a raiz do ZFS que se estenda por todo o espaço restante do disco. Execute o fdisk para criar as duas seguintes partições:
Crie uma partição de inicialização primária com 100MB de largura e marque-a como inicializável com um asterisco (*), com um ID de partição = 83 (Linux). Ela será formatada como EXT4 para compatibilidade com o GRUB2 e conterá os dados de inicialização. Em seguida, crie outra partição primária para o ZFS, com ID = bf (Solaris). Escreva as alterações no disco e feche o fdisk. Agora que o disco está corretamente particionado, você pode formatar a partição de inicialização:
# 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
- Passo 5: Instale o ZFS no disco do VPS
-
Formate /dev/vda1 como um volume ZFS:
Este conjunto de opções é recomendado pela documentação do ZFS para a maior compatibilidade com os discos mais novos e futuros. A opção compression=zstd habilita o algoritmo de compressão ZSTD, que possui uma taxa de compressão maior que o LZ4 padrão, embora você possa usar compression=lz4 para reduzir o uso da CPU se o seu VPS tiver alto I/O de disco. O pool é nomeado rpool, que é o nome mais comumente usado para pools raiz. Quando este comando for concluído, rpool será montado no diretório /mnt do ambiente live, conforme especificado pela opção -R /mnt acima, mas será montado automaticamente em / em todas as inicializações subsequentes. Montá-lo em /mnt é necessário para restaurar seu backup nele a partir do ambiente 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
- Passo 6: Restaurar o backup para o novo sistema de arquivos ZFS raiz
-
Instale o servidor OpenSSH no ambiente live para receber os dados de backup do VPS de backup:
Para simplificar, habilite PermitRootLogin yes em /etc/ssh/sshd_config do ambiente ativo, defina uma senha root segura e reinicie o OpenSSH:
# apt install openssh-server
e inicie a restauração dos dados de backup do VPS de backup, que irá preencher o pool raiz ZFS montado em /mnt:# passwd
# service restart ssh
ou, se você usou TAR para criar um arquivo de backup, restaure-o com:## from the backup VPS
# rsync -arxz backup.d/* root@target:/mnt/
no entanto, como escrevi em Passo 1, ao extrair, o TAR converte o caminho de destino dos links simbólicos absolutos em caminhos relativos; esses links simbólicos podem ser todos corretamente restaurados da seguinte forma. Observe que essa restauração não é necessária se você não usou o TAR para fazer backup do sistema de arquivos raiz. Do VPS de backup, liste todos os links simbólicos contidos no arquivo:## from the backup VPS
# cat backup.tgz | ssh root@target "tar -C /mnt -zaxf -"
então copie a lista para o VPS de destino em /mnt, que agora contém o sistema de arquivos raiz repovoado a partir do backup:## from the backup VPS
# tar -tvf backup.tgz | egrep -- '->' >list_of_symlinks.txt
A partir do VPS de destino, chroot em /mnt e execute este script Bash para restaurar todos os links simbólicos absolutos:## from the backup VPS
# scp list_of_symlinks.txt root@target:/mnt/root/
Seu sistema de arquivos raiz agora está totalmente restaurado a partir do backup e pode ser inicializado, mas você precisa de um gerenciador de inicialização funcional primeiro.## 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
- Passo 7: Instale o GRUB2
-
Se você estiver dentro do chroot, saia dele e retorne ao ambiente live. Em seguida, vincule os sistemas de arquivos virtuais a /mnt e monte a partição de boot:
Você pode optar por copiar qualquer conteúdo pré-existente de /mnt/boot/ para a nova partição de boot. Entre no chroot do pool raiz e, a partir dele, instale o hook initramfs do ZFS, o módulo do kernel ZFS e as ferramentas de espaço do usuário do ZFS necessárias para gerar o initrd:
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys
# mount /dev/vda2 /mnt/boot
então instale o pacote GRUB2:# chroot /mnt
# apt install pkg-dev linux-headers-amd64 linux-image-amd64
# apt install zfs-dkms zfs-initramfs
edite /etc/default/grub para definir o pool ZFS como o dispositivo raiz, modificando a variável GRUB_CMDLINE_LINUX:# apt install grub-pc
# update-initramfs -u -k all
então aplique a configuração:## this is /etc/default/grub
GRUB_CMDLINE_LINUX="root=ZFS=rpool"
e finalmente instale o GRUB2 no MBR:# update-grub
# grub-install /dev/vda
- Passo 8: Inicialize no pool ZFS raiz
-
O sistema está pronto, totalmente restaurado a partir do backup, e pode ser inicializado. Saia do chroot e desmonte todos os sistemas de arquivos virtuais, então exporte o pool ZFS raiz:
Agora você pode remover a imagem ISO do painel de controle do VPS, se você usou essa opção, ou excluir a ISO do disco rígido, e reiniciar o sistema no pool raiz ZFS:
# exit # saia do chroot do rpool
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/boot
# umount /mnt
# zpool export -a
A conversão do sistema de arquivos raiz do VPS de EXT4 para ZFS está concluída, e o VPS será inicializado no seu sistema instalado anteriormente, como de costume.# reboot
Leia mais artigos
