linux xfs ssd trim

Известно что ssd и hdd диски по разному относятся к записи и удалению данных. При удалении ssd’шка просто помечает ячейки как неиспользуемые, данные же никуда не исчезают. При попытке записать новые дынные в эту же ячейку ssd’шка должна сначала удалить то что там уже записано и только потом записать снова. Команда TRIM информирует ssd’шку о том что конкретные блоки больше не используются и могут быть очищены и использованы вновь. Это имеет смысл делать в фоне и на регулярной основе.

Все описаное далее происходит на CentOS 7.7 . Чтобы убедиться работает ли trim на ssd диске нужна утилита hdparm.

[root@adminhp]# hdparm -I /dev/sda | grep "TRIM"
bash: hdparm: команда не найдена…
[root@adminhp]# yum install hdparm

[root@adminhp]# hdparm -I /dev/sdb | grep "TRIM"
* Data Set Management TRIM supported (limit unknown)

[root@adminhp]# fstrim -v /
/: 16,6 GiB (17764634624 bytes) trimmed

Команда fstrim -v / собственно делает всю необходимую работу. Она входит в пакет util-linux и в centos установлена по умолчанию. Теперь имеет смысл создать в /etc/cron.hourly скрипт с этой командой. и выдать ему права на исполнение.

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
chmod +x /etc/cron.hourly/trim

rsyslog как централизованный сервер сбора log’ов

Тема в рунете описана достаточно, но когда дошло до дела я столкнулся с рядом несоответствий, поэтому решил описать свой опыт, чтобы не забыть. В качестве сервера использую centos 7.7 . клиенты — коммутаторы и маршрутизаторы cisco.

Для решения задачи централизованного сбора логов необходимо настроить два сервиса — rsyslog и logrotate.

rsyslog
настраивается конфигом /etc/rsyslog.conf или созданием файла с произвольным именем в папке /etc/rsyslog.d/

В конфиге необходимо подключить модули imupd и/или imtcp, а также определить порты. Я подключаю оба.

 $ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514

Далее необходимо определить правило для обработки логов удаленных систем. Общий формат правил это — facility.severity_level destination (where to store log) .
но существуют дополнительные возможности, а именно условный оператор, т.е. проверка соответствия сообщения каким либо условиям. В моем случае все сетевые устройства принадлежат определенной сети, что я и хочу использовать в качестве условия.

Так как конфигурация может (и будет) меняться, мне требуется универсальное решение. Поэтому в правиле обработки есть смысл использовать шаблон, которые необходимо определить в конфиге выше правила.

В случае срабатывания условия, необходимо остановить процесс обработки. Иначе сообщение будет обработано остальными правилами и, в случае если они дефолтные — попадет в /var/log/messages — чего хотелось бы избежать.

$template RemoteLogs,"/var/log/remote/%HOSTNAME%.log"
#определяем шаблон

if $fromhost-ip contains '192.9.33' then ?RemoteLogs
#определяем условие и применяем шаблон

& stop
#останавливаем процесс в случае срабатывания услови

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

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Команды управления сервисом стандартные

systemctl start rsyslog 
systemctl status rsyslog
systemctl stop rsyslog
systemctl restart rsyslog
systemctl enable rsyslog

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

logger test message

Открыть файрвол следует следующими командами

firewall-cmd --add-port=514/udp --permanent
firewall-cmd --reload

logrotate
Далее следует позаботиться о перезаписи лог-файлов. Иначе рано или поздно логи заполнят все доступное дисковое пространство. Для этого следует донастроить скрипт logrotate. По умолчанию он запускается через /etc/cron.daily . Чтобы его настроить необходимо либо отредактировать файл /etc/logrotate.conf либо добавить файл с произвольным именем в каталог /etc/logrotate.d/ . В моем случае конфигурация следующая

