Я вставлял данные в базу данных 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
.