Архив категории ‘Операционные системы’

Найти и удалить все процессы, подходящие под критерий

kill $(ps aux | grep something | awk '{print $2}')

MySQL не может сделать open_files_limit более 1024

CentOS 7, MariaDB 10. Было необходимо увеличить open_files_limit до 15000.
В /etc/my.cnf :
open_files_limit = 15000
но после перезагрузки сервиса значение осталось на уровне 1024. В логах обнаружилась запись:
[Warning] Could not increase number of max_open_files to more than 1024

Решение:
Необходимо увеличить директиву LimitNOFILE демона systemd для сервиса mariadb.service. Для этого достаточно прописать в файле /usr/lib/systemd/system/mariadb.service внутри секции [service] строку:
LimitNOFILE=15000
Но, так делать не рекомендуется, поскольку изменения могут быть затёрты при обновлении пакетов. Как этого избежать, описано в этом же файле. Поэтому мы так и поступим. Создаём директорию /etc/systemd/system/mariadb.service.d , а внутри неё файл limits.conf , в который впишем 2 строки:
[Service]
LimitNOFILE=15000

перезагружаем сервисы:
systemctl daemon-reload
systemctl restart mariadb.service

проверяем:
mysql -e 'show variables like "open_files%"'
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| open_files_limit | 15000 |
+------------------+--------+

Сброс IPMI с помощью ipmitool

Завис веб-интерфейс IPMI на одном из серверов Supermicro.
К счастью, сохранился доступ к операционной системе, установленной на сервере (CentOS 6).
Проблему решаем с помощью ipmitool.
Установим:

yum install OpenIPMI OpenIPMI-libs ipmitool

Запускаем сброс IMPI:

ipmitool mc reset cold

Если получаем ошибку вида

Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file

то включаем модули ядра:

modprobe ipmi_devintf
modprobe ipmi_si

Если после сброса IMPI обнаруживаем неубиваемый процесс kipmi0, жрущий 100% ядра, ограничиваем его прожорливость:

echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us

Иногда ipmitool, запущенный с той же машины, где работает IPMI, не может отработать и зависает. В таком случае поможет ipmitool, установленный на другом сервере. Обращаемся с другого сервера по сети командой:

ipmitool -I lan -H xxx.xxx.xxx.xxx -U ADMIN -P PASSWORD -v mc reset cold

По мотивам 1, 2, 3, 4

Подключить новый диск

Как создать на новом диске раздел и файловую систему.
В данном примере новый диск определяется в системе как sdb.

1. Создаём раздел.
Если диск с MBR, можно использовать fdisk.
Заходим в оболочку fdisk.
fdisk /dev/sdb
жмём n — создаём новый раздел
жмём 1 — указываем номер раздела
жмём w — сохраняем изменения

Если диск в GPT, то fdisk не сгодится. Напишет такое:
WARNING: GPT (GUID Partition Table) detected on ‘/dev/sdb’! The util fdisk doesn’t support GPT. Use GNU Parted.
Значит и будем использовать parted.
Заходим в его оболочку, используя наш новый диск.
parted /dev/sdb
делаем раздел
mkpart primary 0% 100%
и выходим
quit

2. Далее создаём файловую систему
mkfs.ext4 /dev/sdb1

3. Монтируем
mount /dev/sdb1 /mnt

4. Для автомонтирования раздела правим /etc/fstab, вписав в него строку
/dev/sdb1 /mnt ext4 defaults 1 2

Поиск и удаление вредоносного кода, если он внедрён во множество файлов

Попался сайт с массово заражёнными файлами javascript. В конец каждого файла были дописаны две строки:
;document.write(unescape("%3C%73%63%72%69%70%74%20%74%79 ... далее много кода ... %73%63%72%69%70%74%3E%09"));
;var OOO='7kSKlBXYjNXZfhSZwF2YzV ... далее много кода ... ;eval(lI1(I11(OOO)));

Ищем в текущей директории файлы с расширением .js, внутри них ищем строку, начинающуюся на ;var OOO= и заканчивающуюся на eval(lI1(I11(OOO)));. Заменяем на пустую строку (двойной слэш).

find . -name "*.js" -type f -print0 | xargs -0 sed -i 's/;var OOO=.*eval(lI1(I11(OOO)));//g'

