web-dev-qa-db-fra.com

PostgreSQL - Impossible d'étendre le fichier Pas d'espace disponible sur l'appareil. CONSEIL: Vérifiez l'espace disque libre

J'ai inséré des données dans la base de données PostgreSQL et j'ai reçu le message d'erreur:

psycopg2.OperationalError: could not extend file "base/16384/61892": No space left on device
HINT: Check free disk space

J'utilise CentOS 7 et j'ai vérifié une partie de mon état sur ma machine Linux:

df -h

enter image description here

Je suis assez nouveau sur Linux et basé sur le résultat de mon df -h commande, j'ai pu voir que le système de stockage Linux fonctionne différemment de Windows.

Il semble que PostgreSQL pousse vers /dev/mapper/centos-root, mais il ne dispose que de 50 Go.

Question 1: Comment puis-je le changer? Comment puis-je attribuer l'espace libre supplémentaire disponible dans /dev/mapper/centos-home à mon ~/centos-root répertoire?

Question 2: Ma machine a deux disques durs de 200 Go chacun. Mais selon mon df-h commande, il semblait que je n'ai que 200 Go disponibles. pourquoi est-ce le cas? Comment puis-je profiter d'un espace complet de 400 Go?

Il semble que le problème est que mon /dev/mapper/centos-root est tout rempli. J'ai inséré près de 10 000 000 lignes de données avec 12 colonnes dans PostgreSQL.

Question 3: Est-ce assez gros pour occuper 50 Go d'espace?

Merci!

Modifier: sortie de pvs, vgs, lvs

enter image description here

3
Eric Kim

Votre serveur est mal partitionné. Ce n'est pas entièrement de votre faute; les paramètres RHEL/CentOS par défaut sont plutôt trompeurs à mon avis.

Commençons par la description du pvs; vgs; lvs commande entrée ci-dessus. Ils sont tous liés à LVM2 , un gestionnaire de volumes logiques qui, en bref, vous permet de créer des partitions "flexibles" et redimensionnables:

  • pvs montre comment les disques physiques sont connectés au système LVM. Vous disposiez de 2 disques de 200 Go, mais pvs n'affiche que 1 périphérique de 1 200 Go. Cela signifie que vos disques sont en RAID1 (mise en miroir) et qu'ils sont entièrement affectés à LVM (c'est-à-dire: aucun espace physique n'est attribué);

  • vgs affiche le groupe de volumes affecté à vos périphériques physiques et tout espace libre utilisable. Dans votre cas, l'espace libre est <4 Mo, donc fondamentalement vous n'avez pas d'espace libre. La commande suivante explique ce qui utilise votre espace ...

  • lvs montre que vous avez deux volumes logiques (pensez-les comme des partitions): un volume racine de 50 Go et un volume domestique de ~ 145 Go. En bref, votre volume root (où réside PostgreSQL) est bien plus petit que vos besoins; au contraire, votre volume home est très important compte tenu du peu de données (<5 Go) qu'il contient.

Pour résoudre le problème, vous avez deux options:

  • déplacer PostgreSQL sous le volume home, par exemple sous /home/pgsl. J'éviterais cela parce que /home n'est pas le bon endroit pour une base de données et cela le sera causera un fardeau administratif à l'avenir. De plus, vous devez mettre SELinux en mode permissif (setenforce 0 + /etc/selinux/config édition) pour laisser la relocalisation fonctionner;

  • réduire le volume home et agrandir root. C'est plus facile à dire qu'à faire, surtout si vous utilisez XFS (système de fichiers RHEL/CentOS par défaut), qui ne prend pas en charge la réduction.

Si et seulement si vos données sous home peuvent être supprimées/rechargées, vous pouvez suivre les étapes suivantes pour [~ # ~] supprimer [~ # ~] le volume home et l'agrandissement root. Veuillez noter qu'une petite erreur (la mienne et la vôtre) [~ # ~] [~ # ~] détruira vos données (tuant tous les chats dans un ~ 100 km de portée), et donc je prends PAS DE RESPONSABILITÉ pour le résultat final. En cas de doute, arrêtez-vous ici et appelez un administrateur système professionnel pour obtenir de l'aide. Ok, allons-y; Je posterai une séquence de commandes avec la description relative:

  • umount /home: cela démonte (ie "désactive") le volume d'origine;
  • lvremove centos/home: ce détruire définitivement/home et tous son contenu;
  • lvextend centos/root -L +100G: cela augmente le volume de root de 100 Go;
  • xfs_growfs /: en supposant que vous utilisez XFS, cela étend le système de fichiers racine pour qu'il corresponde au volume étendu sous-jacent. Si vous utilisez ext4 (ce qui est improbable), vous devez émettre resize2fs /dev/centos/root.
5
shodanshok