Linux

/
/
Значение дисковых квот не соответствует фактическому

Значение дисковых квот не соответствует фактическому

Симптомы

Значение в поле Диск в настройках пользователей отличается от фактически установленных дисковых квот.

Причины

  • Была изменена точка монтирования раздела
  • Квоты были определены некорректно при установке

Решение

Воспользуйтесь одним из приведенных ниже скриптов синхронизации: он приводит значения фактических дисковых квот в соответствие со значениями, установленными в панели.

Вариант скрипта необходимо выбрать в зависимости от используемой панелью СУБД. Проверить тип СУБД можно с помощью следующей команды:

mysql ispmgr

Успешное подключение к базе данных означает, что используется MySQL; вывод ошибки «Unknown database 'ispmgr'» указывает, что используется SQLite3.

Скопируйте соответствующий скрипт и сохраните его в отдельный файл на сервере. После этого сделайте его исполняемым, выполнив команду:

chmod +x ПУТЬ_ДО_ФАЙЛА/ИМЯ_СКРИПТА
Важно!

Скрипт не сработает, если он будет запущен без прав администратора и если пароль администратора СУБД в файле по пути /root/.my.cnf отличается от фактического.

Запустить скрипт можно с помощью команды:

sh ПУТЬ_ДО_ФАЙЛА/ИМЯ_СКРИПТА

Скрипт для MySQL

#!/bin/bash
mysql ispmgr -e "select users.name, userprops.value from users inner join userprops on id=userprops.users where userprops.name='limit_quota' AND value>0;" > test.txt
i=`wc -l test.txt | awk '{print $1}'` ;

for (( count=2; count<=$i; count++ ))
  do
	echo "$count";
	pd="$count""p";
	echo "$pd";
	let "in=`cat test.txt | awk '{print $2}' | sed -n "$pd"`*1024/8";
	setquota -g `cat test.txt | awk '{print $1}' | sed -n "$pd"` `cat test.txt | awk '{print $2}' | sed -n "$pd"`M `cat test.txt | awk '{print $2}' | sed -n "$pd"`M $in $in /;
  done
rm -rf test.txt

Скрипт для SQLite3

#!/bin/bash
sqlite3 /usr/local/mgr5/etc/ispmgr.db "select users.name, userprops.value from users inner join userprops on id=userprops.users where userprops.name='limit_quota' AND value>0;" > test.txt
i=`wc -l test.txt | awk '{print $1}'` ;

for (( count=1; count<=$i; count++ ))
 do
 echo "$count";
 pd="$count""p";
 echo "$pd";
 let "in=`cat test.txt | awk -F "|" '{print $2}' | sed -n "$pd"`*1024/8";
 setquota -g `cat test.txt | awk -F "|" '{print $1}' | sed -n "$pd"` `cat test.txt | awk -F "|" '{print $2}' | sed -n "$pd"`M `cat test.txt | awk -F "|" '{print $2}' | sed -n "$pd"`M $in $in /;
 done
#rm -rf test.txt