Archives par étiquette : synchronisation

Synchroniser des dossiers Linux et Windows avec rsync

Voici un bout de temps que je voulais parler de cette astuce et il semblerait que cela soit au goût du jour. En effet j’ai eu une discussion avec un ami qui me disait avoir eu du mal à se faire un script de backup en bash qui ne copie que les fichiers ajoutés ou supprimés. Je vais donc vous parler de rsync qui est plus que pratique pour synchroniser des dossiers 🙂 Je vais vous décrire ci-dessous deux application, u ne qui me sert à récupérer mes sauvegardes sur mon serveur en ligne et une autre qui me permet de synchroniser mon dossier de documents personnels entre mon poste fixe sous Linux (Ubuntu) et mon Laptop qui est lui sous Windows (XP Pro). rsync est un logiciel libre sous licence GNU GPL. Il permet de synchroniser des dossiers en réalisant une copie incrémentale depuis un dossier source vers un dossier cible. Vous le trouverez sous Windows, Linux ou Mac OS. Pour l’installation rien de plus simple “apt-get install rsync” sous Ubuntu ou “urpmi rsync” sous Mandriva.

rsync d’un dossier distant via SSH :

rsync -av -e “ssh -p 9022 -i /home/iser/.ssh/id_rsa” –progress “user@serveur:/sauvegarde/” /home/user/recup_sauvegardes/ >> /home/user/log_rsync.txt 2>&1

Comme pour toute commande vous pouvez accéder à la documentation avec “man rsync” ou tout simple sur divers sites internet comme ici en français ou ici en anglais. ici nous nous contentons de copier les nouveaux fichiers ou les fichiers modifiés sans suppression. Cela m’oblige en général à coupler cette commande en crontab avec un petit script se basant sur find pour supprimer les fichiers au bout d’un certain délai. Voici ci-dessous la commande en question :

REP=”/home/user/recup_sauvegardes/”
find $REP -mtime +7 -name ‘*.tgz’ -delete

Ici je conserve les données pendant 7 jours (man page find). Cela permet d’avoir une récupération automatique de mes sauvegardes sans avoir à me soucier de nettoyer moi même le dossier les recevant. Cela ne m’interdit en aucun cas de vérifier le plus régulièrement possible la qualité des sauvegardes au cas où 😉 Cette méthode est pas mal mais elle a ses limitations. En effet dans le cas où on veut sauvegarder un disque complet ou bien un dossier où on ajoute ou supprime des fichiers, on souhaiterait se simplifier la vie.

Synchronisation d’un dossier Windows (Samba) avec un dossier sous Linux

Ceci est ma méthode, je suis sûr qu’il en existe d’autres, mais pour le moment elle me suffit 😉 Dans un premier temps il vous faut créer un partage de fichier sur votre ordinateur Windows. Nous pourrons ainsi y accéder avec Samba. Le plus simple est de le monter dans un dossier local avec cifs (urpmi cifs sous Mandriva ou apt-get install smbfs sous Ubuntu).

sudo mount -t cifs //10.0.0.13/e /mnt/partage-win -o uid=user,gid=user,file_mode=0640,dir_mode=0750,iocharset=utf8,credentials=/home/user/.smbserver

Il est obligatoire de monter le dossier avec root, mais nous pouvons stocker l’utilisateur et le mot de passe pour le partage samba dans un fichier comme ci-dessus. Le fichier en question contient uniquement ces éléments :

username=MyUser
password=MyPassword

L’autre solution peut-être de mettre l’utilisateur et le mot de passe directement dans la ligne de commande comme illustré ci-dessous :

sudo mount -t cifs //10.0.0.13/e /mnt/partage-win -o uid=user,gid=user,file_mode=0640,dir_mode=0750,iocharset=utf8,username=MyUser,password=MyPassword

Une fois le partage monté, vous y avez accès depuis votre machine sous Linux et vous pouvez alors y copier vos fichiers avec “cp”, en déplacer avec “mv” ou toute autre action souhaitée. Dans notre cas il ne nous reste qu’à synchroniser nos deux dossiers :

rsync -av –delete –progress /media/MonDisque/MonDossier/ /mnt/partage-win/MonDossier/

Nous pouvons voir ici l’option supplémentaire “–delete” qui va supprimer les fichiers qui n’existent plus dans le dossier source. Cela permet d’éviter de devoir nettoyer manuellement le dossier de destination 😉 Dans le cadre d’une sauvegarde automatique, je vous inviterai à ne pas mettre cette option et à lance rune commande avec que quand vous voulez faire une remise à plat en étant sûr de ne rien perdre. On ne sait jamais des fois que vous auriez supprimer un fichier important par erreur dans votre dossier source 😉

