Назад | Перейти на главную страницу

PostgreSQL - Не удалось расширить файл На устройстве не осталось места. СОВЕТ: проверьте свободное место на диске

Я вставлял данные в базу данных PostgreSQL и получил сообщение об ошибке:

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

Я использую CentOS 7, и я проверил часть своего статуса на своей Linux-машине:

df -h

Я новичок в Linux, и, судя по результатам моих df -h команда, я мог видеть, что система хранения Linux работает иначе, чем Windows.

Похоже, PostgreSQL подталкивает к /dev/mapper/centos-root, но в нем доступно только 50 ГБ.

Вопрос 1: Как я могу это изменить? Как я могу выделить дополнительное свободное пространство, доступное в /dev/mapper/centos-home к моему ~/centos-root каталог?

Вопрос 2: На моей машине два жестких диска по 200 ГБ каждый. Но по моему df-h команда, похоже, у меня доступно только 200 ГБ. Почему это так? Как я могу использовать все 400 ГБ пространства?

Похоже, проблема в том, что мой /dev/mapper/centos-root все завалено. Я вставил в PostgreSQL почти 10 000 000 строк данных с 12 столбцами.

Вопрос 3: Достаточно ли этого, чтобы занимать 50 ГБ места?

Спасибо!

Изменить: вывод pvs, vgs, lvs

Ваш сервер плохо разбит на разделы. Это не полностью ваша вина; скорее, на мой взгляд, настройки RHEL / CentOS по умолчанию вводят в заблуждение.

Начнем с описания на pvs; vgs; lvs команда, введенная выше. Все они связаны с LVM2, диспетчер логических томов, который, вкратце, позволяет создавать «гибкие» разделы с изменяемым размером:

  • pvs показывает, как физические диски подключены к системе LVM. У вас было 2 диска по 200 ГБ, но pvs показывает только физическое устройство размером 1x200 ГБ. Это означает, что ваши диски находятся в режиме RAID1 (зеркалирование) и полностью назначены LVM (то есть: физическое пространство не назначено);

  • vgs показывает группу томов, назначенную вашим физическим устройствам, и любое полезное свободное пространство. В вашем случае свободное место составляет <4 МБ, поэтому в основном у вас нет свободного места. Следующая команда объясняет, что использует ваше пространство ...

  • lvs показывает, что у вас есть два логических тома (воспринимайте их как разделы): корневой том 50 ГБ и домашний том ~ 145 ГБ. Короче говоря, ваш root объем (где находится PostgreSQL) намного меньше, чем вам нужно; скорее, твой home объем очень большой, учитывая, как мало данных (<5 ГБ) он содержит.

Для решения проблемы у вас есть два варианта:

  • переместить PostgreSQL под home объем, например под /home/pgsl. Я бы избегал этого, потому что /home не подходящее место для базы данных, и это воля вызвать административную нагрузку в будущем. Более того, вам нужно перевести SELinux в разрешающий режим (setenforce 0 + /etc/selinux/config редактирование), чтобы переезд работал;

  • сжать home объем и увеличить root. Это легче сказать, чем сделать, особенно если вы используете XFS (файловая система RHEL / CentOS по умолчанию), которая не поддерживает сжатие.

Если и только если ваши данные под home могут быть удалены / перезагружены, вы можете выполнить следующие шаги, чтобы УДАЛИТЬ то home объем и увеличение root. Обратите внимание, что небольшая ошибка (как моя, так и ваша) ВОЛЯ уничтожить ваши данные (убить любых кошек на расстоянии ~ 100 км), поэтому я беру ОТСУТСТВИЕ ОТВЕТСТВЕННОСТИ для окончательного результата. Если вы не уверены, остановитесь здесь и вызовите профессионального системного администратора для поддержки. Хорошо, вперед; Я отправлю последовательность команд с относительным описанием:

  • umount /home: это отключить (то есть "отключить") домашний том;
  • lvremove centos/home: этот навсегда уничтожить /home и все его содержание;
  • lvextend centos/root -L +100G: это расширяет root объем на 100 ГБ;
  • xfs_growfs /: предполагая, что вы используете XFS, это расширяет корневую файловую систему, чтобы соответствовать базовому расширенному тому. Если вы используете ext4 (что маловероятно) нужно оформить resize2fs /dev/centos/root.