Outils pour utilisateurs

Outils du site


creer_une_timecapsule_avec_un_raspberry_pi_et_un_disque_dur_externe

Créer une TimeCapsule avec un Raspberry Pi et un disque dur externe

FIXME Ce tuto permet de créer une TimeCapsule fonctionnelle. Néanmoins, dans mon cas, elle n'est pas stable et cesse de fonctinner après quelques heures. A tester!

Qu'est-ce qu'une TimeCapsule?

Une TimeCapsule est un routeur, borne WiFi et périphérique de stockage en réseau commercialisé par Apple. Son principal avantage est de pouvoir permettre à tout Mac récent de pouvoir effectuer des sauvegardes incrémentielles en réseau à l'aide de TimeMachine, et ce avec une grande simplicité de configuration. Son principal désavantage est, par contre, son prix… en particulier si on choisit une TimeCapsule de grande capacité. Sa consommation est aussi importante: 34W.

L'objectif ici est d'utiliser un Raspberry Pi, ainsi qu'un disque dur externe, pour simuler une TimeCapsule et pouvoir effectuer des sauvegardes en réseau, de manière simple et transparente.

La configuration reste néanmoins délicate. Aucun des tutoriels présents sur le net ne m'a permis de faire fonctionner la Time Capsule. Ce qui suit est donc le résultat d'un grand nombre de tests, et fonctionne… en tous cas chez moi. J'ai réuni ce qui fonctionne bien dans les divers tutoriels trouvés.

Matériel nécessaire

  • Un Raspberry Pi, sa carte SD et son alimentation
  • Un disque dur externe 3.5“, formaté Mac (HFS+)

Note: il n'est pas possible de brancher directement un disque dur externe 2.5” sur le Raspbery Pi, en voulant l'alimenter par le port USB. Dans ce cas, un hub USB alimenté est nécessaire, ou il faut choisir un disque dur 2.5“ doté d'une alimentation externe. Dans ces cas, autant choisir un disque dur externe 3.5”, de prix équivalent, mais de bien plus grande capacité.

Notes préalables

  • Dans notre exemple, le disque dur sera toujours nommé timecapsule
  • Je pars du principe que le Raspberry Pi tourne sur une Raspian fraîchment installée et configurée correctement.

Compétences prérquises

  • Savoir installer et configurer une Raspian
  • Savoir se connecter en SSH au Raspberry Pi
  • Savoir créer, éditer et enregistrer un fichier texte (avec nano ou vim, par exemple)

Pour plus d'informations, consulter la page suivante: http://edurobot.ch/raspi/index.php?title=Accueil#Raspberry_PI_pour_d.C3.A9butants

Sources

Etape 1: mise à jour

  • Avant de commencer, il convient de mettre la Raspian à jour, en lançant ces deux commandes:
sudo apt-get update
sudo apt-get upgrade
  • Il est temps de se servir un café en attendant que tout se mette à jour.

Etape 2: installer Avahi

  • Avahi est un protocole compatible avec Bonjour. Pour l'installer, entrer la commande suivante:
sudo apt-get install libdb5.1-dev db5.1-util libgcrypt11-dev avahi-daemon libavahi-client-dev
  • Maintenant, il faut faire démarrer Avahi au démarrage:
sudo update-rc.d avahi-daemon defaults

Etape 3: configurer le montage du disque HFS+

Support du HFS+

  • Commencer par installer le support du HFS+:
sudo apt-get install hfsplus hfsutils hfsprogs

Nom du disque dur

  • Récupérer le nom du disque dur à l'ade de la commande suivante:
sudo blkid

Dans mon cas, cela donne le résultat suivant:

/dev/mmcblk0p1: SEC_TYPE="msdos" UUID="C522-EA52" TYPE="vfat"
/dev/mmcblk0p2: UUID="62ba9ec9-47d9-4421-aaee-71dd6c0f3707" TYPE="ext4" 
/dev/sda1: LABEL="EFI" UUID="67E3-17ED" TYPE="vfat" 
/dev/sda2: UUID="33c51855-dc5c-3cd1-95fa-aef3e30c49b3" LABEL="TimeCapsule" TYPE="hfsplus" 

On peut immédiatement identifier le disque dur qui servira aux sauvergardes; il s'appelle TimeCapsule et est formaté en hfsplus et son emplacement est sda2:

/dev/sda2: UUID="33c51855-dc5c-3cd1-95fa-aef3e30c49b3" LABEL="TimeCapsule" TYPE="hfsplus" 

Désactiver la journalisation du disque dur

Il faut désactiver la journalisation sur la partition HFS+, sinon, notre disque TimeMachine ne fonctionnera pas:

  • Aller dans le home:
cd
  • Créer un fichier disable.c:
sudo nano disable.c
  • Y copier le script suivant:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <byteswap.h>
