| 1 | [[TOC(headinf=Índice)]] |
| 2 | {{{ |
| 3 | #!div style="width:50%; background: #ffd; font: bold italic large sans-serif"> |
| 4 | En construcción |
| 5 | }}} |
| 6 | |
| 7 | |
| 8 | = Pruebas de mejoras en imágenes sincronizadas = |
| 9 | == Introducción == |
| 10 | Actualmente no están utilizando las imágenes sincronizadas por tener una serie de problemas: |
| 11 | * Falta de compresión en la imagen, por lo que ocupa mucho espacio en el servidor. |
| 12 | * La transferencia es más lenta que las imágenes monolíticas. |
| 13 | * Las Acl de Windows se tiene que restaurar de forma independiente, después de restaurar los archivos. |
| 14 | |
| 15 | En está página mostraremos los resultados de las últimas pruebas que estamos haciendo. |
| 16 | |
| 17 | == Problema de espacio en disco == |
| 18 | |
| 19 | === Concepto imágenes "hijas" === |
| 20 | |
| 21 | Observando como trabaja rsnapshop vemos que al crear una nueva copia de seguridad de un dispositivo toma como punto de partida una anterior y luego aplica rsync entre el equipo origen y el nuevo backup. OpenGnsys podría utilizar este procedimiento para imágenes similares. |
| 22 | |
| 23 | || Primera copia: || rsync user@equipo_remoto::/carpeta backup1 || |
| 24 | || Segunda copia: || cp -al backup1 backup2 \\ rsync user@equipo_remoto::/carpeta backup2 || |
| 25 | |
| 26 | La opción -l del comado cp crea enlaces “duros” a los archivos en vez que copiarlos, de esta forma no se ocupa nuevo espacio en el disco duro y es mucho más rápido. |
| 27 | |
| 28 | En rsync es imprescindible __no usar la opción “--inplace”__ |
| 29 | |
| 30 | Si no se usa esta opción, rsync copia el archivo que está sincronizando en un fichero temporal y al final sustituye el original, eliminando el enlace entre los archivos de distintas imágenes. |
| 31 | |
| 32 | Si ponemos esta opción rsync modifica directamente el archivo, no rompe el enlace y modifica todas la imágenes que tengamos. |
| 33 | |
| 34 | Desaparecería en concepto de diferencial, ya que todas contienen los datos completos. Tendríamos imágenes hermanas o hijas, tomando como partida una imagen parecida y luego sincronizándola con la partición del equipo modelo. |
| 35 | |
| 36 | Las imágenes serían tipo directorio, ya que es la única forma de hacer enlaces entre archivos de varias imágenes. |
| 37 | |
| 38 | Más información en [[http://www.mikerubel.org/computers/rsync_snapshots Easy Automated Snapshot-Style Backups with Linux and Rsync] (rsnapshop se basa en este artículo). |
| 39 | |
| 40 | === Compresión de los datos en el servidor === |
| 41 | Encontramos varios procedimientos: |
| 42 | * Montar los dispositivos remotos con compresión: no lo hemos probado |
| 43 | {{{ |
| 44 | sshfs -o nonempty,sshfs_sync,compression=yes username@host:/path/archives/ /mounted/compress |
| 45 | }}} |
| 46 | |
| 47 | * Sistemas de fichero comprimidos. Encontramos varios: |
| 48 | * Btrfs |
| 49 | * ZFS |
| 50 | * FUSE: FuseCompress or CompFUSEd. |
| 51 | |
| 52 | ==== Pruebas con ZFS ==== |
| 53 | Las pruebas se hacen con Ubuntu16, ya que los nuevos kernel traen mejor soporte para este sistema de ficheros. |
| 54 | |
| 55 | ZFS permite gestionar varios dispositivos (discos o archivos) para crear un pool y en el puede definir los sistemas de ficheros que queramos. |
| 56 | |
| 57 | Por comodidad usamos un archivo para el dispositivo. |
| 58 | |
| 59 | Creamos un sistema de fichero con compresión y acl: |
| 60 | |
| 61 | {{{ |
| 62 | truncate --size="10"G /opt/opengnsys/images/store |
| 63 | zpool create sync /opt/opengnsys/images/store |
| 64 | zfs create sync/images |
| 65 | zfs set compression=on sync/images |
| 66 | zfs set acltype=posixacl sync |
| 67 | }}} |
| 68 | |
| 69 | Opciones de montaje: |
| 70 | {{{ |
| 71 | Mount |
| 72 | sync/images on /sync/images type zfs (rw,relatime,xattr,posixacl) |
| 73 | }}} |
| 74 | |
| 75 | |
| 76 | Configuramos el demonio rsync en el servidor para compartir el directorio de las imágenes sincronizadas. En /etc/rsyncd.conf: |
| 77 | {{{ |
| 78 | [ogimages] |
| 79 | comment = Carpeta de imagenes sincronizadas |
| 80 | path = /sync/images |
| 81 | read only = no |
| 82 | list = yes |
| 83 | uid = root |
| 84 | gid = root |
| 85 | auth users = opengnsys |
| 86 | secrets file = /etc/rsyncd.secrets |
| 87 | }}} |
| 88 | |
| 89 | Tamaño de los datos |
| 90 | |
| 91 | En Ubuntu 16.04 |
| 92 | |
| 93 | || Recién creado || df -h → sync/images 10094464 0 10094464 0% /sync/images || |
| 94 | || Creamos imagen Ubuntu14 \\ origen 1.1Gb || df -h → sync/images 9.7G 584M 9.1G 6% /sync/images \\ sudo du -sh Ubuntu14 → 609M Ubuntu14 || |
| 95 | |
| 96 | || Creo Ubuntu 16 \\ origen 3,9G || df -h → sync/images 9.7G 2.6G 7.1G 27% /sync/images \\ sudo du -sh * → 609M Ubuntu14 \\ → 2.1G Ubuntu16 || |
| 97 | || Creo diferencial \\ cp -al Ubuntu14 Ubuntu14bis \\ rsync (sin opción --inplace) || df -h → sync/images 9.7G 2.6G 7.1G 27% /sync/images \\ sudo du -sh * → 609M otra \\ → 2.1G Ubuntu16\\ → 629M Ubuntu14bis || |
| 98 | |
| 99 | Rsync compara correctamente los ficheros de la partición origen a la imagen comprimida. |
| 100 | |
| 101 | Observamos que hay diferencias entre los archivos de las distintas imágenes: |
| 102 | {{{ |
| 103 | diff Ubuntu14/etc/hosts Ubuntu14bis/etc/hosts |
| 104 | 10a11,12 |
| 105 | > |
| 106 | > 192.168.2.10 ogrepo |
| 107 | }}} |
| 108 | |
| 109 | Errores resueltos: |
| 110 | |
| 111 | '''rsync -aHAX --password-file=/scripts/passrsync --exclude 'coredump' --numeric-ids --progress --inplace --delete /mnt/sda1/ opengnsys@$ogrepo::syncimages/otra''' |
| 112 | |
| 113 | La segunda vez no syncroniza nada → aunque está comprimido rsync compara bien los archivos |
| 114 | |
| 115 | Error haciendo imagen de Ubuntu 16 (sólo este error) |
| 116 | * rsync: set_acl: sys_acl_set_file(media/instalcdc, ACL_TYPE_ACCESS): Operation not supported (95) |
| 117 | * Solución: zfs set acltype=posixacl sync # Para que soporte acl |
| 118 | |
| 119 | |
| 120 | |
| 121 | |
| 122 | Creo diferencial |
| 123 | |
| 124 | '''En servidor: cp -al Ubuntu14 Ubuntu14bis \\ |
| 125 | En cliente: rsync -aHAX --password-file=/scripts/passrsync --exclude 'coredump' --numeric-ids --progress --inplace --delete /mnt/sda1/ opengnsys@$ogrepo::syncimages/Ubuntu14bis''' |
| 126 | |
| 127 | Error: diff Ubuntu14/etc/hosts Ubuntu14bis/etc/hosts → son iguales |
| 128 | |
| 129 | Solución: Para que no se mantenga el enlace y no reescriba los ficheros de otras imágenes hay que eliminar la opción –inplace. |
| 130 | |
| 131 | |
| 132 | |
| 133 | |
| 134 | ==== Sistemas de ficheros descartados ==== |
| 135 | __FuseCompress__ |
| 136 | Según su página en [[https://github.com/tex/fusecompress github]] "El archivo se vuelve ilegible cuando llega a una condición de espacio insuficiente." Descartado. |
| 137 | |
| 138 | __CompFUSEd__ |
| 139 | Parece que el proyecto está abandonado: últimas informaciones de 2009. Descartado |
| 140 | |
| 141 | __Btrfs__ |
| 142 | Permite montar con compresión de forma transparente. Pero: |
| 143 | * df u du muestran el tamaño de los datos como si estuvieran descomprimidos (según la documentación por coherencia con los sistemas de ficheros anteriores) |
| 144 | * Al crear el sistema de ficheros no hay opción de compresión, por lo que el tamaño es igual si los datos están comprimidos o sin comprimir. |
| 145 | |
| 146 | |