Ir al contenido principal

Dividir y unir ficheros largos



Hay ocasiones en que es necesario dividir un archivo demasiado largo en archivos más pequeños, sobre todo cuando se trata de las copias de seguridad y se usa un pendrive para almacenarlas.
Un pendrive suele tener FAT16 o FAT32 como sistema de ficheros, con la limitación del tamaño de archivo que eso conlleva. Por ejemplo, para FAT16 el tamaño máximo de un archivo es de 2 Gigabytes y para FAT32 de 4 Gigabytes.
Aunque existen programas de compresión que permiten la división del archivo resultante en trozos de un tamaño determinado; por ejemplo, los archivos RAR, en GNU/Linux existe la posibilidad de dividir un archivo de gran tamaño utilizando comandos en una terminal. Explicaré la secuencia de acciones que se ha de seguir tanto para dividir como para unir los archivos, además de verificar la integridad del archivo restaurado.

Obtener la suma de verificación
Antes de dividir el archivo es conveniente realizar la suma de verificación md5 del mismo con el fin de comprobar la integridad del archivo una vez que lo hayamos vuelto a unir. Una suma de verificación es una función hash que tienen como propósito principal detectar cambios accidentales en una secuencia de datos para proteger la integridad de datos, verificando que no haya discrepancias. La idea es que se transmita el dato junto con su valor hash, de esta forma el receptor puede calcular el valor hash de la secuencia recibida y la puede comparar con el valor hash recibido. Si hay una discrepancia se pueden rechazar los datos o pedir una retransmisión (Wikipedia:Suma de verificación).
Para obtener la suma de verificación de un archivo ejecutamos la siguiente orden en la línea de comandos:
md5sum -b [nombre_de_archivo] >> [nombre_fichero_md5]
Al terminar de ejecutarse obtendremos un fichero con la suma de verificación md5. Yo, personalmente, suelo poner el mismo nombre del archivo del que voy a obtener la suma de verificación con extensión .md5, por ejemplo:
md5sum -b copia.tar.gz >> copia.tar.gz.md5
Dividir el archivo en partes más pequeñas
Ahora llegó el momento de dividir el archivo en otros más pequeños. En GNU/Linux disponemos de la orden split, por lo que pondremos en la línea de comandos:
split -b [tamaño] -d [nombre_del_archivo] [nombre_archivo_dividido]
  1. El tamaño se ha de especificar en bytes o usando sufijos con un multiplicador. Estos sufijos pueden ser: K, M, G, T... O sea, para especificar el tamaño de 4 Gigabytes podríamos 4G.
  2. La opción -d hace que el sufijo de los archivos divididos sea numérico y no alfanumérico como es por defecto.
Siguiendo el ejemplo del punto anterior pondríamos lo siguiente:
split -b 3G -d copia.tar.gz copia.tar.gz-
Nos crearía archivos con los nombres:
copia.tar.gz-00
copia.tar.gz-01
...
copia.tar.gz-??
Donde las interrogaciones serían el último número asignado tras la división.

Unir los archivos en uno solo
Para realizar la unión de los archivos divididos se utiliza la orden cat, para nuestro caso de las copias de seguridad utilizaremos el siguiente procedimiento:
  1. Copiar todos los archivos a un mismo directorio.
  2. En la línea de comandos poner la siguiente orden:
  3. cat copia.tar.gz-* >> copia.tar.gz
  4. Si se va a unir el archivo generado anteriormente en el sistema operativo Windows, el procedimiento para hacerlo es muy parecido. Seguiremos los siguientes pasos:
    • En primer lugar abriremos una ventana para acceder al Símbolo del sistema: Menú inicio/Ejecutar, en el cuadro de diálogo escribiremos cmd y daremos en el botón Aceptar.
    • No posicionaremos en la carpeta que contiene los archivos divididos con el comando cd. Suponiendo que hemos copiado los archivos divididos en C:\TMP:
      cd c:\tmp
    • Uniremos los archivos con el siguiente comando:
      copy /b copia.tar.gz-01+copia.tar.gz-02+...+copia.tar.gz-?? copia.tar.gz
      Donde las interrogaciones serían el último número asignado tras la división.
      Utilizamos la opción /b para indicar que el archivo que se va a copiar es binario. Tras unos momentos ya tendremos nuestro archivo unido de nuevo. He hecho pruebas poniendo copia.tar.gz-* en vez de concatenarlos usando el operador +, pero el resultado ha sido incorrecto, ya que no se ordenan los archivos de la forma correcta, por lo que mi recomendación es que utilicen el comando tal y como yo he especificado en el párrafo anterior.
