Clonar una laptop usando NVMe TCP
- Hace poco compré una laptop nueva y tenía que configurarla para usarla.
- No tenía ganas de repetir los pasos de siempre que ya son conocidos.
- Por sugerencia de un colega, consideré copiar el disco existente a la laptop nueva.
Dudas sobre el proceso de clonación
- No tenía una herramienta para abrir la laptop vieja y conectar el disco nuevo por USB.
- Uso cifrado completo de disco, y la laptop anterior usa un NVME de 512GB, mientras que la nueva usa uno de 1TB.
- No estoy familiarizado con el redimensionamiento de particiones LUKS.
La propuesta del colega
- Me sugirió usar NVME over TCP para compartir el disco por la red y realizar una copia completa del disco.
- Los pasos propuestos fueron los siguientes:
- Exportar el disco desde la laptop vieja usando nvmet-tcp.
- Realizar la copia del disco desde la laptop nueva.
- Redimensionar la partición para usar todo el 1TB.
- Redimensionar LUKS.
- Por último, redimensionar el disco raíz BTRFS.
Exportar el disco mediante NVME TCP
- Se sugirió que la forma más sencilla era usar
systemd-storagetm.service.
- En su lugar, arranqué ambas laptops con un CD de rescate de GRML y seguí los pasos para exportar el disco NVME usando el módulo nvmet-tcp.
Copia del disco
- Usé el comando
dd para copiar el disco raíz a la laptop nueva.
- Como la laptop nueva no tenía puerto Ethernet, tuve que usar solo Wi‑Fi, y copiar los 512GB completos tomó unas 7 horas y media.
- La velocidad de copia fue de unos 18-20MB/s.
Redimensionar la partición y el contenedor LUKS
- Al ejecutar
parted, detectó que la tabla de particiones no coincidía con el tamaño del disco y pidió corregirlo.
- Instalé
cloud-guest-utils y usé growpart para ampliar la partición hasta 1TB.
- Usé
cryptsetup-resize para aumentar el tamaño del contenedor LUKS.
- Después de iniciar sesión en el sistema, redimensioné el sistema de archivos BTRFS.
Conclusión
- La única ventaja de este proceso es que puedes usar la laptop nueva sintiendo que estás usando la anterior.
- Configurar una laptop nueva normalmente toma entre 1 y 2 semanas, pero en este caso pude ahorrarme ese tiempo.
- Un beneficio adicional es que aprendí a exportar un disco usando NVME over TCP.
Opinión de GN⁺
- Clonar una laptop con NVME over TCP plantea una forma eficiente de migrar rápidamente el entorno de un sistema existente a hardware nuevo.
- Esta tecnología puede resultar interesante para administradores de sistemas o desarrolladores como una manera de ahorrar tiempo y minimizar errores de configuración.
- Sin embargo, depende en gran medida de la velocidad de la red, y si solo se usa Wi‑Fi puede tomar bastante tiempo, así que ese es un punto en contra a considerar.
- Existen herramientas como Clonezilla o Acronis que ofrecen funciones similares, pero NVME over TCP tiene la ventaja distintiva del acceso directo al disco a través de la red.
- Para adoptar esta técnica, se necesita conocimiento suficiente sobre configuración de red, manejo de discos cifrados y redimensionamiento de sistemas de archivos.
1 comentarios
Comentarios en Hacker News
En el escenario del autor no hay ninguna ventaja en usar NVMe/TCP. Como simplemente usa
ddpara hacer una copia serial de bloques, no aprovecha la E/S concurrente. Los comandos complejos podrían reemplazarse por un simplenetcat.$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1M.$ nc x.x.x.x 1234 </dev/nvme0nX.ddhace buffering de las escrituras, lo que lo vuelve más rápido y eficiente. Si se agregagzip/gunzipen el origen/destino, todo el proceso se vuelve mucho más rápido cuando el disco no está lleno. Esta es mi forma favorita de crear imágenes de PC por red. Conviene pasar la opción--fastagzip, o reemplazarlo porlz4/unlz4, que es más rápido. Lo usé recientemente para hacer una imagen de una nueva laptop con Windows con un NVMe de 1 TB, tomó unos 20 minutos por GigE y la imagen resultante fue de 20 GB. Normalmente guardo esa imagen enlz4y años después, cuando dono la laptop, la restauro conunlz4 | dd. Es muy práctico.nvme-tcp, pero todos los días se aprende algo nuevo. La utilidad de este módulo está más en montar un sistema de archivos sobre un NVMe remoto que en hacer acceso crudo condd.dd bs=Xno necesita ser mayor que eso. Sin embargo,bs=1Mno hace daño (va almacenando lecturas de 64 kB hasta llegar a 1 MB) y además sirve a futuro por si el tamaño del pipe aumenta. Algunas versiones denetcattienen opciones para controlar el tamaño de bloque de entrada y salida, lo que reduce la necesidad de usardd bs=X, pero en discos de rescate del sistema normalmente se usa un binario denetcatque no incluye esas opciones.Usar
nbdkitynbdcopyes mucho más sencillo.nbdkit file /dev/nvme0n1nbdcopy nbd://otherlaptop localfileCuando tuve que configurar una laptop nueva, fue útil transferir por un cable USB-C a 10 Gb/s. La única otra opción era WiFi.
rsync. Parecía que el enlace ya estaba saturado, así que usar otro protocolo no tenía sentido.Hace poco tuve que copiar unos 200 GB de archivos por WiFi. Usé
rsyncpara no tener que empezar de nuevo desde cero si fallaba la conexión, pero igual tomó al menos 6 horas. Me pregunto si hay una mejor forma.dd? ¿Habría que comparar el md5 del dispositivo de bloques resultante?No entiendo por qué el autor no hizo un pipe de
btrfspor la red. Primero se crea un snapshot debtrfs, y luego conbtrfs send => nc => network => nc => btrfs receivese transfieren solo los bloques en uso.Antes, al migrar laptops, ejecuté un instalador que combinaba
ddyncen ambos lados. Si mal no recuerdo, también agregabagzippara acelerar la transferencia.Si usas
Clonezilla, copia solo los bloques de datos reales y puede ajustar automáticamente las particiones. Yo siempre lo hago así.En realidad no he "instalado" un OS en décadas; simplemente copio archivos y ajusto lo necesario. Normalmente aprovecho para crear un sistema de archivos nuevo y actualizar el tipo/parámetros del sistema de archivos (por ejemplo, el tamaño de bloque), cifrado, etc., y transfiero los archivos con
rsync.NixOS. Ahí solo copias la configuración y luego puedes reinstalar todo automáticamente.No hay ninguna mención de FDT (Fast Data Transfer).
-limit <rate>se puede limitar la velocidad de transferencia a la tasa especificada. Se pueden usar los sufijos K (KiloBytes/s), M (MegaBytes/s) y G (GigaBytes/s).