Je me sers de la même commande pour synchroniser un disque de 500 Go contenant pleins de données, avec un disque USB de la même capacité. J’ai ainsi régulièrement une sauvegarde à jour de mon disque dur personnel et si il lâche comme c’est déjà arrivé par le passé, j’aurai bien moins de pertes. Bon d’accord, comme l’a dit un ami, quand on doit le faire manuellement c’est mal. Nous pourrions donc coupler cette méthode en tâche planifiée (cron) vers un NAS. Un NAS est un périphérique permettant d’avoir un ou deux disques en réseau. Souvent on trouve ce boitier avec deux disques durs en RAID 1 (miroir), c’est à dire se répliquant l’un sur l’autre, et branché sur le réseau, accessible en FTP ou en partage Samba. Bon je n’en suis pas encore là, mais j’y pense 😉 J’espère que cet article vous sera utile et vous aidera pour vos synchronisations ou vos sauvegardes. n’hésitez pas à partager vos trucs et astuces via les commentaires 🙂

Et avant d’oublier ou d’éteindre la machine sous Windows (si vous l’éteignez), n’oubliez pas de démonter le dossier :

sudo umount /mnt/partage-win

Configurer un serveur de temps sous Windows

Voici quelques temps j’ai été confronté à un souci. Si tout mes serveurs Linux étaient bien synchronisés avec des serveurs NTP (cf. ce post), les postes de travail sous Windows avaient eux une légère avance. Vous me direz que ce n’est pas trop grave, mais comme les personnes travaillant sur ces postes se basent sur cette heure pour partir, cela fait désordre. En cherchant quelques informations j’ai pu avoir une meilleure idée du fonctionnement des serveurs de temps sous Windows. Au sein d’un domaine, les machines se basent sur le temps du serveur d’autorité, donc bien souvent le PDC (Contrôleur de domaine). Ce dernier se base par défaut sur son horloge interne. C’est en effet le plus simple et le plus sûr car on est alors indépendant d’une source externe (pas de souci si on a pas Internet). Dans le cadre de mon réseau d’entreprise, j’ai un accès à Internet redondant avec d’un côté une fibre optique à 100 Mo et de l’autre une connexion basique via une Box d’un FAI. Si l’accès principal se coupe, le Firewall basculera automatiquement vers la deuxième connexion le temps que la première se rétablisse. L’horloge interne de mon contrôleur de domaine semblant avancer, j’ai décidé de synchroniser ce dernier avec le pool ntp français, comme pour mes serveurs Linux.

Je suis d’abord tombé sur cette fiche du support de Microsoft. On y trouve une description très complète de ces soucis, peut-être trop. Autant sous Linux on édite juste le fichier de configuration ntp.conf, autant ici on se retrouve à devoir jouer avec la base de registre, ce qui est loin d’être ma méthode préférée sur un contrôleur de domaine principal 😉 Je suis ensuite tombé sur un site d’administration réseau où l’explication était plus simple et a répondue à mon besoin (www.adminreseau.net). Voici ci-dessous la méthode que j’ai donc appliquée :

Dans une invite de commandes DOS entrer la commande suivante :

net time /setsntp:fr.pool.ntp.org

Cette commande permettra de configurer la source de temps externe en modifiant les entrées suivantes de la base de registre (personnellement, j’ai fais une sauvegarde complète de la base de registre avant de faire cette manipulation, on est jamais trop prudents …) :

HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type passera de NT5DS à NTP
HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags passera de 10 à 5 en décimal
HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\NtpServer sera créée au besoin et contiendra le nom du serveur NTP utilisé pour la synchronisation, ici fr.pool.ntp.org (pool de serveurs de temps français).

Il fallait ensuite redémarrer le serveur de temps en tapant les commandes suivantes à la suite :

net stop w32time (arrêt du service de temps)
net start w32time (démarrage du serveur de temps)
w32tm /resync /rediscover (force la synchronisation)

Si vous avez d’autres contrôleurs de domaine, vous pouvez faire cette manipulation supplémentaire dessus pour les synchroniser :

/setsntp (efface la configuration précédente)
w32tm /resync /rediscover (force la synchronisation)

Vous pourrez ensuite vérifier la synchronisation de vos contrôleurs de domaine avec la commande suivante :

w32tm /monitor

Personnellement je n’avais qu’un seul contrôleur de domaine donc pas besoin de m’occuper de la synchronisation des autres. En revanche je ne me suis pas embêté à aller sur chaque poste Windows pour le synchroniser. Les utilisateurs éteignant les machines la nuit, la synchronisation s’est faite naturellement au petit matin quand ils ont rallumés leurs postes de travail 🙂

Maintenir ses machines linux à l’heure avec ntp (exemple sur une Mandriva)

Quand il s’agit de conserver nos machines Linux (ou même Windows) à l’heure, il y a toujours plusieurs solutions. La première est de le faire manuellement avec date ou ntpdate par exemple.

date MMJJhhmmAAAA

MM = mois sur deux chiffres (01 à 12)
JJ = jour du mois sur deux chiffres (01 à 31)
hh = heures sur deux chiffres (00 à 24)
mm = minutes sur deux chiffres (00 à 59)
AAAA = année sur quatre chiffres

exemple : date 032112352010

