Aunque al principio el "desafío" propuesto puede parecer difícil, no factible o ingenuo como algunos han comentado, no lo es. La idea principal detrás del uso de dd para migrar de un disco más grande a uno más pequeño está perfectamente bien y tiene beneficios para migrar los datos. Por supuesto, tener un espacio libre suficiente para que los datos ocupados quepan en el disco de destino es un requisito necesario.
La idea es pensar en dd'ing cada partición individualmente y no todo el disco a la vez como se propuso inicialmente. Se puede lograr aún más: las particiones que se truncarían también se pueden migrar de forma segura con un poco de ayuda de las herramientas de cambio de tamaño del sistema de archivos. De hecho, este tipo de migración es interesante para preservar los matadatos del sistema de archivos y los atributos de archivo extendidos que no se pueden copiar fácilmente con herramientas como cp, rsync, pax, ... que operan en la capa del sistema de archivos y no bloquean la capa del dispositivo. El uso de dd elimina la necesidad de reinstalar el sistema operativo o tener que volver a etiquetar el FS para evitar problemas con SELinux.
A continuación se muestra lo que suelo hacer para realizar tareas similares:
1) Primero debe reducir los sistemas de archivos dentro de las particiones afectadas que se truncarían. Para esto, use la herramienta resize2fs (suponiendo que estamos hablando de una fs ext2 / ext3 / ext4; otras FS modernas también tienen herramientas de redimensionamiento para el mismo propósito). Tenga en cuenta que aunque, por razones obvias, un sistema de archivos no puede ser más grande que la partición en la que reside, puede ser más pequeño de forma segura. El truco de seguridad aquí es reducir "más de lo necesario". Por ejemplo: imagine que tiene un sistema de archivos de 1TB que desea migrar a una unidad de 500 Gig. En este caso, sugiero reducir el fs a, digamos, 450 Gig (por supuesto, debe tener suficiente espacio libre para esto, es decir, el espacio actualmente ocupado en este sistema de archivos no puede exceder los 450 Gig). El aparente desperdicio de 50 Gig de espacio se solucionará después de la migración de datos.
2) Particionar el disco de destino con la geometría apropiada considerando sus limitaciones de espacio;
3) dd los datos usando los dispositivos de partición y no el dispositivo de disco (es decir, use dd if=/dev/sda# of=/dev/sdb#
para cada partición en lugar de usar if=/dev/sda of=/dev/sdb
). NOTA: sda y sdb aquí son solo ejemplos; NOTA IMPORTANTE: Al pasar de un dispositivo de partición más grande a uno más pequeño, dd se quejará de intentar escribir una publicación al final del dispositivo de bloque, eso está bien ya que los datos del sistema de archivos se habrían copiado por completo antes de llegar a ese punto. Para evitar este mensaje de error, puede especificar el tamaño de la copia usando bs=
y count=
parámetros para que coincida con el tamaño del sistema de archivos reducido, pero esto requerirá un cálculo (simple), pero si se hace incorrectamente puede arriesgar sus datos.
4) Después de modificar los datos, cambie el tamaño de los sistemas de archivos respectivos dentro de las particiones de destino nuevamente usando resize2fs. Esta vez no especifique el nuevo tamaño del sistema de archivos. Cuando se ejecuta sin una especificación de tamaño, resize2fs hace crecer el sistema de archivos para que ocupe el tamaño máximo permitido, por lo que, en este caso, el sistema de archivos de 450 Gig volverá a crecer para ocupar toda la partición de 500 Gig y no se perderá ningún byte. (El enfoque de "reducir más de lo necesario" le evita especificar accidentalmente tamaños incorrectamente y arriesgar sus datos. Tenga en cuenta que las unidades GB frente a GiB pueden ser complicadas).
Nota para operaciones más complejas: si tiene un administrador de arranque que tiene la intención de copiar, lo cual es muy probable que sea el caso, puede eliminar los primeros KB del disco utilizando el dispositivo de disco en lugar de los dispositivos de partición (como dd if=/dev/sda of=/dev/sdb bs=4096 count=5
), y luego reconfigure la geometría en / dev / sdb (que contendrá temporalmente una geometría no válida para la nueva unidad pero un administrador de arranque intacto y válido). Finalmente, continúe usando los dispositivos de partición como se describió anteriormente para realizar una partición a la vez. Hice operaciones como esta muchas veces. Recientemente, realicé con éxito una migración compleja cuando actualicé desde un HDD que contenía una combinación de instalaciones MacOSX y Linux a un SDD más pequeño en mi MacMini6,2. En este caso, tuve que arrancar Linux desde una unidad externa, ejecuté el gestor de arranque, ejecuté gdisk para arreglar el GPT en el nuevo disco y finalmente eliminé cada partición que contenía los archivos de archivos recién encogidos. (Tenga en cuenta que el esquema de partición GPT mantiene dos copias de la tabla de particiones, una al principio y otra al final del disco. gdisk se queja mucho porque no puede encontrar la segunda copia del PT y porque las particiones exceden el tamaño del disco, pero soluciona correctamente el problema de la copia del PT después de redefinir la geometría del disco). Este fue un caso mucho más complejo, pero vale la pena mencionarlo porque ilustra que este tipo de operación también es perfectamente factible.
¡Buena suerte! ... y lo más importante, recuerde hacer una copia de seguridad de todos los datos importantes antes de este tipo de operación. Un error y seguramente puede dañar sus datos irremediablemente.
Y en caso de que no haya enfatizado lo suficiente: ¡haga una copia de seguridad de sus datos antes de la migración! :)
dd
calcular el tamaño de bloque óptimo