Comprobar la suma de verificación del archivo restaurado
Una vez que hemos restaurado el archivo reuniendo sus partes en uno solo, debemos proceder a verificar que el archivo restaurado sea correcto. Para realizar esto volvemos a utilizar el comando md5sum, con la opción -c (del inglés, check), es necesario que el archivo con la suma de verificación esté en el mismo directorio que el archivo que se va a comprobar:
md5sum -c [nombre_fichero_md5]
Al terminar la ejecución del comando, éste indicará si la suma coincide (fichero correcto) o no (fichero incorrecto).

NOTA PARA USUARIOS DE WINDOWS
En el sistema operativo Windows, la verificación se la suma pasa por instalar un programa, como por ejemplo, el md5summer que pueden obtener en la siguiente dirección: http://www.md5summer.org/download.html. El funcionamiento no lo voy a explicar ya que este es un blog dedicado al Ubuntu.


Como podemos comprobar el proceso es muy sencillo de realizar y, a su vez, muy útil. Espero que esto le pueda servir a alguno de ustedes. Por supuesto, les recuerdo que pueden ver todas las opciones de cada comando utilizando el manual de GNU/Linux usando la orden:
#man [nombre de comando]

Comentarios

Entradas populares de este blog

Añadir disco en caliente a un Ubuntu virtualizado

  En este artículo vamos a explicar cómo aumentar un volumen de discos en una máquina virtual. Pongamos por caso que tenemos un servidor que se nos ha quedado corto de espacio en disco y que no podemos parar. La solución es añadir un nuevo disco virtual a nuestra máquina y, con ese espacio añadido, extender el volumen de discos.  En principio, este es un proceso en el que no hay pérdida de datos. Sin embargo, es conveniente que exista una copia de seguridad antes de llevarlo a cabo como precaución. He de decir que yo lo he hecho en un par de ocasiones y no ha habido problemas con la máquina virtual ni con los datos. De hecho, los usuarios ni se enteraron de que se amplió el espacio en disco. Consideraciones iniciales En primer lugar, este es un proceso que sólo se puede llevar a cabo en una máquina virtual. Para añadir un disco nuevo en una máquina física hay que pararla y, por lo tanto, no se puede añadir en caliente. Cierto es que la parte de extender el volumen sí que se realiza igu

Atom ha muerto, viva Zed

El día 8 de junio de 2022, Microsoft anunció que a partir del día 31 de diciembre de este mismo año dejaría de dar soporte para el editor de código Atom .  ¿En qué nos afecta esto a nosotros? Bueno, pues si me han seguido en artículos anteriores saben que tras una comparativa de varios IDEs había decidido utilizar Atom para los ejemplos que tuviera que hacer en este blog. Sobre todo los artículos que prepararé para ilustrar el uso de Laravel . Amén de los miles de programadores que actualmente usan Atom  en sus proyectos, claro. Pero, ¿qué editor de código abierto podremos utilizar para sustituir a Atom ? En el mismo comunicado, Microsoft explicaba que el abandono del proyecto Atom  se debía a que querían volcar todos sus esfuerzos en el Visual Studio Code y, por supuesto, recomendó a los usuarios de Atom la utilización del mismo como alternativa natural. No quiero entrar en las bondades o defectos del Visual Studio Code  si quieres elegirlo como tu IDE para desarrollo predeterm

Zed: ahora un editor de código de código abierto

  Zed: ahora un editor de código de código abierto Introducción Como ya les comenté en un artículo anterior  Atom ha muerto, viva ZED , Microsoft dejó de dar soporte para el editor de código Atom en el año 2022 en beneficio del Visual Studio Code . En aquel artículo les comentaba que para mi el sucesor de Atom era Zed pues era un editor que se estaba creando por el mismo grupo de trabajo que creó el Atom . Además de que parecía que iba a seguir con la misma filosofía con la que nació  Atom . El editor Zed, una descripción de sus características Zed es un editor de código desarrollado en Rust que, como deberíamos saber, es un lenguaje de programación de sistemas que se enfoca en la seguridad, el rendimiento y la concurrencia. Pues, como decíamos, Zed acaba de dar el salto a ser de código abierto bajo la licencia GPL v3 . Este cambio no solo representa una nueva era para Zed , sino que también nos dirige a un nuevo mundo de colaboración y desarrollo en el ámbito de la programación.