| 109 | |
| 110 | == Crear una imagen diferencial == |
| 111 | |
| 112 | '''Definición de imagen diferencial: ''' |
| 113 | |
| 114 | Supongamos que tenemos una imagen completa y la hemos restaurado en un equipo que hará de modelo. Instalamos una serie de programas. |
| 115 | |
| 116 | Llamaremos imagen diferencial de una completa a la que contengan los archivos nuevos y la información de los archivos que sobran, de forma que al restaurar primero la imagen completa y luego la diferencial la partición destino quede como la del equipo modelo. |
| 117 | |
| 118 | |
| 119 | '''Procedimiento''' |
| 120 | * Se monta la imagen completa y se compara el contenido de la partición con la imagen: Se crea la lista de las diferencias con rsync |
| 121 | * Se trata la lista de diferencias: se separan los archivos a copiar, a borrar y los enlaces (simbólicos o no), ya que se tendrán que procesar de forma diferente al restaurar. |
| 122 | * En un directorio temporal se copian los archivos que están en la partición y no en la imagen completa. |
| 123 | * Se crea una imagen squash del directorio |
| 124 | |
| 125 | |
| 126 | {{{ |
| 127 | # Montamos imagen completa (con la que vamos a comparar) |
| 128 | mount -t squashfs -o loop /opt/opengnsys/image/ImgCompleta $OGCAC$OGIMG/montar |
| 129 | # Creamos las diferencias |
| 130 | rsync -aHvn --delete /mnt/sda2/ $OGCAC$OGIMG/montar > lista_img |
| 131 | sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g lista_img |
| 132 | |
| 133 | # creasmo directorio temporarl |
| 134 | mkdir $OGCAC$OGIMG/img.tmp |
| 135 | grep -e '\->' -e '\=>' lista_img > $OGCAC$OGIMG/img.tmp/list__ln |
| 136 | grep -e ^deleting lista_img | sed s/^deleting\ //g > $OGCAC$OGIMG/img.tmp/list_rm |
| 137 | grep -v -e '\->' -e '\=>' -e ^deleting lista_img > $OGCAC$OGIMG/img.tmp/lista_rsync |
| 138 | # |
| 139 | echo "rsync -aHq --files-from=$OGCAC$OGIMG/img.tmp/list_rsync /mnt/sda2/ $OGCAC$OGIMG/img.tmp" | tee -a $FILELOG |
| 140 | rsync -aHq --files-from=$OGCAC$OGIMG/img.tmp/list_rsync /mnt/sda2/ $OGCAC$OGIMG/img.tmp >> $FILELOG 2>&1 |
| 141 | |
| 142 | echo "mksquashfs $OGCAC$OGIMG/img.tmp ubuntu11DesdePArticionSqfs.diff" | tee -a $FILELOG |
| 143 | mksquashfs $OGCAC$OGIMG/img.tmp ubuntu11DesdePArticionSqfs.diff | tee -a $FILELOG |
| 144 | }}} |
| 145 | |
| 146 | == Restaurar - Sincronizar una imagen diferencial == |
| 147 | |
| 148 | Tras restaurar la imagen completa, la restauración de la imagen diferencial hará lo siguiente: |
| 149 | * Montará la partición destino y la imagen diferencial |
| 150 | * Con rsync copiará los archivos incluidos en la lista de la diferencial (Es más rápido que si se le permite que compare el contenido de la imagen con la partición). |
| 151 | * Borrara los archivos sobrantes, con la información de la lista para borrar |
| 152 | * Creará los enlaces simbólicos, con la informacón de la lista de enlaces |
| 153 | |
| 154 | |
| 155 | |
| 156 | {{{ |
| 157 | echo "Restaurar diferencial" | tee -a $FILELOG |
| 158 | ogMount 1 X |
| 159 | mount $OGCAC$OGIM/imagen.diff $OGCAC$OGIMG/montar |
| 160 | rsync -aHq –files-from=$OGCAC$OGIMG/montar/list_rsync $OGCAC$OGIMG/montar/ /mnt/sdaX | tee -a $FILELOG |
| 161 | echo "Diferencial: creando enlaces y borrando" | tee -a $FILELOG |
| 162 | cd $PART |
| 163 | rm -rf $(cat $OGCAC$OGIMG/montar/list_rc) |
| 164 | |
| 165 | # nota: mal la comparación de -> no distingue el => para los enlaces duros |
| 166 | while read dest enlace orig |
| 167 | do |
| 168 | echo $dest ... $enlace ... $orig |
| 169 | if [ "$enlace" == "->" ] |
| 170 | then |
| 171 | echo enlace: $enlace |
| 172 | OPTLN='-s' |
| 173 | fi |
| 174 | |
| 175 | echo "ln $OPTLN ${dest%\/*}/$orig $dest" |
| 176 | #ln $OPTLN ${dest%\/*}/$orig $dest |
| 177 | echo "" |
| 178 | done < $OGCAC$OGIMG/montar/list_ln |
| 179 | |
| 180 | }}} |
| 181 | |
| 182 | == Transformando una imagen de partclone en sqfs == |
| 183 | |
| 184 | Partimos de una imagen de partclone comprimida, la transformamos en una que se pueda montar. |
| 185 | |
| 186 | Se restaura la imagen en un fichero (dos opciones según el compresor): |
| 187 | {{{ |
| 188 | cat Imagen.img.gz | gzip -d -c | partclone.restore -C -s - -O imgMontable.img |
| 189 | |
| 190 | lzop -dc Ubuntu11.img | partclone.restore -C -s - -O ubuntu11Montar.img |
| 191 | }}} |
| 192 | |
| 193 | Montando la imagen |
| 194 | {{{ |
| 195 | mkdir montar |
| 196 | mount -o loop ubuntuMontar.img montar/ |
| 197 | mount.ntfs-3g -o loop w7BasicaMontar.img montar/ |
| 198 | }}} |
| 199 | |
| 200 | Comprimiendo la imagen en formato sqfsImage.sqfs.lib |
| 201 | |
| 202 | {{{ |
| 203 | cd /opt/opengnsys/images |
| 204 | sudo mkdit montar |
| 205 | sudo mount -o loop ubuntuMontar montar |
| 206 | sudo mksquashfs montar ubuntuMontar.sqfs |
| 207 | }}} |
| 208 | |
| 209 | Montando el fichero sqfs |
| 210 | {{{ |
| 211 | mount -t squashfs -o loop ubuntuMontar.sqfs montar |
| 212 | }}} |