аналогично поступаем с первой строкой:

find . -name "*.js" -type f -print0 | xargs -0 sed -i 's/;document\.write(unescape("%3C%73%63%72%69.*%73%63%72%69%70%74%3E%09"));//g'

Добавление раздела внутри виртуальной машины

После расширения диска в виртуальной машине KVM необходимо создать новый раздел.
Например, у нас был диск размером 43 ГБ, добавили 10:

# fdisk -l

Disk /dev/vda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004fd07

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           1        5091    40892224   83  Linux
/dev/vda2            5091        5222     1048576   82  Linux swap / Solaris

Создадим раздел на неиспользуемом пространстве.

# fdisk /dev/vda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (5222-6527, default 5222):
Using default value 5222
Last cylinder, +cylinders or +size{K,M,G} (5222-6527, default 6527):
Using default value 6527

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Здесь мы вошли в утилиту fdisk, ввели команду n (создать раздел), затем ввели p (primary-раздел), затем номер раздела 3. Завершили работу записью изменений, нажав w.

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

Создадим файловую систему

mkfs.ext4 /dev/vda3 -j

Монтируем

mount /dev/vda3 /mnt

Правим файл /etc/fstab

/dev/vda3 /mnt ext4 defaults 1 1

Замена MySQL и установка MariaDB в CentOS 6

MariaDB — это СУБД, бинарно совместимая с MySQL, имеющая ряд улучшений и оптимизаций в коде, которые влияют на производительность баз данных в целом.
Рассмотрим замену MySQL на MariaDB в ОС CentOS 6.

Итак, после того, как сделан полный бэкап всех баз данных, удаляем MySQL и сопутствующие пакеты.

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

# yum remove mysql*

Перед установкой MariaDB нам понадобится пакет совместимости из репозитория Remi.

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Устанавливаем:

# yum --enablerepo=remi-test --disablerepo=remi install compat-mysql55

Если этого не сделать, то вы скорее всего получите ошибку при запуске php-fpm. В таком случае вам следует удалить все пакеты mysql:

# yum remove mysql-server mysql-libs mysql-devel mysql*

и установить пакет совместимости из репозитория remi.
Для установки MariaDB создадим файл /etc/yum.repos.d/MariaDB.repo со следующим содержимым:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Замените centos6-amd64 на centos6-x86 в случае, если вы используете 32-разрядную версию ОС.
Наконец, устанавливаем клиент и сервер СУБД:

# yum install MariaDB-server MariaDB-client

Стартуем сервис:

# service mysql start

Добавляем его в автозагрузку:

# chkconfig mysql on

Так же как и после установки MySQL, делаем первоначальную установку root-пароля, удаление тестовой базы, анонимных пользователей, и удалённого доступа root:

# mysql_secure_installation

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

# service mysql restart

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

# mysql -uroot -p

после ввода пароля root видим следующее:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 131
Server version: 5.5.30-MariaDB-log MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Вот и всё: ваш сервер теперь работает на MariaDB.

Расход процессами занимаемой памяти с сортировкой

Полезная однострочная команда, показывающая занимаемое процессами место в оперативной памяти. Суммирует все процессы с одинаковым именем, и сортирует по убыванию. Выводит объём в мегабайтах и имя процесса.

ps -eo comm,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print arr[i]/1024, i}}'|grep -v '^0 '|sort -n -r

Установка устаревшего ядра CentOS

В официальных зеркалах CentOS расположены пакеты только для последних версий, устаревшие удаляются.
Однако, их можно найти здесь.
Чтобы установить старое ядро, например 2.6.32-220 от версии CentOS 6.2, выполняем команду:

rpm -ivh --oldpackage http://vault.centos.org/6.2/os/x86_64/Packages/kernel-2.6.32-220.el6.x86_64.rpm

Удалить ещё проще:

rpm -e kernel-2.6.32-220.el6.x86_64

Удалить файлы, за исключением некоторых

Удаляем все файлы в текущей директории, кроме некоторых, перечисленных в аргументах.
Простейшая конструкция — спасаем от удаления один файл fileX:

find . -type f -not -name "fileX" -print0 | xargs -0 rm

Из расстрельного списка можно исключить сразу несколько файлов:

find . -type f -not -name "file1" -not -name "file2" -print0 | xargs -0 rm