Clonación de Servidor con Clonezilla
Clonezilla es una herramienta potente y gratuita de copia de seguridad y clonación de discos que permite el despliegue rápido de servidores, copias de seguridad y recuperación ante desastres. Esta guía integral cubre la creación de medios arrancables, imaginación de discos/particiones, clonación en red, distribución multicast y estrategias de despliegue basadas en PXE.
Tabla de Contenidos
- Descripción General de Clonezilla
- Crear Medios Arrancables de Clonezilla
- Copia de Seguridad de Discos y Particiones
- Clonación en Red
- Clonación Multicast
- Restauración desde Imágenes
- Despliegue por PXE Boot
- Automatización y Scripting
- Conclusión
Descripción General de Clonezilla
Clonezilla proporciona:
- Clonación de discos: Replicación completa de servidor incluyendo tablas de partición y bootloaders
- Copia de seguridad de imágenes: Crear imágenes comprimidas para archivo y recuperación
- Modo de red: Clonar sobre LAN usando SSH, SAMBA o NFS
- Multicast: Clonar eficientemente una imagen a múltiples servidores simultáneamente
- PXE boot: Integrar con infraestructura existente para despliegue automatizado
Crear Medios Arrancables de Clonezilla
Descargar Clonezilla
# Descargar el ISO más reciente de Clonezilla
cd /tmp
wget https://sourceforge.net/projects/clonezilla/files/stable/clonezilla-live-*.iso
# Verificar integridad del archivo
sha256sum clonezilla-live-*.iso
# Comparar con checksum de la página del proyecto
# Listar imágenes disponibles
ls -lh clonezilla-live-*.iso
Crear Unidad USB Arrancable
# Identificar dispositivo USB (¡cuidado - esto sobrescribirá datos!)
lsblk
# Método 1: Usar dd (para sistemas Linux)
# ADVERTENCIA: Reemplazar sdX con tu identificador de dispositivo USB
USB_DEVICE="/dev/sdb"
ISO_FILE="clonezilla-live-3.1.0-13-amd64.iso"
# Desmontar el USB si ya está montado
sudo umount "${USB_DEVICE}"1
# Escribir ISO en USB
sudo dd if="$ISO_FILE" of="$USB_DEVICE" bs=4M status=progress
sync
echo "Unidad USB creada en $USB_DEVICE"
# Método 2: Usar Etcher (más amigable)
# En macOS:
# brew install balena-etcher
# etcher select clonezilla-live-3.1.0-13-amd64.iso
# etcher select /dev/diskX
# etcher flash
# Método 3: Usar GNOME Disks GUI
# sudo apt install gnome-disk-utility
# gnome-disks
Crear CD/DVD Arrancable
# Para medios ópticos
ISO_FILE="clonezilla-live-3.1.0-13-amd64.iso"
# Usar growisofs (para DVD)
growisofs -dvd-compat -Z /dev/dvd="$ISO_FILE"
# Usar xorriso (más moderno)
xorriso -as cdrecord -v dev=/dev/cdrom -eject "$ISO_FILE"
# Usar dd
dd if="$ISO_FILE" of=/dev/sr0 bs=4M status=progress
Copia de Seguridad de Discos y Particiones
Imagen Completa de Disco
# Crear imagen de disco completo con dd
create_full_disk_image() {
local source_device="/dev/sda"
local image_path="/mnt/clonezilla-storage/server-backup"
local image_name="prod-server-full-$(date +%Y%m%d)"
mkdir -p "$image_path"
echo "Creando imagen de disco completo: $image_name"
# Usar herramientas de línea de comandos de Clonezilla
ocs-sr \
-q2 \
-j2 \
-z1p \
-i 2000 \
-sfsck \
-c \
-r \
-e1 auto \
-e2 \
-p true \
savedisk "$image_name" "$source_device"
if [ $? -eq 0 ]; then
echo "Imagen de disco completo creada exitosamente"
ls -lh "$image_path/$image_name"
else
echo "Error: Imaginación de disco fallida"
return 1
fi
}
# create_full_disk_image
Imagen a Nivel de Partición
# Crear imagen de partición específica solamente
create_partition_image() {
local source_partition="/dev/sda1"
local image_path="/mnt/clonezilla-storage"
local image_name="partition-root-$(date +%Y%m%d)"
mkdir -p "$image_path"
echo "Creando imagen de partición: $image_name"
# Para partición única
ocs-sr \
-q2 \
-j2 \
-z1p \
-i 2000 \
-sfsck \
-c \
-r \
-e1 auto \
-e2 \
-p true \
saveparts "$image_name" "$source_partition"
if [ $? -eq 0 ]; then
echo "Imagen de partición creada: $image_path/$image_name"
fi
}
# Opciones de compresión
# -z0: Sin compresión (más rápido, más grande)
# -z1: gzip (por defecto)
# -z9: Compresión máxima (más lento, más pequeño)
# Acelerar imaginación con procesamiento paralelo
create_fast_disk_image() {
local source_device="/dev/sda"
local image_path="/mnt/clonezilla-storage"
local image_name="fast-backup-$(date +%Y%m%d)"
# Usar procesamiento paralelo para clonación más rápida
ocs-sr \
-q2 \
-j4 \
-z0 \
-i 0 \
-c \
-r \
savedisk "$image_name" "$source_device"
}
Verificación de Imagen
# Verificar integridad de imagen después de la creación
verify_clonezilla_image() {
local image_path=$1
echo "Verificando imagen: $image_path"
# Verificar estructura de imagen
if [ -d "$image_path" ]; then
echo "Contenido de imagen:"
ls -la "$image_path/"
# Buscar archivos indicadores (Clonezilla crea estos)
if [ -f "$image_path/disk" ]; then
echo "✓ Imagen de disco detectada (disco completo)"
elif [ -f "$image_path/parts" ]; then
echo "✓ Imagen de partición detectada"
fi
# Verificar archivo de información de disco
if [ -f "$image_path/info-disk" ]; then
echo "Información de disco:"
cat "$image_path/info-disk"
fi
else
echo "Error: Ruta de imagen no encontrada"
return 1
fi
}
Clonación en Red
Clonación Basada en SSH
# Configurar almacenamiento en red para Clonezilla
configure_network_storage() {
# En servidor de copia de seguridad: Crear ubicación de almacenamiento
mkdir -p /mnt/clonezilla-images
chmod 755 /mnt/clonezilla-images
# Generar claves SSH para acceso automatizado
ssh-keygen -t rsa -N "" -f /root/.ssh/clonezilla_key
# Copiar clave pública al cliente
# ssh-copy-id -i /root/.ssh/clonezilla_key.pub backup@client-server
}
# Clonar a servidor SSH remoto
clone_to_ssh_storage() {
local remote_host="backup-server.example.com"
local remote_user="backup"
local remote_path="/mnt/clonezilla-images"
local source_device="/dev/sda"
local image_name="server-clone-$(date +%Y%m%d)"
echo "Clonando a almacenamiento SSH remoto"
ocs-sr \
-q2 \
-j2 \
-z1p \
-i 2000 \
-c \
-r \
-e1 auto \
-e2 \
-p true \
-sfsck \
savedisk "$image_name" "$source_device"
# Transferir imagen vía SSH
echo "Transfiriendo imagen a $remote_host"
rsync -avz --progress \
"/home/partimag/$image_name" \
"$remote_user@$remote_host:$remote_path/"
}
# Clonar desde NFS remoto
clone_from_nfs() {
local nfs_server="nfs.example.com"
local nfs_path="/export/clonezilla-images"
local mount_point="/mnt/clonezilla-nfs"
local image_name="server-backup-20240101"
local target_device="/dev/sda"
# Montar almacenamiento NFS
mkdir -p "$mount_point"
mount -t nfs "$nfs_server:$nfs_path" "$mount_point"
# Restaurar desde imagen NFS
ocs-sr \
-q2 \
-j2 \
-c \
-r \
-e1 auto \
-e2 \
-p reboot \
restoredisk "$image_name" "$target_device"
}
Clonación Basada en SAMBA
# Montar compartición SAMBA para almacenamiento de imágenes
setup_samba_cloning() {
local samba_host="nas.example.com"
local samba_share="clonezilla"
local samba_user="backup_user"
local mount_point="/mnt/clonezilla-samba"
mkdir -p "$mount_point"
# Montar compartición SAMBA
mount -t cifs \
"//$samba_host/$samba_share" \
"$mount_point" \
-o username="$samba_user",password="secure_password",uid=0,gid=0,file_mode=0755
# Verificar montaje
df -h "$mount_point"
}
# Almacenar imagen en SAMBA vía Clonezilla
clone_to_samba() {
local samba_mount="/mnt/clonezilla-samba"
local source_device="/dev/sda"
local image_name="workstation-backup-$(date +%Y%m%d)"
echo "Clonando a almacenamiento SAMBA en $samba_mount"
ocs-sr \
-q2 \
-j2 \
-z1p \
-c \
-r \
savedisk "$image_name" "$source_device"
}
Clonación Multicast
Desplegar una única imagen a múltiples servidores simultáneamente usando streaming multicast.
# Configurar servidor multicast de Clonezilla
setup_multicast_server() {
local multicast_ip="224.0.0.1"
local multicast_port="10001"
local image_path="/mnt/images/prod-server-20240101"
local source_device="/dev/sda"
echo "Configurando servidor multicast de Clonezilla"
# Instalar paquetes requeridos
apt-get install -y drbl clonezilla
# Configurar parámetros multicast
cat > /etc/ocs/clonezilla-default << 'EOF'
# Configuración multicast
DRBL_BRANCH="stable"
CLONEZILLA_MODE="full"
MULTICAST_PORT="10001"
MULTICAST_IP="224.0.0.1"
EOF
}
# Iniciar sesión de clonación multicast
start_multicast_clone() {
local image_name="production-server-20240101"
local dest_devices="/dev/sda"
echo "Iniciando sesión de clonación multicast"
echo "Imagen: $image_name"
echo "Dispositivos: $dest_devices"
echo "Esperando a clientes para arrancar..."
# Los clientes arrancan en Clonezilla vía PXE
# Seleccionar: device-image -> remote mode -> Multicast -> Join existing session
# Monitorear sesión multicast
ocs-ondemand -m join multicast
}
Restauración desde Imágenes
Restauración Completa de Disco
# Restaurar disco completo desde imagen
restore_full_disk() {
local image_path="/mnt/clonezilla-images/prod-server-20240101"
local target_device="/dev/sda"
echo "ADVERTENCIA: Esto sobrescribirá disco completo $target_device"
read -p "¿Continuar? (sí/no) " -r
if [[ $REPLY != "yes" ]]; then
echo "Cancelado"
return 1
fi
echo "Restaurando imagen de disco..."
ocs-sr \
-q2 \
-j2 \
-c \
-r \
-e1 auto \
-e2 \
-p reboot \
restoredisk "$image_path" "$target_device"
if [ $? -eq 0 ]; then
echo "Restauración de disco completada - servidor reiniciando"
fi
}
# Restaurar con ajuste de tamaño de partición
restore_with_resize() {
local image_name="prod-server-backup"
local target_device="/dev/sda"
# "-e1 auto" redimensiona automáticamente particiones para ajustar disco objetivo
ocs-sr \
-q2 \
-c \
-r \
-e1 auto \
-e2 \
-p reboot \
restoredisk "$image_name" "$target_device"
}
Restauración a Nivel de Partición
# Restaurar partición específica
restore_partition() {
local image_name="partition-root-backup"
local target_partition="/dev/sda1"
echo "Restaurando partición $target_partition desde imagen $image_name"
ocs-sr \
-q2 \
-c \
-r \
-p true \
restoreparts "$image_name" "$target_partition"
}
# Recuperación selectiva de archivos (montar y explorar)
mount_image_for_recovery() {
local image_path="/mnt/clonezilla-images/server-backup"
local recovery_mount="/mnt/image-recovery"
mkdir -p "$recovery_mount"
# Obtener información de imagen de disco
if [ -f "$image_path/disk" ]; then
# Extraer y montar sistema de archivos
# Este proceso depende de formato de imagen y sistema de archivos
echo "Montando imagen para recuperación a nivel de archivo"
# El montaje detallado depende de la estructura de imagen específica
fi
}
Despliegue por PXE Boot
Configuración de Servidor DRBL
# Configurar servidor DRBL (Distributed Replicated Block Level)
setup_drbl_server() {
# Instalar paquetes DRBL
apt-get install -y drbl clonezilla
# Configurar DRBL
drblsrv-offline
# Configurar PXE boot
drblpxeconfig -i
# Configurar DHCP
cat > /etc/dhcp/dhcpd.conf << 'EOF'
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option routers 10.0.0.1;
option domain-name-servers 10.0.0.1;
# Configuración de PXE boot
next-server 10.0.0.10; # IP del servidor DRBL
filename "pxelinux.0";
}
EOF
systemctl restart dhcp
}
# Configurar imagen para despliegue PXE
configure_pxe_image() {
local image_name="prod-server-20240101"
local drbl_server="/usr/lib/drbl/samples"
# Colocar imagen en directorio de imágenes DRBL
cp -r "/mnt/clonezilla-images/$image_name" \
"/opt/drbl/images/"
# Configurar DRBL para servir esta imagen
cat > /opt/drbl/images/$image_name/clonezilla.conf << 'EOF'
# Configuración de despliegue de Clonezilla
CLONEZILLA_MODE="full"
TARGET_IMAGE="prod-server-20240101"
RESTORE_MODE="auto"
SHUTDOWN_AFTER="no"
EOF
}
Configuración de Cliente PXE Boot
# Configurar clientes para PXE boot
configure_pxe_client() {
# En BIOS/UEFI: Establecer PXE/Red como dispositivo de arranque primario
# Guardar y reiniciar
# Secuencia de arranque del cliente:
# 1. La interfaz de red solicita DHCP
# 2. El servidor DHCP proporciona IP y dirección del servidor PXE
# 3. El cliente descarga el bootloader pxelinux.0
# 4. El bootloader carga kernel y Clonezilla
# 5. El usuario selecciona imagen de restauración y disco objetivo
# 6. La imagen se restaura automáticamente
}
# Despliegue automatizado vía PXE
automate_pxe_deployment() {
# Crear configuración de Clonezilla no asistida
cat > /opt/drbl/images/ocs/ocs-live.conf << 'EOF'
# Configuración de despliegue automatizado
OCS_MODE="restore"
OCS_IMAGING_MODE="disk"
TARGET_IMAGE_NAME="prod-server-20240101"
TARGET_DISK="/dev/sda"
AUTO_SHUTDOWN="yes"
SKIP_CONFIRMATION="yes"
EOF
# Los clientes configurados para restauración automática desde esta imagen al arrancar
}
Automatización y Scripting
Copia de Seguridad Diaria Automatizada
# Copia de seguridad diaria automatizada a almacenamiento en red
cat > /usr/local/bin/daily-clonezilla-backup.sh << 'EOF'
#!/bin/bash
SOURCE_DEVICE="/dev/sda"
IMAGE_REPOSITORY="/mnt/clonezilla-images"
IMAGE_NAME="server-daily-$(date +%Y%m%d)"
RETENTION_DAYS=30
LOG_FILE="/var/log/clonezilla-backup.log"
echo "[$(date)] Iniciando copia de seguridad de Clonezilla" >> "$LOG_FILE"
# Asegurar que el repositorio existe
mkdir -p "$IMAGE_REPOSITORY"
# Crear copia de seguridad
ocs-sr \
-q2 \
-j4 \
-z1p \
-i 0 \
-c \
-r \
-e1 auto \
-e2 \
-p true \
savedisk "$IMAGE_NAME" "$SOURCE_DEVICE" \
>> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] Copia de seguridad completada: $IMAGE_NAME" >> "$LOG_FILE"
# Rotar imágenes antiguas (mantener 30 días)
find "$IMAGE_REPOSITORY" -maxdepth 1 -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
# Sincronizar a ubicación remota
rsync -avz --delete \
"$IMAGE_REPOSITORY/" \
[email protected]:/backups/clonezilla/ \
>> "$LOG_FILE" 2>&1
else
echo "[$(date)] Copia de seguridad FALLIDA" >> "$LOG_FILE"
fi
EOF
chmod +x /usr/local/bin/daily-clonezilla-backup.sh
# Programar copia de seguridad diaria
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/daily-clonezilla-backup.sh") | crontab -
Operaciones por Lotes de Clonezilla
# Clonar múltiples servidores a imágenes
batch_image_servers() {
local servers=("web01" "web02" "db01" "db02")
local image_repository="/mnt/clonezilla-images"
for server in "${servers[@]}"; do
echo "Imaginando $server..."
# SSH al servidor y crear imagen
ssh "root@$server" << 'CMD'
mkdir -p /mnt/clonezilla-work
ocs-sr \
-q2 \
-j2 \
-z1p \
-c \
-r \
savedisk "$(hostname)-$(date +%Y%m%d)" "/dev/sda"
CMD
# Transferir imagen de vuelta
rsync -avz "root@$server:/home/partimag/" \
"$image_repository/"
done
}
# Restaurar imágenes a múltiples objetivos
batch_restore() {
local image_name="prod-server-template"
local target_hosts=("server03" "server04" "server05")
for target in "${target_hosts[@]}"; do
echo "Restaurando $image_name a $target"
# Arrancar objetivo en Clonezilla
# Ejecutar restauración
# Esperar a completación
done
}
Conclusión
Clonezilla proporciona capacidades de clonación y copia de seguridad de discos a nivel empresarial:
- Medios Arrancables: Crear USB o CD para necesidades de clonación inmediata
- Clonación en Red: Integrar con SSH, NFS o SAMBA para almacenamiento remoto
- Multicast: Desplegar única imagen a múltiples servidores simultáneamente
- Integración PXE: Automatizar despliegue vía arranque en red
- Automatización: Script de imaginación diaria y procedimientos de recuperación ante desastres
Usar Clonezilla para provisión rápida de servidores, recuperación ante desastres e migraciones de infraestructura. Combinar con pruebas regulares para asegurar que las imágenes se restauren correctamente cuando sea necesario.


