find

Si vous effacer des fichiers avec find, il est mieux d'utiliser la date d'accès. Par exemple, pour effacer tous les fichiers avec un accès supérieur à 33 jours:

 find /backup -type f -atime +33 -exec rm -f {} \;

Plan

Plan d'ajout:
À chaque fichier qu'on modifie, répertoire qu'on crée:
1- Est-il archivé?
2- Où est-il archivé?

3- Quel est sa priorité, sa durée de vie?
4- À quelle fréquence est-ce qu'on le modifie?
5- À quelle fréquence est-ce qu'on l'archive?

À chaque programme:
Est-il sur la liste?
Modifie-t-on des fichiers de configuration?

Plan de recouvrement:
Comment réinstalle-t-on le système de façon identique?

Mes ordinateurs

Ordi #1

Service serveurs:
 * apache2
 * postgresql
 * mysql

Configuration Desktop: 
 * iceweasel, 
 * icedove, 
 * pidgin, 
 * xchat

/backup/website/000-apache2 (configuration (/etc/hosts and scripts)
/backup/website/site1.domain/apache2conf (/etc/apache2/sites-enabled)
/backup/website/site1.domain/scripts (php, perl files)
/backup/website/site1.domain/data (html, css, js, user images, upload, ...)
/backup/website/site1.domain/sql (postgresql, mysql)
/backup/packages/
/backup/profiles/

backup and recovery scripts:

000-apache2 Makefile
BACKUPDIR=/backup/website/000-apache2
HOSTFILE=/etc/hosts
MODLISTING=$(BACKUPDIR)/mod.list
MODSHARED=$(BACKUPDIR)/mod-shared.list
SITELISTING=$(BACKUPDIR)/site.list

.PHONY: backup recovery

backup:
	cp $(HOSTFILE) $(BACKUPDIR)/hosts
	ls /etc/apache2/mods-enabled > $(MODLISTING)
	apache2ctl -M 2>&1 | grep shared | sed 's/ \(.*\)_module (shared)/\1/' > $(MODSHARED)
	ls /etc/apache2/sites-enabled > $(SITELISTING)

recovery:
	cp $(HOSTFILE) $(HOSTFILE).old
	cp $(BACKUPDIR)/hosts $(HOSTFILE)
	while read line ; do a2enmod $$line; done < $(MODSHARED)
profile Makefile
BACKUP_DIR=/backup/profile
USER_DIR=/home/youruser

OTHER_FILES=.bashrc .gtk-bookmarks .vimrc
ICEDOVE_DIR=icedove
ICEWEASEL_DIR=iceweasel
DZELO_DIR=dzelo
PIDGIN_DIR=pidgin
XCHAT_DIR=xchat

ICEDOVE_PROFILE=.mozilla-thunderbird
ICEWEASEL_PROFILE=.mozilla/firefox
DZELO_PROFILE=.dzelo
PIDGIN_PROFILE=.purple
XCHAT_PROFILE=.xchat2

.PHONY: backup recovery

backup:
	tar -C $(USER_DIR) -czf $(BACKUP_DIR)/backup.tgz $(OTHER_FILES)
	tar -C $(USER_DIR) -czf $(BACKUP_DIR)/$(ICEDOVE_DIR)/backup.tgz $(ICEDOVE_PROFILE) --exclude='$(ICEDOVE_PROFILE)/*/ImapMail' --exclude='$(ICEDOVE_PROFILE)/*/extensions'
	tar -C $(USER_DIR) -czf $(BACKUP_DIR)/$(ICEWEASEL_DIR)/backup.tgz $(ICEWEASEL_PROFILE) --exclude='$(ICEWEASEL_PROFILE)/*/Cache' --exclude='$(ICEWEASEL_PROFILE)/*/extensions' --exclude='$(ICEWEASEL_PROFILE)/*/places.sql*' --exclude='$(ICEWEASEL_PROFILE)/*/urlclassifier*'
	tar -C $(USER_DIR) -czf $(BACKUP_DIR)/$(DZELO_DIR)/backup.tgz $(DZELO_PROFILE) --exclude='$(DZELO_PROFILE)/*/Cache'
	tar -C $(USER_DIR) -czf $(BACKUP_DIR)/$(PIDGIN_DIR)/backup.tgz $(PIDGIN_PROFILE) --exclude='$(PIDGIN_PROFILE)/logs' --exclude='$(PIDGIN_PROFILE)/icons'
	tar -C $(USER_DIR) -czf $(BACKUP_DIR)/$(XCHAT_DIR)/backup.tgz $(XCHAT_PROFILE) --exclude='$(XCHAT_PROFILE)/scrollback'

recovery:
	@echo "TODO, uncompress every backup.tgz..."

Ordi #2

Service serveurs: apache2, mysql, validator

Ordi #3

Logiciel

Voir csync

Stratégie

1. Je crée un script qui permet d'archiver une partie des contenus. Ensuite, je peux copier le tout vers un disque externe

1. Répertoire et scripts

/home/backup : répertoire d'archivage

/home/backup/postgres : répertoire d'archivage pour l'usager postgres

$HOME/Makefile : script de backup

/l/backup : lien symbolique vers le disque d'archivage)

/l/backup/nommachine : répertoire sur le disque d'archivage pour l'ordinateur

2. Quoi archiver

  • Base de données MySQL - seulement la dernière version
  • Base de données PostgreSQL - seulement la dernière version

$HOME/Makefile

.PHONY: help backup-mysql backup-psql copy
BACKUP_DST_DIR=/home/backup
COPY_DIR=/l/backup/nommachine

help:
	@echo "make help, make backup-mysql, make copy (disque externe)"

backup-mysql:
	@echo "Mot de passe pour l'usager root (mysql)"
	mysqldump --all-databases -u root -p > $(BACKUP_DST_DIR)/mysqldump.sql

backup-psql:
	@echo "Mot de passe pour l'usager root (système)"
	su -c "su postgres -c 'pg_dumpall > $(BACKUP_DST_DIR)/postgres/pg_dumpall.sql'"

copy:
	rsync -avz $(BACKUP_DST_DIR)/* $(COPY_DIR)/

Commandes

make backup-mysql: mysqldump (demande le mot de passe root mysql)

make backup-psql: pg_dumpall (demande le mot de passe root système)

make copy: copie/rsync le contenu de /home/backup vers le disque dur externe