Déplacer le répertoire de données (data) de Nextcloud sur un disque externe

déplacement container

Nextcloud conserve les fichiers dans un répertoire nommé data.

 

Il peut arriver que la taille de ce répertoire devienne trop juste pour accueillir de nouveaux fichiers.

Ce guide décrit la procédure le déplacer depuis un Raspberry Pi utilisant Raspbian ou Arch Linux-ARM vers une clé USB ou un disque dur externe.

La même procédure peut être utilisée en l'adaptant pour une installation de Nextcloud sur un ordinateur (système Debian ou Arch Linux et leurs dérivés) pour laquelle on souhaite déplacer le répertoire de données (data) sur une autre partition ou un autre disque dur interne.

Préalables

  • Préparer du disque qui accueillera le répertoire data de Nextcloud

    • Connecter une clé USB ou un disque dur au Raspberry Pi (ou à l'ordinateur)
    • Eventuellement, si on ne souhaite pas utiliser l'ensemble de la clé ou du disque, créer une partition dédiée.
    • Formater si nécessaire la partition (ou le disque) de préférence en ext4 ou alors en ntfs.

 

  • Repérer où se trouve le répertoire "data" de l'instance Nextcloud

    • Dans une installation par défaut de Nextcloud sur Debian ou Raspbian, il est situé dans /var/www/nextcloud/data
    • Dans une installation par défaut de Nextcloud sur Arch Linux (ou ArchLinux ARM), il est à /srv/http/nextcloud/data
    • Dans les tutoriels de ce site, il se trouve à /var/www/data pour Raspbian, /srv/http/data sur Arch Linux-ARM
    • En cas de doute, éditer /var/www/nextcloud/config/config.php sur Debian et dérivés, /srv/http/nextcloud/config/config.php sur Arch Linux et dérivés et regarder ce qui est indiqué à la suite de 'data directory'.

 

  • Sauvegarder Nextcloud

    La procédure qui suit n'efface pas le répertoire data d'origine. On pourra donc revenir en arrière à n'importe quel moment.
    On peut toutefois par mesure de sécurité supplémentaire effectuer une sauvegarde selon la procédure décrite dans un autre article.

Créer et monter le nouveau répertoire de données

 

Après avoir connecté le disque dur ou la clé USB, sur l'ordinateur ou le Raspberry Pi où est installé Nextcloud :

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 7,3G 0 disk 
└─sda1 8:1 1 2G 0 part 
mmcblk0 179:0 0 58,6G 0 disk 
├─mmcblk0p2 179:2 0 7,7G 0 part /
└─mmcblk0p1 179:1 0 63M 0 part /boot

 

Ici, la clé USB de taille 7.3 G s'appelle sda et présente une seule partition (sda1) de 2G.

Raspbian est installé sur une microcarte SD nommée mmcblk0 et contient deux partitions.

 

Nous créons le point de montage pour la partition qui accueillera le répertoire data :

$ sudo mkdir /mnt/ncdata

 

Montage d'une partition formatée en ext4 :

$ sudo mount -t ext4 /dev/sda1 /mnt/ncdata

 

Nous donnons les droits sur le nouveau répertoire au propriétaire de Nextcloud

  • sur Debian ou dérivés
$ sudo chown www-data:www-data /mnt/ncdata -Rv
appartenance de « /mnt/ncdata » modifiée de root:root en www-data:www-data

 

  • sur Arch Linux ou dérivés
$ sudo chown http:http /mnt/ncdata -Rv

 

Vérification du montage

$ mount | grep sda1
/dev/sda1 on /mnt/ncdata (...)

 

Montage d'une partition formatée en ntfs :

$ sudo apt install ntfs-3g

$ sudo mount -t ntfs-3g /dev/sda1 /mnt/ncdata

 

Dans le cas d'une partition ntfs, les droits ne peuvent pas être modifiés par la commande chown, nous le ferons dans la table de montage automatique (fstab).

 

Vérification du montage

$ mount | grep sda1
/dev/sda1 on /mnt/ncdata type fuseblk (rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096)

 

Créer un point de montage automatique

L'étape suivante consiste à créer un point de montage automatique pour que la partition soit disponible dès le démarrage du Raspberry Pi ou de l'ordinateur sans avoir à lancer la commande mount.

Pour cela, nous allons ajouter une ligne dans le fichier /etc/fstab :

 

Pour une partition ext4

$ sudo nano /etc/fstab

 

À la fin du fichier, ajouter la ligne suivante :

/dev/sda1 /mnt/ncdata ext4 defaults,noatime 0 1

 

Ctrl-o pour enregistrer, Ctrl-x pour quitter nano.

 

Pour une partition ntfs

Il faut d'abord connaître l'identifiant de l'administrateur du serveur Nextcloud :

  • sur Debian et dérivés :
    $ id www-data
    
    uid=33(www-data) gid=33(www-data) groupes=33(www-data)

 

  • sur Arch Linux et dérivés :
    $ id http
    
    uid=33(http) gid=33(http) groupes=33(http)

 

Dans les deux cas, l'uid et le gid sont 33. Cela va nous permettre de donner la propriété à l'administrateur de Nextcloud sur la partition destinée à data.

 

$ sudo nano /etc/fstab

 

À la fin du fichier, ajouter la ligne suivante :

/dev/sda1 /mnt/ncdata ntfs-3g rw,auto,users,exec,nofail,nls=utf8,umask=007,uid=33,gid=33 0 0

 

Ctrl-o pour enregistrer, Ctrl-x pour quitter nano.

 

Redémarrage

Il faut maintenant redémarrer l'ordinateur ou le Pi pour prendre en compte les changements dans fstab :

$ sudo reboot

 

Après le redémarrage, on peut vérifier que le disque est bien monté automatiquement :

$ mount | grep sda1
/dev/sda1 on /mnt/ncdata (...)

Copie du répertoire data sur la nouvelle partition

Maintenant que la partition destinée à recevoir le répertoire data de nextcloud est créée et montée, nous copions celui-ci sur le nouvel emplacement.

Pour cela, nous allons utiliser la commande rsync qui permet de garder les droits et copie les fichiers cachés.

 

On arrête déjà le serveur web :

  • sur Debian ou dérivés
    $ sudo systemctl stop apache2

 

  • sur Arch Linux ou dérivés
    $ sudo systemctl stop httpd

 

Puis on lance la copie :

$ sudo rsync -avx /var/www/data/ /mnt/ncdata/data

 

Pour vérifier que tout s'est bien passé :

$ sudo su

# ls -al /mnt/ncdata/data

drwxrwx--- 1 www-data www-data 4096 mai 13 11:47 .
drwxrwx--- 1 www-data www-data 4096 mai 13 14:57 ..
drwxrwx--- 1 www-data www-data 0 févr. 19 17:00 appdata_oc5k1vr45c1p
drwxrwx--- 1 www-data www-data 0 févr. 19 16:47 files_external
-rwxrwx--- 1 www-data www-data 284 mai 13 11:51 .htaccess
-rwxrwx--- 1 www-data www-data 0 mai 13 11:51 index.html
drwxrwx--- 1 www-data www-data 0 févr. 19 17:06 main_user
-rwxrwx--- 1 www-data www-data 46033 mai 13 11:52 nextcloud.log
-rwxrwx--- 1 www-data www-data 0 mai 13 11:51 .ocdata

# exit

 

Bien vérifier en particulier que les fichiers cachés .ocdata et .htaccess ont été copiés.

Modification de la configuration de Nextcloud

Dans cette étape finale, il s'agit de reconfigurer Nextcloud pour qu'il pointe vers le nouveau répertoire de données.

 

  • sur Debian ou dérivés
$ sudo nano /var/www/nextcloud/config/config.php
  • sur Arch Linux ou dérivés
$ sudo nano /srv/http/nextcloud/config/config.php

 

Trouver la ligne commençant par 'data directory' :

'datadirectory' => '/var/www/data',

 

et mettre le nouvel emplacement :

'datadirectory' => '/mnt/ncdata/data',

 

(bien prendre garde à la virgule à la fin de la ligne).

 

On relance le serveur apache :

  • sur Debian ou dérivés :
    $ sudo systemctl start apache2
  • sur Arch Linux ou dérivés
    $ sudo systemctl start httpd

 

Il faut terminer en lançant un scan des fichiers déplacés et à une réparation :

  • sur Debian ou dérivés :
$ cd /var/www/nextcloud

$ sudo -u www-data php console.php files:scan --all

$ sudo -u www-data php occ maintenance:repair

 

  • sur Arch Linux ou dérivés :
$ cd /srv/http/nextcloud

$ sudo -u http php console.php files:scan --all

$ sudo -u http php occ maintenance:repair

 

Selon le nombre de fichiers présents dans Nextcloud, cette commande peut prendre plus ou moins longtemps (éventuellement plusieurs heures lorsque l'on a plusieurs gigas de données).

Connexion à Nextcloud et vérification

On se reconnecte à Nextcloud dans un navigateur.

 

On vérifie que les fichiers sont bien présents. On ajoute ensuite un fichier dans Nextcloud (téléversement).

Sur l'ordinateur où est installé Nextcloud, on vérifie que le nouveau fichier a bien été ajouté sur la nouvelle partition :

$ sudo su

# cd /mnt/ncdata/data/nom_utilisateur/files

# ls

Dans la liste, nous devons retrouver le fichier téléchargé dans Nextcloud.

 

On peut éventuellement effacer le précédent répertoire utilisé par Nextcloud dont nous n'avons plus besoin :

$ sudo rm -rf /var/www/data

(à adapter selon l'emplacement précédent du répertoire data de Nextcloud)

 

You may also like...

17 Responses

  1. Steph dit :

    Bonjour,super tuto j’aimerais savoir comment on peut faire si on a déja déplacé le fichier data avec cette manip sur un disque dur externe et que l’on veux le remplacer par un autre sachant que mon rpi ne veut pas alimenter 2 HDD?et que le /ncdata ce trouve déjà dans /mnt de l’ancien HDD. Merci

    • SoozX dit :

      A mon avis, le plus simple est de cloner l’ancien disque externe sur le nouveau à partir d’un ordinateur (voir ici avec la commande dd sous linux : https://doc.ubuntu-fr.org/dd ou voir ici depuis windows : https://korben.info/6-outils-pour-cloner-un-disque-dur-sous-windows-et-linux.html).

      Avant de débrancher l’ancien disque du pi pour le cloner, sur le pi :
      Vérifie que dans le fstab (/etc/fstab) tu as bien /dev/sdxx pour indiquer /mnt/ncdata et non un partuuid à la place de /dev/sdxx). Ensuite arrête le serveur web puis le pi (remplacer apache2 par httpd si c’est un système archlinux) :
      $ sudo systemctl stop apache2
      $ sudo systemctl disable apache2
      $ sudo halt

      Au redémarrage du pi avec le nouveau disque dur, avec $ lsblk, vérifie que le nouveau disque dur a l’ancien identifiant (/dev/sdxx), sinon modifie /etc/fstab avec le nouvel identifiant.
      Si c’était un partuuid que tu avais, faire $ sudo blkid pour connaître le partuuid du nouveau disque et modifier fstab avec.

      Ensuite
      $ sudo systemctl start apache2
      $ sudo systemctl status apache2 #pour vérifier que le serveur web n’a pas de problème
      $ sudo systemctl enable apache2

      Aller sur nextcloud dans un navigateur pour vérifier. Si problème, faire un scan comme indiqué dans le tuto (mais je ne pense pas que cela soit nécessaire).

  2. Mathias dit :

    Bonjour,

    Merci pour ton super tuto ! Moi je coince un peu étant pas un expert si tu as la solution à mon problème ca serais génial…

    Je t’explique j’ai nextcloud sur une VM ubuntu 16.04.3 LTS virtualmin et j’aimerais que les data soient stocké dans mon FreeNAS car il y en a beaucoup trop pour la VM web.

    J’ai essayé le partage NFS mais quand je fais un ls -al après un cp -R /…./data/*.* /mon_partage_nfs déjà je ne retrouve pas les bon droit user et group sur les fichiers et dossiers copiés et malgré *.* je n’ai pas n’on plus les fichiers caché. Je me suis arrêté la car je pense pas que ca va fonctionner.

    As tu une solution à me proposé ? Est ce que ca marcherais en partant sur un Zvol avec iSCSI au lieu d’un dataset partagé en NFS.

    Merci par avance pour ta réponse

    • SoozX dit :

      Bonjour,
      Tu as une configuration que je n’ai jamais utilisée (en particulier le FreeNAS).
      Concernant la copie des fichiers, je te conseille d’utiliser plutôt dans ce cas rsync (au lieu de cp)
      $ sudo rsync -avx /var/www/data/ /mon_partage_nfs/data
      rsync va tout recopier, y compris les fichiers cachés

      Pour la configuration de ton partage, j’ai trouvé un article qui pourrait peut être t’aider (il est en anglais) : https://www.iceflatline.com/2010/11/configure-freenas-to-store-your-apache-web-files/
      Il explique comment donner les bons droits à un partage NFS sur un FreeNAS pour un serveur apache, ce qui me semble coller à ta configuration.

      Bonne chance.

  3. ypose dit :

    Bonjour,
    Je t’embête encore.
    J’ai cette erreur quand je partage un fichier depuis que j’ai monté mon disque. Tout fonctionne je peux transférer les fichiers mais pas les partager.

    “Votre répertoire est lisible par les autres utilisateurs
    Veuillez changer les permissions du répertoire en mode 0770 afin que son contenu ne puisse pas être listé par les autres utilisateurs.”

    Merci pour ton aide

    • SoozX dit :

      Bonjour,
      Que donne la commande :

      $ sudo su
      # ls -al /mnt/ncdata/data

      (dans le cas où le nouveau répertoire s’appelle de cette façon, sinon tu adaptes à ta configuration)

      (tu fais
      # exit
      pour revenir sur ton utilisateur)

      • Ypose dit :

        Bonjour,
        En fait c’est encore une erreur de ma part, j’avais mis les mauvaises permissions dans le montage automatique de mon disque. Je n’ai pas fait comme toi je passe par autofs. Tout fonctionne desormais.
        Par contre je trouve nextcloud beaucoup plus lent desormais… peut être parce que j’ai pointé sur mon nas.
        J’ai également un truc bizarre qui n’a peut etre rien à voir. Mais depuis que j’ai changé de répertoire de destination avant dans “+ applications” j’avais un “magasin” pour ajouter des applications (genre registration etc… ou bien j’ai revé?) et depuis plus rien… Enfin je n’ai plus que “Vos applications, Applications activées, desactivées et pack d’applications” …
        Il y a t-il un rapport ?
        Merci à toi bonne journée.

  4. Mehdi Benaniba dit :

    Salut,

    J’ai un soucis lors du montage de partition! Pour faire un état de l’art, il faut savoir que ce disque et la partition avait djà été monté sur le même rasp avant un format complet de la sd contenant raspbian (si ça peut aider à identifier une source d’erreur).

    ———- lsblk ———-
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda 8:0 0 1,8T 0 disk
    ├─sda1 8:1 0 128M 0 part
    └─sda2 8:2 0 1,8T 0 part
    mmcblk0 179:0 0 29,8G 0 disk
    ├─mmcblk0p1 179:1 0 41,8M 0 part /boot
    └─mmcblk0p2 179:2 0 29,8G 0 part /

    ———- sudo mount -t ext4 /dev/sda2 /mnt/ncdata ———- (je l’ai mis sur la partition 2 comme c’est là qu’il y a toute l’espace de stockage)

    mount: wrong fs type, bad option, bad superblock on /dev/sda2,
    missing codepage or helper program, or other error

    In some cases useful info is found in syslog – try
    dmesg | tail or so.

    J’ai fouillé sur quelques forums et je n’ai pas trouvé grand chose, je continu mes recherches mais si vous avez une idée, je suis preneur!

    • SoozX dit :

      Mehdi,

      Vérifie que sda2 est bien formaté en ext4
      $ lsblk -f /dev/sda2

      Si oui, il faut peut être réparer le système de fichier sur /dev/sda2.
      Attention, il y a un risque de perte des données.
      $ sudo fsck.ext4 -vy /dev/sda2
      (à faire sur la partition non montée)

      S’il y a des erreurs ou avertissements, note les bien.

  5. Mehdi Benaniba dit :

    Merci de ta réponse!

    Il semble que le disque soit formaté en ntfs :

    $ lsblk -f /dev/sda2
    NAME FSTYPE LABEL UUID MOUNTPOINT
    sda2 ntfs Seagate Expansion Drive
    549687DD9687BE4C

    Du coup je viens de lire qu’au début du tuto, tu parles d’un formatage ext4 OU ntfs. Faut-il simplement continuer le tuto en utilisant “ntfs” plutôt que “ext4”?

  6. Bonjour, c’est super pour le tutoriel. Mais moi j’aimerai pas vraiment déplacer mon répertoire de données vers un disque externe mais en faite, j’aimerai bien stocker mes données sur un autre disque s’il s’avère que j’ai plus d’espace sur mon disque principal.

    En effet, j’ai un serveur de 3To me connaissant en moins de 06 mois ce disque sera plein (lol). Serait-ce possible de connecter un disque dur externe ou internet a l’intérieur de mon serveur afin qu’ils prennent le relais tout en ayant toujours la possibilité de consulter le contenu du premier disque sur mon instance nextCloud.

  7. MarcusB dit :

    Salut,

    J’ai modifié le pointage de data directory vers disque monté mais je me retrouve avec un problème. l’application IOS fonctionne et nextcloud desktop aussi mais par contre impossible d’accéder à l’interface web.
    Je tombe sur ce message après avoir entré mes identifiants.

    “Internal Server Error

    The server encountered an internal error and was unable to complete your request.
    Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
    More details can be found in the server log.”

    connaitriez-vous une astuce pour remettre tout ça dans l’ordre ?

    Merci++

    • SoozX dit :

      Bonjour,

      Pour avoir plus de détails sur l’erreur, il faudrait regarder le log de nextcloud (nextcloud.log situé dans le répertoire data de nextcloud) et éventuellement celui d’apache (/var/log/apache2/error.log).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *