Etendre son espace de stockage avec un volume storage sur un VPS chez hetzner

Hello :waving_hand:

Les offres VPS de Hetzner sont limitées à 40Gb, ensuite il faut mettre en place un Volume storage.
Voici comment je m’y suis pris, en espérant que ça puisse en aider d’autres :slight_smile:

Approche globale : acheter un volume supérieur à 40Gb, y déplacer le contenu de son dossier /home, ensuite vider /home pour récuper de l’espace sur la stockage de base du vps et relier /home au nouvel emplacement extensible situé dans le volume. Par la suite, quand on aura besoin de plus d’espace, il suffira de commander plus d’espace pour le volume et c’est tout.

:warning: Faites bien un backup de votre vps avant de vous lancer. Je ne suis pas responsable en cas de perte de données (!)

Second point de vigilance : le backup Hetzner ne sauvegarde que le VPS, pas le volume additionnel. Donc ça peut être utile de mettre en place un backup du volume par la suite.


On achète le volume, puis on suit les instructions pour le monter. cf doc hetzner

À ce stade notre fstab devrait contenir une ligne dans cet esprit lorsqu’on fait cat /etc/fstab :

/dev/disk/by-id/scsi-0HC_Volume_105537 /mnt/monVolume ext4 discard,nofail,defaults 0 0

Notre volume est situé sur /mnt/monVolume. Si on tappe df on pourra le retrouver dans la liste des volumes montés, avec son espace restant.

Ensuite, il va falloir copier le dossier /home vers le volume. J’ai fait ça avec rsync :

On fait un dry-run pour tester, rien ne sera copié c’est une simultion. Ça permet de voir d’éventuelles erreurs :

rsync -aHAXx --numeric-ids --partial --info=progress2 --exclude={"/dev/*","/proc/*","/sys/*","/run/*","/tmp/*"} --dry-run /home /mnt/monVolume/

Si pas d’erreur et que tout semble correct, on relance la même commande sans --dry-run :

rsync -aHAXx --numeric-ids --partial --info=progress2 --exclude={"/dev/*","/proc/*","/sys/*","/run/*","/tmp/*"} /home /mnt/monVolume/

Pour les explications :

  • -a (archive) : active récursivité + conserve la plupart des attributs (équivalent à -rlptgoD).
  • -H : conserve les hard links.
  • -A : conserve les ACLs (listes de contrôle d’accès).
  • -X : conserve les extended attributes (xattrs).
  • -x : ne traverse pas les systèmes de fichiers montés (reste sur le même device que /home).
  • –numeric-ids : transfère les UID/GID numériques sans tenter de résoudre les noms d’utilisateurs/groupes.
  • –partial : conserve les fichiers partiellement transférés (utile pour reprendre un transfert interrompu).
  • –info=progress2 : affiche une barre de progression globale et le débit pour l’ensemble du transfert (utile pour gros transferts).
  • –exclude={“…”} : exclut les motifs listés (ici les pseudo-filesystems et répertoires temporaires) : /dev, /proc, /sys, /run, /tmp. Note : les guillemets/accrochage avec les accolades sont interprétés par le shell — selon le shell, on peut préférer plusieurs --exclude ou une syntaxe différente.

On jette un oeil dans le nouveau dossier copié : ls -la /mnt/monVolume/home

Maintenant on va renommer /home (pour pas le supprimer tout de suite) et créer un nouveau dir vide :

sudo mv /home /home.bak
sudo mkdir /home

On s’assure que le nouveau dossier /home est bien en root:root et 755 pour le nouveau dossier /home (comme l’ancien)

Et maintenant il faut binder /home au nouveau dossier copié sur le volume (j’ai cru comprendre que c’était mieux que de faire un lien symbolique. Pour différentes raisons.. que je ne pourrai pas expliquer étant humble amateur)

On va donc modifier /etc/fstab (sudo vi /etc/fstab) en ajoutant après la ligne nouvellement ajoutée tout à l’heure :

/mnt/monVolume/home /home none bind 0 0

À ce stade on fait sudo systemctl daemon-reload pour rafraîchir la table fstab.

Et on devrait être bon. On va dans /home et on vérifie qu’on retrouve nos petits dedans. Puis on teste le reste. Les apps et co… On fait un reboot pour voir si tout tient la route.

Et si on est tout bien, alors enfin on peut supprimer /home.bak en faisant sudo rm -rf /home.bak

Voilà :smiling_face::victory_hand:

PS: Je ne suis pas sys admin et si des expert·e·s passant par là ont des conseils pour améliorer tout ça, n’hésitez pas !

1 Like

De mémoire, il faut bien gérer le point de montage pour que ça n’écrive pas dans le /home si le montage a foiré.

Je n’ai pas trop suivi les débats montage/lien symboliques et j’ai un peu de tout sur mon serveur…

(Dont des liens symboliques qui pointent vers des montages…)