nice и ionice. Приоритеты процессов

nice — позволяет указывать приоритет выполнения процессором различных задач, диапазон приоритетов -20 до 19, где 19 наименьший, если не указать, то будет стандартный приоритет 0. Удобен например при упаковке данных в архивы, чтобы эта задача не грузила сервер или когда нужно запустить много процессов, распределив нагрузку, которые занимают все процессорное время.

Пример выполнения команды с самым низким приоритетом:

nice -n 19 КОМАНДА

Посмотреть таблицу процессов и их приоритетов можно так (колонка NI):

ps axl
ps -l

Если таблица большая, можно перенаправить вывод команды в Less и смотреть постранично:

ps axl | less

Чтобы изменить приоритет:

renice -n 19 ПРОЦЕСС(PID)

Проверка значения приоритета по умолчанию (стандартно 0):

nice

ionice — позволяет указать приоритет при операциях ввода/вывода, например чтобы снизить нагрузку на диск. Первым указывается класс от 1 до 3, потом приоритет от 0 до 7, где 7 наименьший.
Классы есть трех видов:
1) Real time — Преимущественный без обращения внимания на другие процессы с указанием приоритетов от 0 до 7.
2) Best Effort — Стандартный с указанием приоритетов от 0 до 7.
3) Idle — При простое без указания приоритетов.

Пример выполнения команды с самым низким приоритетом ввода/вывода:

ionice -c2 -n7 КОМАНДА

Для изменения приоритета:

ionice -c2 -n7 -p ПРОЦЕСС(PID)

Для просмотра установленного приоритета:

ionice -p ПРОЦЕСС(PID)

Можно указать одновременно приоритеты через nice и ionice:

nice -n 19 ionice -c2 -n7 КОМАНДА

Для указания высоких приоритетов например могут понадобится root права, по этому команды нужно выполнять от имени root пользователя либо добавив перед командой sudo.

Отключение шифрования ecryptfs домашнего каталога

Понадобилось однажды отключить шифрование ecryptfs домашнего каталога, которое было когда-то настроено при установке системы.

В первую очередь сделаем копию домашнего каталога нужного пользователя:

sudo cp -rp /home/user /home/user_backup

Получим точку монтирования в каталоге:

PRIVATE=`cat ~/.ecryptfs/Private.mnt 2>/dev/null || echo $HOME/Private`

Отмонтируем каталог:

ecryptfs-umount-private

Установим права на каталог:

chmod 750 $PRIVATE

Удалим каталог и директории ~/.Private, ~/.ecryptfs:

rm -rf $PRIVATE ~/.Private ~/.ecryptfs

А также в сделанной копии, а то ecryptfs-utils может не удалится:

rm -rf /home/user_backup/.Private /home/user_backup/.ecryptfs

Если ecryptfs больше не будет использоваться в системе, то удалим утилиты:

sudo apt-get remove ecryptfs-utils libecryptfs0

Установим правильные права на директорию пользователя:

sudo chmod 750 /home/user
sudo chown user:user -R /home/user

Скопируем из резервной копии домашнего каталога нужные файлы.
Все.

Можно посмотреть встроенную инструкцию командой:

ecryptfs-setup-private --undo

Смотрите также:
Решение ошибки «Could not chdir to home directory /home/user: Permission denied»

Решение ошибки «Could not chdir to home directory /home/user: Permission denied»

Перенес однажды систему на другой диск и при подключении через SSH увидел следующие ошибки:

Could not chdir to home directory /home/user: Permission denied
-bash: /home/user/.bash_profile: Отказано в доступе

Как оказалось, причиной ошибок были неверные права на директорию /home, а именно не было прав на выполнение от группы и других пользователей.

Чтобы решить проблему сначала посмотрим какие права установлены на директорию home (должны быть drwxr-xr-x):

ls -l /
ls -l /home

И установим верные:

sudo chmod +x /home

При необходимости установим права на директорию нужного пользователя:

sudo chmod 750 /home/user
sudo chown user:user /home/user

Все, в моем случае ошибка исчезла.

Директории с большим количеством файлов

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

При попытке посмотреть список файлов естественно получится ступор на длительное время.
Как вариант их можно посмотреть через FTP, у которого за частую стандартный лимит на количество отображаемых файлов 10 000, например FTP клиентом FileZilla удобно перемещать файлы по директориям, но этот вариант длительный, из-за того что время еще тратится на FTP запросы, нагрузка на диск при этом низкая.

Если файлы не нужные, их можно удалить командой (с запросом подтверждения на удаление):

rm -r /директория/

Или удалить все без запроса вместе с директорией:

rm -rf /директория/

В моем случае не нужными были мелкие файлы, по этому перейдя в нужную директорию, удалил командой ниже все что меньше указанного размера:

cd /директория/
find -size -2 -type f -print -delete

Перед удалением можно посмотреть количество таких файлов и общее количество, однако это тоже длительные процесс:

