Tar
Opciones básicas
-c # comprime
-x # descomprime
-z # gzip
-J # xz
-j # bzip2
-p # conserva permisos
-h # conservar softlinks
-v # muestra informacion vervose
-P # conserva ruta absoluta
-f # referencia a archivos
-t # ver interior tar
-u # añadir archivo a tar
--exclude # Excluir directorio o fichero
--delete # borrar ruta del interior del tar
Niveles de compresión
tar -cpf backup.tar /home/*
gzip -1 backup.tar
- Comprime de nivel 1 mínima a 9 máxima compresión
Ruta absoluta
Al tener ruta absoluta se restaurara el archivo automáticamente en su destino
# Comprimir
sudo tar -czpvPf backup-sudoers-ruta-absoluta.tar.gz /etc/sudoers
#Visualizar para comprobar:
sudo tar -tzpvf backup-sudoers-ruta-absoluta.tar.gz
-r--r----- root/root 3337 2015-09-27 20:58 etc/sudoers
#Descomprimir tar.gz
sudo tar -xzpvPf backup-sudoers-ruta-absoluta.tar.gz
# ruta absoluta dentro del comprimido
tar --transform="s,ASIX1,/usr/share/ASIX," -czvf paquet-4.tar.gz ASIX1 --show-transformed-names
Comprimir diversas rutas
Comprimir con ruta relativa es lo mismo que la absoluta sin opción P
Creas un archivo con diversas rutas.
seleccio.txt
/etc/sudoers
/etc/httpd/conf/httpd.conf
# Comprimes
tar -czpvP --files-from=seleccio.txt -f conf-server.tar.gz
# ver comprimido
tar -tzf conf-server.tar.gz
# restaurar
tar -xzpvPf conf-server.tar.gz
Excluir archivos
Se excluirán todos los archivos que contengan la palabra top
tar -v --exclude='*Top*' -f SHIELD-ACL-excl-patro.tar.gz SHIELD/
Excluyendo con varios parámetros.
cat > exclusions.txt
Misiones
SHIELD/AGENTES/OFICINA/Jugar.txt
tar -v --exclude-from=exclusions.txt -f SHIELD-ACL-excl-fitxer.tar.gz SHIELD/
Extraer
Extraer normal
tar -xzpvf SHIELD-ACL.tar.gz
Extraer en ruta concreta
tar -xzpv -C /home/user/ACLs/ACLs.scripts/test/ -f SHIELD-ACL.tar.gz
Extraer solo archivos específicos
tar -xzpv -C /home/user/ACLs/ACLs.scripts/test/ -f SHIELD-ACL.tar.gz *OFICINA*
Extraer solo archivos que coincidan con el patrón
tar --acls -xzpvf SHIELD-ACL.tar.gz *{fe,et}*.txt
Añadir archivos a un tar
Primero descomprimimos de tar.gz a tar
gzip -d SHIELD-ACL.tar.gz
añadimos
tar -uvf SHIELD-ACL.tar Fitxer-a-afegir.txt Fitxer-a-afegir2.txt
volvemos a comprimir
gzip SHIELD-ACL.tar
Eliminar archivos del tar
Primero descomprimimos de tar.gz a tar
gzip -d SHIELD-ACL.tar.gz
Eliminamos
tar --delete Fitxer-a-eliminar*.txt -f SHIELD-ACL.tar
volvemos a comprimir
gzip SHIELD-ACL.tar
Mostrar progreso
Mostrar progreso desde consola:
tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
Mostrar progreso con TUI(Text User Interface):
tar -czf - ./Documents/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70
Backups Incrementares y Diferenciales
Los 2 parten de un backup completo, la diferencia es que:
- El Incremental solo guarda la información de los cambios desde el ultimo backup, y para restaurar tengo que utilizar todos los backups increméntales + el total.
- El diferencial guarda los cambios echos a partir del total, para restaurar solo necesito un total y el diferencial.
Incremental
Suponemos que hago los backups diarios.
estructura:
.
├── backups
│ └── snars
└── docs
├── A
├── B
├── C
└── D
3 directories, 4 files
Creo un primer backup total
debian ➜ tar cvzf backups/total-domingo-03-2019.tgz -g backups/snars/total-domingo-03-2019.snar docs
cp backups/snars/total-domingo-03-2019.snar backups/snars/incremental-03-2019.snar
La opción
-g
indica la ubicación del archivo donde guarda el registro de backups.
Lunes al acabar el día creo primer incremental.
debian ➜ tar cvzf backups/incremental-lunes-03-2019.tgz -g backups/snars/incremental-03-2019.snar docs
docs/
docs/E
docs/F
- Observo que han habido cambios y los guarda
Martes al fin de día lo mismo.
debian ➜ tar cvzf backups/incremental-martes-03-2019.tgz -g backups/snars/incremental-03-2019.snar docs
docs/
docs/A
- Han editado A y guarda los cambios
Restaurar incremental
Para restaurar se tiene que restaurar el total más todos los incrementales hasta el día que quieres.
Por comodidad restaurare en tmp
debian ➜ tree backups
# obserbo que backups tengo
backups
├── incremental-lunes-03-2019.tgz
├── incremental-martes-03-2019.tgz
├── snars
│ ├── total-domingo-03-2019.snar
└── incremental-03-2019.snar
└── total-domingo-03-2019.tgz
# restauro el total
debian ➜ tar xvzf backups/total-domingo-03-2019.tgz -C /tmp
docs/
docs/A
docs/B
docs/C
docs/D
0 directories, 4 files
# lunes
debian ➜ tar --incremental xvzf backups/incremental-lunes-03-2019.tgz -C /tmp
docs/
docs/E
docs/F
# martes
debian ➜ tar --incremental xvzf backups/incremental-martes-03-2019.tgz -C /tmp
docs/
docs/A
# lo tengo todo
debian ➜ pruevas tree /tmp/docs
/tmp/docs
├── A
├── B
├── C
├── D
├── E
└── F
Diferenciales
Diferenciales son más útiles para cada semana o cada mes.
Parto del total anterior.
Hago el primer backup de la semana y se guardan todos los cambios de la semana.
debian ➜ cp backups/snars/total-domingo-03-2019.snar backups/snars/diferencial-S1.snar
debian ➜ tar cvzf backups/dif-semana1-03-2019.tgz docs -g backups/snars/diferencial-S1.snar
docs/
docs/E
docs/A
docs/F
tar: docs/D: el fichero no ha cambiado; no se vuelca
tar: docs/C: el fichero no ha cambiado; no se vuelca
En la segunda semana al hacer un diferencial partiendo de principio de mes, se guardan cambios de las 2 semanas.
debian ➜ cp backups/snars/total-domingo-03-2019.snar backups/snars/diferencial-S2.snar
debian ➜ tar cvzf backups/dif-semana2-03-2019.tgz docs -g backups/snars/diferencial-S2.snarz
docs/
docs/E
docs/project/
docs/project/Z
docs/project/A
docs/A
docs/F
tar: docs/D: el fichero no ha cambiado; no se vuelca
tar: docs/C: el fichero no ha cambiado; no se vuelca
Restaurar diferencial
Al restaurar diferenciales solo necesitas un total y el ultimo diferencial.
debian ➜ tar --incremental xvvzf backups/total-domingo-03-2019.tgz -C /tmp
drwxr-xr-x debian/debian 13 2019-03-03 13:21 docs/
-rw-r--r-- debian/debian 0 2019-03-03 13:21 docs/A
-rw-r--r-- debian/debian 0 2019-03-03 13:21 docs/B
-rw-r--r-- debian/debian 0 2019-03-03 13:21 docs/C
-rw-r--r-- debian/debian 0 2019-03-03 13:21 docs/D
debian ➜ tar --incremental xvvzf backups/dif-semana2-03-2019.tgz -C /tmp
drwxr-xr-x debian/debian 0 2019-03-03 14:31 docs/
-rw-r--r-- debian/debian 0 2019-03-03 13:43 docs/E
drwxr-xr-x debian/debian 0 2019-03-03 14:25 docs/project/
-rw-r--r-- debian/debian 0 2019-03-03 14:25 docs/project/Z
-rw-r--r-- debian/debian 0 2019-03-03 14:25 docs/project/A
-rw-r--r-- debian/debian 0 2019-03-03 13:43 docs/F
Un gráfico de como funcionaría las restauracioners y desde donde cogen referencia
semana1 semana2
+ + +
| | |
| <-----------------------------+
| | |
| + + | + + |
| | | | | | |
+<------------+ | | |
| +<--+ | | <-+ |
+<-+ | | | | |
| | | | <--+ | |
+----------------------------------------------+
lu ma lu ma
total