Cette première solution est plutôt longue et fastidieuse, de plus elle favorise les risques d’erreur par une saisie manuelle. On peut ensuite demande à se synchronise avec un serveur de temps. Pour cela il faudra installer ntp-client ( urpmi ntp-client )

[root@srv-test ~]# ntpdate fr.pool.ntp.org
21 Mar 16:55:50 ntpdate[3392]: step time server 193.55.167.1 offset -6335.455525 sec
[root@srv-test ~]#

La commande ntpdate permet de synchroniser une machine avec un serveur de temps sur Internet. C’est déjà un plus mais cela reste toujours manuel. Il est possible de l’automatiser en rajoutant une tâche planifiée dans la crontab, afin que cela tourne une fois par jour par exemple.

0 1 * * * ntpdate fr.pool.ntp.org >> /root/ntpd.sh.log

Un complément d’information car voici deux fois que j’utilise une URL sans l’avoir expliquée. Il existe un projet en ligne pour un ensemble de serveurs de temps qui se nomme NTP POOL PROJECT. On peut y trouver des listes de serveurs de temps en ligne pour se synchroniser pour l’ensemble des pays, et donc pour la France aussi : pool zone France.

Nous venons de voir comment réaliser une synchronisation simple, déclenchée à un instant “t”, mais il peut-être intéressant d’avoir une synchronisation permanente avec la présence d’un serveur de temps sur notre machine ou dans notre réseau privé. Pour cela il nous faut installer ntp ( urpmi ntp ) et ensuite modifier le fichier de configuration :

vi /etc/ntp.conf

On doit y trouver ceci les lignes suivantes :

server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org

Nous allons les remplacer par les lignes suivantes :

server fr.pool.ntp.org prefer
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org

Le paramètre “prefer” ici utilisé permet de définir le serveur par défaut, celui qui faudra utiliser en premier. Une fois ce paramètre enregistré il nous suffit de démarrer le service ntp.

service ntpd start

Il est possible qu’il ne se relance pas en cas de redémarrage machine, pour cela vérifier la liste des services qui sont planifiés au démarrage.

chkconfig –list

Pour passer ntpd en démarrage automatique, utilisez la commande suivante :

chkconfig –level 2345 ntpd on

Maintenant que notre service tourne, nous pouvons le vérifier avec la commande ntpq -p :

[root@srv-test ~]# ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
LOCAL(0)        .LOCL.          10 l    –   64    0    0.000    0.000   0.001
ks35603.kimsufi .INIT.          16 u    –   64    0    0.000    0.000   0.001
ns1.azuria.net  .INIT.          16 u    –   64    0    0.000    0.000   0.001
digi00161.digic .INIT.          16 u    –   64    0    0.000    0.000   0.001
81.19.16.225    .INIT.          16 u    –   64    0    0.000    0.000   0.001
ns.e-madeinfran 192.93.2.20      2 u    3   64    1   42.936  -176568   0.001
[root@srv-test ~]#

Il est possible, comme dans l’exemple ci-dessus, d’avoir des INIT dans la deuxième colonne. Il suffit d’attendre un peu pour les voir disparaitre. Au fil du temps qui va passer, les valeurs de la colonne “reach” vont augmenter. La connexion est considérée comme stable quand vous aurez d’affiché 377.

[root@srv-test ~]# ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
LOCAL(0)        .LOCL.          10 l   37   64  377    0.000    0.000   0.001
*ntp.univ-poitie 195.34.89.227    3 u  284 1024  377   47.650   -1.037   1.482
+ntp.univ-angers 195.220.94.163   2 u  196 1024  377   50.958    4.429   1.011
+sd-16014.dedibo 213.162.48.10    3 u  130 1024  377   40.630    6.772   2.567
+diane.ensma.fr  192.93.2.20      2 u  198 1024  377   52.104    2.234   1.397
+ddb3.europeacon 193.204.114.232  2 u  164 1024  377   36.599    4.849  41.804
[root@srv-test ~]#

La synchronisation n’est pas immédiate et peut prendre quelques minutes. Le serveur précédé d’une astérisque (*) est celui utilisé, ceux précédés d’un plus (+) sont les potentiels, ceux précédés d’un moins (-) seront retirés et ceux précédés d’un espace sont soit inaccessible, soit trop éloignés. Et voila votre machine ou serveur est maintenant synchronisé avec un serveur de temps et il devrait le rester tant que le service tournera. Il peut-être envisagé de se servir d’une machine synchronisée pour servir de serveur de temps au sein du réseau directement par la suite. Une configuration plus poussée peut-être envisagée dans ce cadre (je verrais si je rédige un nouvel article ultérieurement, mais en attendant vous pouvez consulter l’un des deux liens ci-dessous qui donne des procédures légèrement différentes, dont une sur nicolargo qui prend en compte plus de paramètres.

Installation d’un serveur NTP sous Ubuntu sur blog.nicolargo.com
Mettre vos serveurs à la bonne heure avec NTP sur system-Linux.eu