Sections
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