int main(int argc, char *argv[])
{
        int fd = open(argv[1], O_RDWR);
        if(fd < 0) {
                 perror("open");
                 return -1;
        }

        unsigned char *buffer = (unsigned char *)mmap(NULL, 2048, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
        if(buffer == (unsigned char*)0xffffffff) {
                 perror("mmap");
                 return -1;
        }

        if((buffer[1024] != 'H') && (buffer[1025] != '+')) {
                 fprintf(stderr, "%s: HFS+ signature not found -- aborting.\n", argv[0]);
                 return -1;
        }

        unsigned long attributes = *(unsigned long *)(&buffer[1028]);
        attributes = bswap_32(attributes);
        printf("attributes = 0x%8.8lx\n", attributes);

        if(!(attributes & 0x00002000)) {
                 printf("kHFSVolumeJournaledBit not currently set in the volume attributes field.\n");
        }

        attributes &= 0xffffdfff;
        attributes = bswap_32(attributes);
        *(unsigned long *)(&buffer[1028]) = attributes;

        buffer[1032] = '1';
        buffer[1033] = '0';
        buffer[1034] = '.';
        buffer[1035] = '0';

        buffer[1036] = 0;
        buffer[1037] = 0;
        buffer[1038] = 0;
        buffer[1039] = 0;
        printf("journal has been disabled.\n");
        return 0;
}
  • Compiler le programme:
gcc disable.c
  • Désactiver le journal:
sudo ./a.out /dev/sda2

Dans mon cas, la commande blkid avait indiqué que mon disque dur était le sda2. A modifier au cas-par-cas.

  • Le résultat doit être le suivant:
journal has been disabled.

Créer un point de montage

  • Créer un dossier pour pouvoir monter le disque dur. Le nom du dossier sera similaire à celui de mon disque dur, soit TimeCapsule:
sudo mkdir /media/TimeCapsule
  • Pour monter automatiquement le disque dur, il faut modifier le fichier /etc/fstab, avec la commande suivante:
sudo nano /etc/fstab
  • A la fin du fichier, entrer la ligne suivante. Attention: il faut modifier l'UUID (que vous avez récupéré à l'aide de la commande blkid) et le remplacer par le vôtre. Idem pour le nom TimeCapsule.
UUID=33c51855-dc5c-3cd1-95fa-aef3e30c49b3 /media/TimeCapsule hfsplus rw,force,exec,auto,users 0 3
  • Finallement, vous devriez obtenir un résultat proche de celui-ci:
roc             /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
UUID=33c51855-dc5c-3cd1-95fa-aef3e30c49b3 /media/TimeCapsule hfsplus rw,force,exec,auto,users 0 3
  • Enfin, nous allons redémarrer le Raspberry pi:
sudo reboot

Installer Netatalk

Netatalk est une version libre du protocole AFP. Nous allons installer la version 3.0.2, réputée fonctionner correctement.

Installation

  • Pour installer Netatalk, commencer par le télécharger avec la commande suivante:
sudo wget http://sourceforge.net/projects/netatalk/files/netatalk/3.0.2/netatalk-3.0.2.tar.gz
  • Ensuite, on le décompresse:
tar xvzf netatalk-3.0.2.tar.gz
  • On se rend dans le répertoire contenant Netatalk:
cd netatalk-3.0.2
  • On configure le type d'installation voulu:
./configure --with-init-style=debian --with-zeroconf
  • On compile le tout:
make
  • Et pour terminer, on installe Netatalk:
sudo make install
  • Lancer Netatalk au démarrage:
sudo update-rc.d netatalk defaults

Configuration de Netatalk

  • Créer le dossier timecapsule dans TimeCapsule:
cd /media/TimeCapsule
sudo mkdir timecapsule
cd
  • Créer l'utilisateur timecapsule:
sudo adduser timecapsule
  • Régler les droits de l'utilisasteur timecapsule pour le répertoire TimeCapsule:
sudo chown timecapsule /media/TimeCapsule/timecapsule
  • Modifier le fichier de configuration /usr/local/etc/afp.conf:
sudo nano /usr/local/etc/afp.conf
  • Ajouter le texte suivant, après avoir modifié le nom du disque et de l'utilisateur selon vos besoins:
[Ma TimeCapsule]
[Global]

vol preset = default_for_all_vol

log file = /var/log/netatalk.log

uam list = uams_dhx.so,uams_dhx2_passwd.so

save password = yes

mimic model = TimeCapsule



[default_for_all_vol]

cnid scheme = dbd
[Ma TimeCapsule]

path = /media/TimeCapsule

valid users = timecapsule

time machine = yes             
  • Modifier le fichier suivant: sudo nano /etc/avahi/services/timecapsule_afpd.service:
sudo nano /etc/avahi/services/timecapsule_afpd.service
  • Y ajouter le texte suivant:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
</service-group>
  • On termine avec un redémarrage:
sudo reboot

Configurer le Mac pour une sauvegarde

  • Dans le Finder, le Raspberry Pi apparaît bien comme une TimeCapsule:

  • Ouvrir alors les Préférences Système/Time Machine, puis cliquer sur Ajouter ou supprimer le disque de sauvegarde et sélectionner la Time Capsule:

  • Au niveau des débits, ils sont tout à fait correct; j'atteinds près de 3 Mo/s sur mon bon vieux réseau WiFi G, avec des murs de 40 cm d'épaisseur… évidemment, la première sauvegarde de 750 Go de données prend deux jours. Mais comme les sauvegardes suivantes sont incrémentielles, la quantité de données à sauvegarder est bien moindre.
creer_une_timecapsule_avec_un_raspberry_pi_et_un_disque_dur_externe.txt · Dernière modification: 2013/06/08 07:57 par admin