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
}

cisco netflow

Иногда хочется посмотреть подробности о трафике на интерфейсе циски, которая не подключена к системе мониторинга. Кто грузит интерфейс, что качается? Для этого на физическом интерфейсе можно включить netflow.

int fastEthernet 0/0
ip flow ingress
ip flow egress

теперь доступна команда

c2811-VSHT#sh ip cache flow 
IP packet size distribution (261141 total packets):
1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
.000 .329 .059 .012 .010 .009 .127 .003 .004 .005 .005 .002 .002 .001 .002
512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
.001 .001 .004 .013 .404 .000 .000 .000 .000 .000 .000
IP Flow Switching Cache, 278544 bytes
306 active, 3790 inactive, 9098 added
138815 ager polls, 0 flow alloc failures
Active flows timeout in 30 minutes
Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 34056 bytes
0 active, 1024 inactive, 0 added, 0 added to flow
0 alloc failures, 0 force free
1 chunk, 1 chunk added
last clearing of statistics never
Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)
-------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow
TCP-Telnet 3 0.0 1 40 0.0 0.0 15.4
TCP-FTP 1 0.0 1 40 0.0 0.0 15.4
TCP-WWW 1110 0.0 6 568 0.0 0.4 3.6
TCP-other 6212 0.0 29 832 0.0 3.1 9.4
UDP-NTP 16 0.0 1 76 0.0 0.0 15.3
UDP-other 1414 0.0 23 202 0.0 2.4 15.4
ICMP 22 0.0 1 136 0.0 0.3 15.5
IP-other 14 0.0 122 257 0.0 38.0 15.6
Total: 8792 0.0 25 726 0.0 2.7 9.7
SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
Vl110 109.236.109.184 Fa0/0* 34.243.180.165 06 9740 01BB 10
Fa0/0 213.180.204.179 Vl121 109.236.109.184 06 01BB C0F4 1
Fa0/0 91.213.144.122 Vl110 109.236.109.184 06 01BB 0616 20
Fa0/0 79.134.192.226 Local 109.236.109.184 11 D69A 0B0F 5333
Fa0/0 88.221.73.2 Vl110 109.236.109.184 06 01BB 0418 1
Fa0/0 64.233.164.188 Vl121 109.236.109.184 06 146C C2CA 1
Fa0/0 172.217.22.174 Vl121 109.236.109.184 06 01BB 9A5E 1
Vl110 109.236.109.184 Fa0/0* 216.58.211.140 11 E9D8 01BB 5

можно делать выборки sh ip cache flow | i Vl110

Если нужно посмотреть кто создает максимальный трафик нужно

ip flow-top-talkers
top 10
sort-by bytes
cache-timeout 100

Теперь работает команда sh ip flow top-talkers

c2811-VSHT#sh ip flow top-talkers 
SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Bytes
Vl110 109.236.109.184 Fa0/0* 79.134.192.226 11 0B0F D69A 3451K
Vl110 109.236.109.184 Fa0/0* 134.119.220.101 06 C005 01BB 2444K
Fa0/0 79.134.192.226 Local 109.236.109.184 11 D69A 0B0F 804K
Vl110 109.236.109.184 Fa0/0* 37.252.255.202 06 E35B 1732 345K
Fa0/0 134.119.220.101 Vl110 109.236.109.184 06 01BB C005 214K
Fa0/0 37.252.255.202 Vl110 109.236.109.184 06 1732 E35B 123K
Fa0/0 178.170.229.129 Local 109.236.109.184 11 7C2B 1194 60K
Vl121 109.236.109.184 Fa0/0* 81.88.86.38 11 A17D EA60 38K
Vl121 109.236.109.184 Fa0/0* 81.88.86.38 11 54A5 EA60 34K
Vl121 109.236.109.184 Fa0/0* 81.88.86.38 11 2AF9 EA60 31K
10 of 10 top talkers shown. 167 flows processed.

Перестал работать cron в Solaris 10

Не в первый раз сталкиваюсь с проблемой — перестал работать крон в Solaris 10. Первым делом необходимо проверить состояние службы — у меня все решалось поднятием службы.

sun4:root$ svcs -p svc:/system/cron
STATE STIME FMRI
disabled сент svc:/system/cron:default

Видим что служба disable. Поднимаем

sun4:root$ svcadm enable svc:/system/cron:default

и снова проверяем состояние

sun4:root$ svcs -p svc:/system/cron
STATE STIME FMRI
online 8:21:51 svc:/system/cron:default
8:21:51 16067 cron

пронаблюдать за работой можно по логам крона

sun4:root$ tail -f /var/cron/log

Больше информации на тему по ссылке

multicast test msend mreceive

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

make
make install

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

cisco ssh

как включить доступ на Cisco через SSH

1. задать имя хоста и домена

hostname имя_хоста 
ip domain-name доменное_им

2. сгенерировать ключ

crypto key generate rsa 
How many bits in the modulus [512]: 1024

3. настроить параметы ssh:

ip ssh version 2 
ip ssh authentication-retries 3
ip ssh time-out 30

4. настроить виртуальные терминалы на работу с ssh

line vty 0 4  
transport input ssh
privilege level 15
login local
line vty 5 15
transport input ssh

mi band 2 factory default

Умер смартфон, к которому был привязан mi band 2. Купил новый, установил mi fit, авторизовался (данные mi аккаунта были записаны в облако). Был уверен что этого достаточно чтобы браслет подключился к новому смартфону но увы… этого не произошло. В результате оказалось что единственный способ подключить браслет к новому смарту — сбросить его к заводским настройкам. Вот тут нашел способ как это сделать. Чтобы в следующий раз не искать запишу у себя.

Итак. Во-первых для сброса браслета нужна вот эта программа. Существует версия только для андроида. Прога на китайском, но частично переведена. Когда программа установлена необходимо вручную подключить браслет по блютусу. запустить программу. Она обнаружит браслет. Нужно ткнуть в строчку с его маком и на следующем экране нажать кнопку «ВОССТАНОВИТЬ ЗАВОДСКИЕ НАСТРОЙКИ». Все происходит очень быстро. Так-же программа умеет диагностировать все функции браслета, но это уже не так важно.

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