/var/log/remote/*.log
{
rotate 10
missingok
notifempty
compress
size 10M
daily
create 0644 root root
postrotate
systemctl restart rsyslog > /dev/null
endscript
}

multicast test msend mreceive

Столкнулся с задачей — протестировать канал на предмет прохождения multicast трафика. Нашел утилиту созданную специально для этих целей.
Установка примитивная. Скачиваем с git файлик — распаковываем в папку. Заходим в это папку. Далее

make
make install

И все — в линуксе появились команды msend и mreceive через которые можно отправть и принять мультикаст.

eve-ng-integration Linux desktop

Для полноценной работы с замечательным средством эмуляции сети eve-ng необходимо иметь несколько установленных программ и интегрировать их в браузер. Чтобы не делать этого вручную для линукса написан замечательный скрипт — который почти всю работу сделает сам. https://github.com/SmartFinn/eve-ng-integration.

Я использую centos 7 + gnome. Для установки eve-ng-integration подошел скрипт установщика + две команды.

wget -qO- https://raw.githubusercontent.com/SmartFinn/eve-ng-integration/master/install.sh | sh

usermod -a -G wireshark $USER

chmod +x /usr/sbin/dumpcap

Последний chmod не описан — но без него wireshark работать не захотел.

Дополнительно можно сделать ssh-copy-id до хоста с eve-ng от пользователя, под которым подразумевается работа с ним.

bash на все хосты в сети

У меня регулярно появляется необходимость сделать определенные действия (ввести команды, положить нужные файлики) на всех или большинстве хостов в сети (все хосты linux). Конечно для решения таких задач существуют монстры типа ansible — но ради двух, трех команд «городить огород» не хочется. Куда проще воспользоваться командой sshpass в цикле по всем компам. Для этого я использую следующую конструкцию (выкладываю для себя, чтобы было откуда списать в следующий раз).

В примере я раскидываю на все машины файлик правил udev и выполняю ряд команд которые описаны в файле command.txt

# ll /root/temp/
-rwxr-xr-x 1 root root 79 апр 26 11:28 99-udisks2.rules
-rwxr-xr-x 1 root root 447 апр 26 11:35 all_uvd.sh
-rw-r--r-- 1 root root 173 апр 26 11:39 command.txt

# cat all_uvd.sh
!/bin/bash
for var in uvd14 uvd15 uvd16 uvd17 uvd18 uvd19 uvd20 uvd21 uvd22 uvd23
do
echo The $var item
scp /root/temp/99-udisks2.rules $var:/etc/udev/rules.d/99-udisks2.rules
cat /root/temp/command.txt | sshpass -p '***' ssh root@$var
done

# cat command.txt
yum -y install udiskie exfat-utils fuse-exfat ntfs-3g
systremctl enable udisks2
udevadm control --reload-rules
reboot

apcupsd

Установка apcupsd тривиальна.

yum -y install apcupsd

Включить, выключить, добавить в автозагрузку

systemctl start apcupsd
systemctl stop apcupsd
systemctl enable apcupsd

Конфиг. В случае подключения по usb — можно оставить по умолчанию. Логи

vi /etc/apcupsd/apcupsd.conf

tail -f /etc/apcupsd/apcupsd.events

В результате появилась служба которая поддерживает связь с ИБП и команда

apcaccess status

linux запись cd/dvd дисков

Говорят что диски свое отжили, но в большинстве рабочих компьютеров dvd-rom по прежнему есть. Иногда возникают ситуации, когда воспользоваться им — наиболее удобное решение.

Для того чтобы записать в centos 7 произвольные файлы на диск нужно сформировать iso

mkisofs -joliet-long -r -o /home/pakege/temp/hpz420.iso /home/pakege/distrs/Z420

и прожечь болванку

cdrecord -v speed=0 dev=ATAPI:0,0,0 /home/pakege/temp/hpz420.iso

чтобы узнать адрес DVD-RW нужен вывод команды

cdrecord -scanbus dev=ATAPI
Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling
'@(#)scsitransp.c 1.91 04/06/17 Copyright 1988,1995,2000-2004 J. Schilling').scsibus0:
0,0,0 0) '_NEC ' 'DVD_RW ND-3550A ' '1.05' Removable CD-ROM

0,1,0 1) *
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

Если нужных команд в дистрибутиве нет — необходимо установить пакет wodim

yum install wodim


LVM pvmove

Сначала в компьютере был один HDD на 1Tb. На нем был установлен centos 7.5 с автоматической разбивкой диска. Т.е. использовался LVM который в centos опция по умолчанию. под root раздел автомат выделяет 50Гб — остальное — boot, swap, home.

Потом появился ssd но маленький — всего на 60Gb. поскольку оперативы много и заботится о производительности свапа смысла нет, было решено перенести на ssd только root раздел.

LVM позволяет сделать это всего несколькими командами.

Раздел на новом диске я создал с помощью gparted.

[root@adminhp ~]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0 931,5G  0 disk
├─sda1            8:1    0   200M  0 part /boot/efi
├─sda2            8:2    0     1G  0 part /boot
└─sda3            8:3    0 930,3G  0 part
 ├─centos-root 253:0    0    50G  0 lvm  /
 ├─centos-swap 253:1    0   7,6G  0 lvm [SWAP]
 └─centos-home 253:2    0 872,7G  0 lvm /home
sdb               8:16   0 55,9G  0 disk
└─sdb1            8:17   0 47,9G  0 part

далее нужно создать Physical volume

pvcreate /dev/sdb1

далее расширить Volume group centos на новый PV

vgextend centos /dev/sdb1

после чего можно запускать сам перенос раздела

pvmove -n root /dev/sda3 /dev/sdb1

 

 

centos 7 syslog-ng

Часто возникает необходимость организовать сбор логов по сети. Для этого прекрасно подходят линукс пакеты rsyslog или syslog-ng. Т.к. я использую последний — про него и расскажу. Все это происходит в centos 7.6

установка тривиальная

yum install -y syslog-ng

главный конфиг. еще можно докладывать свои отдельные конфиги в ./conf.d

/etc/syslog-ng/syslog-ng.conf

Чтобы собрать логи по сети нужно определить в конфиге

источник
source s_udp { udp (ip ("0.0.0.0") port (514)); };

затем создать файл лога

mkdir /var/log/remote
touch /var/log/remote/diamond.log

и определить в конфиге

destination — назначение, ранее созданный лог файл
filter — фильтр входящего потока. обычно ip адрес
log — определяет откуда брать логи, чем фильтровать и куда записывать результат.

destination d_diamond { file("/var/log/remote/diamond.log"); };
filter f_diamond { netmask("192.9.200.71/255.255.255.255"); };
log { source(s_udp); filter(f_diamond); destination(d_diamond); };

 

KVM manual cloning vm

Появилась необходимость склонировать вм и запустить ее на соседнем гипервизоре. Есть несколько вариантов это сделать, я буду использовать ручной. вм источник — uvd1. склонировать нужно в uvd2.

virsh shutdown uvd1

cp /home/vm/{uvd1,uvd2}.qcow2

virsh dumpxml uvd1 > /tmp/uvd2-template.xml

sed -i /uuid/d /tmp/uvd2-template.xml
sed -i '/mac address/d' /tmp/uvd2-template.xml
sed -i s/uvd1/uvd2/ /tmp/uvd2-template.xml

srv1
virsh define /tmp/uvd2-template.xml

так как запустить ее надо на соседнем гипервизоре - копирую ее
scp ./uvd2.qcow2 192.9.30.202://home/vm/
scp /tmp/uvd2-template.xml 192.9.30.202:/root/


после чего запускаю на 
srv2
virsh define /root/uvd2-template.xml