find -maxdepth 1 -size -2 -type f -print | wc -l
find -maxdepth 1 -type f -print | wc -l

Если вместо -2 указать 0, то будут удаляться файлы с нулевым размером, то есть пустые.

Если нужно отсортировать файлы по директориям, перейдем в директорию с файлами, создадим нужные директории, например по датам и переместим файлы по шаблону (все у которых название начинается на 2017, -maxdepth 1 указывает что не нужно искать файлы в поддиректориях):

cd /директория/
mkdir 2017
find -maxdepth 1 -type f -name '2017*' -exec mv -vn -t /директория/2017 {} \+

Результат выполнения можно записывать в файл добавив к команде > файл, например:

find -maxdepth 1 -type f -name '2017*' -exec mv -vn -t /директория/2017 {} \+ > /директория/директория/файл.log

Перенос работающей системы Ubuntu на другой диск

На тесте использую систему Ubuntu Server 14.04.5 LTS.

И так, на работающей системе переключимся на root пользователя:

sudo -i

Проверим какие диски подключены:

fdisk -l

В моем случае первый используется диск /dev/sda (автоматически разбит системой при установке) и /dev/sdb — новый не размеченный:

/dev/sdb1 * Linux
/dev/sdb2 Расширенный
/dev/sdb5 Linux своп / Solaris
/dev/sdb

Разобьем новый диск /dev/sdb аналогично установленному /dev/sda:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Форматируем основной раздел и swap на новом диске:

mkfs.ext4 /dev/sdb1
mkswap /dev/sdb5

Создадим пустую директорию, смонтируем в неё первый основной раздел нового диска и скопируем на него всю информацию:

mkdir /newhdd
mount /dev/sdb1 /newhdd
cp -ax /bin/ /boot/ /etc/ /home/ /lib/ /opt/ /root/ /sbin/ /tmp/ /usr/ /var/ /initrd.img vmlinuz /newhdd
cd /newhdd
mkdir /dev /proc /srv /sys /mnt
chmod 777 /tmp

После копирования посмотрим UUID разделов нового диска:

lsblk -o NAME,UUID
blkid

Изменим в файле /newhdd/etc/fstab UUID старых разделов на новые.

И на последок выполним команды в терминале для обновления grub:

mount /dev/sdb1 /newhdd
mount --bind /dev /newhdd/dev
chroot /newhdd
update-grub
exit

После этого можно выключить систему и отсоединить старый диск, при включении копия системы запустится уже с нового диска.

Смотрите также:
Резервное копирование Linux в архив и восстановление из него

Резервное копирование Linux в архив и восстановление из него

На тесте приведу пример примитивного копирования Ubuntu Server системы в архив и восстановление на той же системе либо на чистой новой.

Создаем архив с резервной копией корня диска исключая ненужные директории и сам архив:

sudo tar cvpzf /backup_`date +%Y-%m-%d_%H_%M`.tgz --exclude=/media --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

Для восстановления на той же или чистой только установленной системе проверим достаточно ли свободного пространства:

df -h

Если сервер другой с чистой системой, создадим директорию и скопируем в неё копию директории /boot с загрузчиком и файл /etc/fstab:

sudo mkdir /OLD
sudo cp -R /boot/ /OLD/
sudo cp /etc/fstab /OLD/

Находясь в директории с архивом распакуем его с сохранением прав на файлы поверх системы:

sudo tar xvpfz backup_`date +%Y-%m-%d_%H_%M`.tgz -C /

Возвращаем директорию /boot и файл fstab:

sudo cp -R /OLD/boot/ /boot/
sudo cp /OLD/fstab /etc/fstab

Убедимся что копирование прошло успешно и в файлах /boot/grub/grub.cfg и /etc/fstab указан верный UUID, посмотреть UUID разделов в текущей системе можно командой:

lsblk -o NAME,UUID

Перезагружаем систему:

sudo reboot

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

Смотрите также:
Перенос работающей системы Ubuntu на другой диск

Решение «Suspicious process running under user» и «Excessive resource usage»

Иногда некоторые нужные процессы используют много ресурсов на сервере и система начинает часто уведомлять об этом на email.
Например как в моем случае, после установки Zabbix агента начали приходить уведомления:

Suspicious process running under user zabbix
и
Excessive resource usage: zabbix

Чтобы исключить проверки Zabbix или других служб, необходимо в самом низу WHM панели открыть «ConfigServer Security & Firewall» и в разделе «lfd — Login Failure Daemon» где «Edit lfd ignore file» выбрать «csf.pignore, Process Tracking«, нажать «Edit» и в самом низу добавить путь к выполняемому процессу, например:

exe:/usr/sbin/zabbix_agentd

Чтобы применить изменения нажмем внизу кнопку «Change«.

Естественно если ресурсы использует неизвестный процесс, скрипт и т.д, то его необходимо исследовать.

Смотрите также мои статьи:
Как в Linux узнать PID процесса и убить его
Решение ошибки «LFD: Excessive resource usage»