Clonando um notebook usando NVME TCP
- Recentemente comprei um notebook novo e precisava configurá-lo para uso.
- Eu não tinha motivação para repetir as etapas já conhecidas.
- Por sugestão de um colega, considerei uma forma de copiar o disco antigo para o notebook novo.
Dúvidas sobre o processo de clonagem
- Eu não tinha uma ferramenta para abrir o notebook antigo e conectar o novo disco via USB.
- Eu uso criptografia de disco completa, e o notebook antigo usa um NVME de 512GB, enquanto o novo usa um NVME de 1TB.
- Eu não tinha familiaridade com redimensionamento de partições LUKS.
A sugestão do colega
- Ele sugeriu usar NVME over TCP para compartilhar o disco pela rede e fazer uma cópia completa do disco.
- As etapas sugeridas foram as seguintes:
- Exportar o disco do notebook antigo usando
nvmet-tcp.
- Fazer a cópia do disco para o notebook novo.
- Redimensionar a partição para usar todo o 1TB.
- Redimensionar o LUKS.
- Por fim, redimensionar o disco raiz BTRFS.
Exportando o disco via NVME TCP
- Foi sugerido que a forma mais fácil seria usar
systemd-storagetm.service.
- Em vez disso, inicializei os dois notebooks com o GRML rescue CD e executei as etapas para exportar o disco NVME usando o módulo
nvmet-tcp.
Cópia do disco
- Usei o comando
dd para copiar o disco raiz para o notebook novo.
- Como o notebook novo não tinha porta Ethernet, tive de usar apenas Wi-Fi, e levaram cerca de 7 horas e meia para copiar os 512GB completos.
- A velocidade de cópia ficou em torno de 18-20MB/s.
Redimensionando partições e o contêiner LUKS
- Ao executar
parted, ele detectou que a tabela de partições não correspondia ao tamanho do disco e pediu correção.
- Instalei
cloud-guest-utils e usei growpart para expandir a partição até 1TB.
- Usei
cryptsetup-resize para aumentar o tamanho do contêiner LUKS.
- Depois de entrar no sistema, redimensionei o sistema de arquivos BTRFS.
Conclusão
- A única vantagem desse processo é que você pode usar o notebook novo tendo exatamente a mesma sensação de uso do notebook antigo.
- Normalmente leva de 1 a 2 semanas para configurar um notebook novo, mas neste caso foi possível economizar esse tempo.
- Há também o benefício adicional de ter aprendido como exportar um disco usando NVME over TCP.
Opinião do GN⁺
- Clonar um notebook com NVME over TCP apresenta uma forma eficiente de migrar rapidamente o ambiente do sistema existente para um novo hardware.
- Essa técnica pode ser interessante para administradores de sistemas e desenvolvedores como uma forma de economizar tempo e minimizar erros de configuração.
- No entanto, ela depende bastante da velocidade da rede, e se apenas Wi-Fi estiver disponível, o processo pode levar bastante tempo, o que é uma desvantagem a considerar.
- Existem ferramentas como Clonezilla ou Acronis que oferecem funcionalidades semelhantes, mas o NVME over TCP tem a vantagem única de permitir acesso direto ao disco pela rede.
- Ao adotar essa técnica, é necessário ter conhecimento suficiente sobre configuração de rede, tratamento de discos criptografados e redimensionamento de sistemas de arquivos.
1 comentários
Comentário no Hacker News
No cenário do autor, não há vantagem em usar NVMe/TCP. Como ele simplesmente usa
ddpara fazer uma cópia serial em nível de bloco, não aproveita I/O simultâneo. Os comandos complexos podem ser substituídos por um simplesnetcat.$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1M.$ nc x.x.x.x 1234 </dev/nvme0nX.ddfaz buffer das gravações, tornando o processo mais rápido e eficiente. Se adicionargzip/gunzipna origem/destino, todo o processo fica muito mais rápido quando o disco não está cheio. Esse é meu jeito favorito de criar imagens de PCs pela rede. Vale a pena passar a opção--fastpara ogzip, ou trocá-lo porlz4/unlz4, que é mais rápido. Usei isso recentemente para criar a imagem de um notebook Windows novo com NVMe de 1TB; levou cerca de 20 minutos via GigE, e a imagem resultante tinha 20GB. Normalmente guardo essa imagem emlz4como backup e, alguns anos depois, quando vou doar o notebook, restauro comunlz4 | dd. É extremamente prático.nvme-tcp, mas todo dia se aprende algo novo. A utilidade desse módulo parece estar mais em montar um sistema de arquivos em um NVMe remoto do que em fazer acesso bruto comdd.dd bs=Xtecnicamente não precisa ser maior que isso. Ainda assim,bs=1Mnão atrapalha (ele faz buffer de leituras de 64kB até chegar a 1MB) e continua servindo no futuro caso o tamanho do pipe aumente. Algumas versões donetcattêm opções para controlar o tamanho dos blocos de entrada e saída, o que reduz a necessidade de usardd bs=X, mas em discos de recuperação normalmente se usa um binárionetcatsem essas opções.Usar
nbdkitenbdcopyé muito mais simples.nbdkit file /dev/nvme0n1nbdcopy nbd://otherlaptop localfileQuando precisei configurar um notebook novo, foi útil transferir a 10Gb/s usando um cabo USB-C. A única outra opção era Wi‑Fi.
rsync. Parecia que o link já estava saturado, então usar outro protocolo não faria diferença.Recentemente precisei copiar cerca de 200GB de arquivos por Wi‑Fi. Usei
rsyncpara não ter que recomeçar do zero se a conexão caísse, mas ainda assim levou pelo menos 6 horas. Gostaria de saber se existe uma forma melhor.dd? É preciso comparar o md5 do dispositivo em nível de bloco resultante?Não entendo por que o autor não usou
btrfspela rede. Primeiro cria-se um snapshot dobtrfse depois usa-sebtrfs send => nc => network => nc => btrfs receivepara transferir apenas os blocos em uso.Já fiz migração de notebooks antes executando um instalador que combinava
ddencem ambos os lados. Pelo que me lembro, também adicioneigzippara acelerar a transferência.Com
Clonezilla, você pode copiar apenas os blocos de dados reais e ajustar automaticamente as partições. Sempre uso esse método.Há décadas eu não "instalo" um sistema operacional de fato; eu copio os arquivos e ajusto o que for necessário. Em geral, aproveito para criar um novo sistema de arquivos e atualizar o tipo/parâmetros do sistema de arquivos (por exemplo, tamanho de bloco), criptografia etc., e transfiro os arquivos com
rsync.NixOS. Nesse caso, basta copiar a configuração e reinstalar tudo automaticamente.Não houve nenhuma menção ao FDT (Fast Data Transfer).
-limit <rate>. É possível usar K(KiloBytes/s), M(MegaBytes/s) e G(GigaBytes/s) como sufixos.