# [howto] Serveur de sauvegarde incrémentales

## bouleetbil

Bonjour,

J'ai lu un article sur Linux pratique qui me paraissait sympa donc le voila adapté pour Gentoo pour ceux que cela intérresse :

Serveur de sauvegarde incrémentales

I.Configuration coté serveur :

1.Installation des logiciels :

```
# emerge openssh

# rc-update add sshd default

# /etc/init.d/sshd start

# emerge rsyncd

# rc-update add rsyncd default

# /etc/init.d/rsyncd start

# emerge dcron

# rc-update add dcron default

# /etc/init.d/dcron start

# crontab /etc/crontab
```

Preparer une partition pour acceuillir les sauvegardes.

Monter cette partition sur /mnt/sauvegarde.

2.Configuration du serveur pour un poste client :

Pour chaque utilisateur qui utilisera ce serveur de sauvegarde, il faut créé un groupe et un utilisateur :

user1 représente un utilisateur et guser1 son groupe.

```
# groupeadd guser1

# useradd -m -d /mnt/sauvegarde/user1 user1 -g guser1
```

On défini un mot de passe pour cet utilisateur :

```
# passwd user1
```

On efface les fichiers créés par la commande useradd :

```
# rm /mnt/sauvegarde/user1/.*
```

On met en place la sécurité des dossiers afin que seul user1 et root est accés à /mnt/sauvegarde/user1 :

```
# chgrp guser1 /mnt/sauvegarde/user1

# chown root /mnt/sauvegarde/user1

# chmod o-rwx /mnt/sauvegarde/user1

# mkdir /mnt/sauvegarde/user1/sauvegardes

# mkdir /mnt/sauvegarde/user1/jour

# mkdir /mnt/sauvegarde/user1/semaine

# mkdir /mnt/sauvegarde/user1/mois

# chmod -R o-rwx /mnt/sauvegarde/user1/

# chgrp -R guser1 /mnt/sauvegarde/user1/

# chmod g+w /mnt/sauvegarde/user1/sauvegardes
```

Création d'un dossier .ssh pour stocker le mot de passe.

```
# mkdir /mnt/sauvegarde/user1/.ssh

# chmod o+rx /mnt/sauvegarde/user1

# chgrp -R guser1 /mnt/sauvegarde/user1/.ssh
```

Automatisation des sauvegardes :

Créer un fichier /etc/cron.monthly/user1m.cron et y insérer :

```
#! /bin/bash

rm -rf /mnt/sauvegarde/user1/mois

mv /mnt/sauvegarde/user1/semaine /mnt/sauvegarde/user1/mois

mv /mnt/sauvegarde/user1/jour /mnt/sauvegarde/user1/semaine

cp -al /mnt/sauvegarde/user1/sauvegardes /mnt/sauvegarde/user1/jour
```

Rendre ce fichier exécutable :

```
# chmod u+x /etc/cron.monthly/user1m.cron
```

Créer un fichier /etc/cron.weekly/user1w.cron et y insérer :

```
#! /bin/bash

rm -rf /mnt/sauvegarde/user1/semaine

mv /mnt/sauvegarde/user1/jour /mnt/sauvegarde/user1/semaine

cp -al /mnt/sauvegarde/user1/sauvegardes /mnt/sauvegarde/user1/jour
```

Rendre ce fichier exécutable :

```
# chmod u+x /etc/cron.weekly/user1w.cron
```

Créer un fichier /etc/cron.daily/user1d.cron et y insérer :

```
#! /bin/bash

rm -rf /mnt/sauvegarde/user1/jour

cp -al /mnt/sauvegarde/user1/sauvegardes /mnt/sauvegarde/user1/jour
```

Rendre ce fichier exécutable :

```
# chmod u+x /etc/cron.daily/user1d.cron
```

Configuration du démon cron :

Editer /etc/crontab pour y inserer ces lignes :

```
#minutes heures jour mois jourdelasemaine commande

*/15 * * * * test -x /usr/bin/run-crons && /usr/sbin/run-crons

#selon l'emplacement de run-crons

0 * * * * rm -f /var/spool/cron/lastrun/cron.hourly

0 5 * * * rm -f /var/spool/cron/lastrun/cron.daily

0 4 * * 1 rm -f /var/spool/cron/lastrun/cron.weekly

0 3 1 * * rm -f /var/spool/cron/lastrun/cron.monthly
```

run-crons vérifie si des scripts sont à lancer dans /etc/cron.*

Le format de chaque entrée :

minutes : de 1 à 60

heures : de 1 à 24

jour : de 1 à 31

mois : de 1 à 12

jourdelasemaine : de 1 à 7

Recharger le fichier crontab :

```
# crontab /etc/crontab
```

II Configuration coté client :

1. Configuration du poste pour l'utilisateur user1 :

Créer dans /home un répertoire sauvegarde avec en lui donnant les droits d'accès pour user1.

```
# mkdir /home/sauvegarde

# chown user1 /home/sauvegarde

# chgrp users /home/sauvegarde
```

Ce répertoire est accessible aux membre du groupe "users"

Donc, maintenant vous pouvez copier les données à sauvegarder dans /home/sauvegarde

Créer un fichier /usr/sbin/sauvegardes.cron y insérer :

```
#! /bin/bash

date > /home/user1/rsync.log

sync -e ssh -av --delete --hard-links --progress "/home/sauvegarde/" \

user1@SERVEUR.domaine.com:./sauvegardes/ >> rsync.log
```

SERVEUR.domaine.com correspond au nom de la machine on peux le remplacer par son adresse IP.

Rendre ce fichier exécutable pour user1 :

```
# chwon user1 /usr/sbin/sauvegardes.cron

# chgrp users /usr/sbin/sauvegardes.cron

# chmod u+x /usr/sbin/sauvegardes.cron
```

Pour lancer une sauvegarde :

```
$ /usr/sbin/sauvegardes.cron
```

Pour automatiser la sauvegarde il faut un démon cron qui tourne puis copier le fichier qui vient d'être créer :

```
# cp /usr/sbin/sauvegardes.cron /etc/cron.daily
```

Configuration du mot de passe SSH :

```
# ssh-keygen -t rsa (appuyer 3 fois sur entrée)

# cat ~/.ssh/id_rsa.pub | ssh user1@SERVEUR.domaine.com 'cat - >> ~/.ssh/authorized_keys'

# ssh root@SERVEUR.domaine.com

# chmod go-w /mnt/sauvegarde/user1/.ssh
```

2. Réstauration des données :

Il est possible d'utiliser sftp, dans konqueror saisir l'adresse :

sftp://user1@SERVEUR.domaine.com.

Sous gnome j'utilise gftp qui gère bien sftp.

----------

## bibi.skuk

petite suggestion... lors de la creation des utilisateurs...

l'option -k de useradd permet de specifier un repertoire skel, autre que celui par defaut... et donc d'eviter de supprimer les   fichiers générés par useradd...

Edit : bien joué, je vais mettre un truc similaire en place...

----------

