Rose debug info
---------------

Exchange, esx, AD, GPO, veeam, adaptec,lsi megaraid

Позднее Ctrl + ↑

Заметки по оконному менеджеру tmux

tmux

— это менеджер терминалов, к которому удобно подключаться и отключаться, не теряя при этом процессы и историю. Как

screen

, только лучше (в первую очередь потому, что использует модель клиент—сервер).

image

Очень хороший способ запустить tmux:

tmux attach || tmux new

 — делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый.

После этого вы попадаете в полноценную консоль.
Ctrl+b d — отключиться. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)

В одной сессии может быть сколько угодно окошек:
Ctrl+b c — создать окошко;
Ctrl+b 0...9 — перейти в такое-то окошко;
Ctrl+b p — перейти в предыдущее окошко;
Ctrl+b n — перейти в следующее окошко;
Ctrl+b l — перейти в предыдущее активное окошко (из которого вы переключились в текущее);
Ctrl+b & — закрыть окошко (а можно просто набрать

exit

в терминале).

В одном окошке может быть много панелей:
Ctrl+b % — разделить текущую панель на две, по вертикали;
Ctrl+b « — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2);
Ctrl+b →←↑↓ — переходить между панелями;
Ctrl+b x — закрыть панель (а можно просто набрать

exit

в терминале).

Недостаток — непривычным становится скроллинг:
Ctrl+b PgUp — вход в «режим копирования», после чего:
PgUp, PgDown — скроллинг;
q — выход из «режима копирования».

 41   2021   linux   tmux   ubuntu

Принудительное обновление адресной книги Exchange 2010 2013

Открываем EMS (Exchange Management Shell) и вводим вот такую строку.

Get-OfflineAddressbook | Update-OfflineAddressbook

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

net stop MSExchangeSA & net start MSExchangeSA

Потом на клиентской машине в Outlook 2013 нажимаем на ленте Отправка и получение > Группы отправки и получения > Загрузить адресную книгу

 

 261   2021   exchange   outlook

Cisco мониторинг ssh и настройка времени и логов

ntp update-calendar
ntp server 64.90.182.55

Router(config)#clock timezone MSK 4
Router(config)#clock calendar-valid
Router#show clock
11:17:44.500 MSK Tue Feb 26 2013

 

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

service timestamps log datetime localtime

Ну и заодно в режиме отладки

service timestamps debug datetime localtime

Защита ssh от перебора

login block-for 60 attempts 3 within 20 # устанавливает задержку в 60 секунд, если было 3 попытки входа в течение 20 секунд
login delay 5 # задержка в 5 секунд между попытками входа
login on-failure log
login on-success log
 126   2021   cisco

Пулы для postgresql

Подключатся нужно к порту 6432 (Он, кстати, стал стандартом...).
Вобщем у меня всё заработало.

Для просмотра диагностики pgBouncer`a

sudo psql -p 6432 pgbouncer -U postgres

Список команд — тут.

Для затравки:
show help;
show pools;
show clients;

 41   2021   postgre   postgresql

IBM DS Storage не распознает диски

Часто приходится встречать на форумах, посвященных системам хранения от IBM, жалобы пользователей, столкнувшихся с проблемой: «вставляю диск в систему, а она его не видит. что делать??!!». На вопрос «откуда взяли диски», обычно, следует ответ «на ebay купили...». Оно и понятно — стандартная гарантия IBM на популярные модели DS4800, DS4700  в большинстве своем, давно закончилась, сервисную поддержку далеко не все продлевают, вот и выкручиваются люди, как могут.

Итак. Купили диск (на ebay), вставили в систему, но диск не идентифицируется. Или проще — вытащили из одной своей системы заведомо исправный диск, вставили в другую...  а диск не распознается. Кто виноват и что делать?

Для начала, немножко ликбеза.

Обычно, когда в систему вставляется новый, чистый диск, IBM’овские СХД инициализируют его, записывая в начало  диска служебную область размером 512 Мб, которая называется DACstore. Там хранится различная информация о конфигурации системы хранения: конфигурация логических  дисков, MEL логи, информация о подключенных хостах и т. п. Подробнее о DACstore можно почитать тут. Если диск ранее использовался в другой системе DS System Storage, то существующий DACstore будет перезаписан. И вот тут есть ньюанс. Начиная с версии микрокода 7.10, формат DACstore поменялся. Поэтому, если на системе более старая версия прошивки версии 7.xx и любая версия прошивки 6.хх (даже та, которая вышла позже 7.10), СХД просто не сможет инициализировать диск. Это и есть ситуация «не видит диск». Такие б/у диски, хоть и с фирменной лейбой IBM, но не очищеные должным образом предыдущими владельцами — не редкость даже на складах системных интеграторов. Что уж говорить про диски «с ebay».

«Лечение» в данной ситуации следующее:

  1. Подключаемся к системе хранения нуль-модемным кабелем
  1. Запускаем эмулятор терминала.
  1. Посылаем Ctrl+Break. Следуем инструкциям на экране — либо предложат согласовать  baud rate (нажимаем пробел), либо нажать <S> для входа в Service Mode, в этом случае жмем ESC и получаем приглашение на ввод пароля. Пароль для микрокода версии 6.хх:  infiniti
  1. Проверяем, что диск вообще распознался контроллером, вводим следующую команду:


-&gt; luall
.......Logical Unit........: &nbsp; &nbsp;:Channels.:Que ............IOs...........
Devnum Location Role &nbsp; :ORP : 0 1 2 3 :Dep &nbsp;Qd &nbsp;Open &nbsp;Completed &nbsp;Errs
---------- -------- ------ :--- : - - - - :--- --- ----- ---------- -----
00000010 &nbsp;t0 &nbsp; &nbsp; &nbsp; &nbsp;Encl :++ &nbsp;: A &nbsp; B &nbsp; : &nbsp;1 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;148 &nbsp; &nbsp; 6
00100001 &nbsp;t0,s1 &nbsp; &nbsp; FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;178 &nbsp; &nbsp; 2
00100002 &nbsp;t0,s2 &nbsp; &nbsp; FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;176 &nbsp; &nbsp; 2
00100003 &nbsp;t0,s3 &nbsp; &nbsp; FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;177 &nbsp; &nbsp; 2
00100004 &nbsp;t0,s4 &nbsp; &nbsp; FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;179 &nbsp; &nbsp; 2
00100005 &nbsp;t0,s5 &nbsp; &nbsp; FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;177 &nbsp; &nbsp; 2
00100006 &nbsp;t0,s6 &nbsp; &nbsp; FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;298 &nbsp; &nbsp; 5
00100007 &nbsp;t0,s7 &nbsp; &nbsp; FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;470 &nbsp; &nbsp; 4
00100008 &nbsp;t0,s8 &nbsp; &nbsp; FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;473 &nbsp; &nbsp; 3
00100009 &nbsp;t0,s9 &nbsp; &nbsp; FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
0010000a &nbsp;t0,s10 &nbsp; &nbsp;FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
0010000b &nbsp;t0,s11 &nbsp; &nbsp;FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
0010000c &nbsp;t0,s12 &nbsp; &nbsp;FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
0010000d &nbsp;t0,s13 &nbsp; &nbsp;FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
0010000e &nbsp;t0,s14 &nbsp; &nbsp;FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
0010000f &nbsp;t0,s15 &nbsp; &nbsp;FCdr :+++ : * &nbsp; + &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 25 &nbsp; &nbsp; 1
00200000 &nbsp;t0,s16 &nbsp; &nbsp;FCdr :+++ : + &nbsp; * &nbsp; : 16 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;571 &nbsp; &nbsp; 7
00e00011 &nbsp; c,this &nbsp; &nbsp; Bm :++ &nbsp;: + * + + : 32 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; 0
00f00011 &nbsp; c,alt &nbsp; &nbsp; &nbsp;Am :++ &nbsp;: + * + + : 32 &nbsp; 0 &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; 3532 &nbsp; &nbsp; 1


Подробно объяснять вывод данной команды не буду, обратите внимания лишь на вторую колонку: это номер корзины расширения (ID на LED индикаторе на ESM, сзади полки)+номер диска. К примеру t0,s16 — 16-й диск на полке с ID 0. Очистка dacStore выполняется командой isp cfgWipe1,0x<DEVNUM> для версии микрокода 6.хх, в нашем случае:

isp cfgWipe1,0x00200000

После этого диск вытаскивается и через 30 секунд вставляется обратно.

Если вам нужно очистить DACstore на системе хранения с микрокодом 7.хх (например перед продажей на ebay ;) ), вам нужно проделать похожие операции, однако обратите внимание, что эта версия при подключении через консольный порт просит не только пароль, а и логин. Стандартные комбинации:

shellUsr

wy3oo&w4

shellUsr

infiniti

shellUsr

y2llojp

Команда для очистки для версии 7.хх

isp dsmWipe 0xdevnum, 0

Обратите внимание — если последним параметром указать 1, то DACstore будет перезаписан сразу после очистки. В нашем случае — мы указываем 0, поэтому DACstore будет записан только после извлечения и повторной вставки диска в СХД (ну или при выполнении процедуры SOD, но это уже совсем другая история).

 213   2021   ds3400   ibm

IBM DS3400

Сброс цикла жизни батарей

Если батарейка в норме, то можно попробовать сделать так:

Please disable the caches using the following script commands:
set allLogicalDrives writeCacheEnabled=false; set allLogicalDrives mirrorCacheEnabled=false;

For each Logical Drive, the WCMir and WC can then be enabled again with the following script commands:
set logicalDrive [«logical_drive_name»] mirrorCacheEnabled=true; set logicalDrive [«logical_drive_name»] writeCacheEnabled=true;

 

 

 51   2021   ds3400   ibm

Ускорение домашнего ESXi 6.5 с помощью SSD кэширования

В данной статье хочу рассказать о том, как немного повысить производительность хоста ESXi с помощью SSD кэширования. На работе и дома я использую продукты от компании VMware, домашняя лаборатория построена на базе Free ESXi 6.5. На хосте запущены виртуальные машины как для домашней инфраструктуры, так и для тестирования некоторых рабочих проектов (как-то мне пришлось запустить на нем инфраструктуру VDI). Постепенно приложения толстых ВМ начали упираться в производительность дисковой системы, а на SDD все не помещалось. В качестве решения был выбран lvmcache. Логическая схема выглядит так:



Основой всей схемы является ВМ svm на базе CentOS 7. Ей презентованы HDD диски средствами RDM и небольшой диск VMDK с датастора SSD. Кэширование и зеркалирование данных реализуются программными средствами — mdadm и lvmcache. Дисковое пространство ВМ монтируется к хосту как NFS датастор. Часть датастора SSD отведена ВМ, которым требуется производительная дисковая подсистема.

Вычислительный узел собран на десктопном железе:

MB: Gygabyte GA-Z68MX-UD2H-B3 (rev. 1.0)
HDD: 2 x Seagate Barracuda 750Gb, 7200 rpm
SSH: OCZ Vertex 3 240Gb

На материнской плате имеется 2 RAID контроллера:

— Intel Z68 SATA Controller
— Marvell 88SE9172 SATA Controller

Завести 88SE9172 в ESXi у меня не получилось (There is a bug in the firmware of some Marvell adapters (at least 88SE91xx)), решил оставить оба контроллера в режиме ACHI.

RDM


Технология RDM (Raw Device Mapping) позволяет виртуальной машине обращаться напрямую к физическому накопителю. Связь обеспечивается через специальные файлы «mapping file» на отдельном томе VMFS. RDM использует два режима совместимости:

— Виртуальный режим — работает так же, как и в случае с файлом виртуального диска, позволяет использовать преимущества виртуального диска в VMFS (механизм блокировки файлов, мгновенные снэпшоты);
— Физический режим — предоставляет прямой доступ к устройству для приложений, которые требуют более низкого уровня управления.

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

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

Подключив дисковые накопители к ВМ средствами RDM, можно избавиться от прослойки VMFS, а в физическом режиме совместимости их состояние можно будет мониторить в ВМ (с помощью технологии S.M.A.R.T.). К тому же, если что-то случится с хостом, то получить доступ к ВМ можно, примонтировав HDD к рабочей системе.

lvmcache


lvmcache обеспечивает прозрачное кэширование данных медленных устройств HDD на быстрых устройствах SSD. LVM cache размещает наиболее часто используемые блоки на быстром устройстве. Включение и выключение кэширования можно производить, не прерывая работы.

При попытке чтения данных выясняется, имеются ли эти данные в кэше. Если требуемых данных там нет, то чтение происходит с HDD, и попутно данные записываются в кэш (cache miss). Дальнейшее чтение данных будет происходить из кэша (cache hit).

Запись


— Режим write-through — когда происходит операция записи, данные записываются и в кэш, и на HDD диск, более безопасный вариант, вероятность потери данных при аварии мала;
— Режим write-back — когда происходит операция записи, данные записываются сначала в кэш, после чего сбрасываются на диск, имеется вероятность потери данных при аварии. (Более быстрый вариант, т. к. сигнал о завершении операции записи передается управляющей ОС после получения данных кэшем).

Так выглядит сброс данных из кэша (write-back) на диски:


Настройка системы


На хосте создается SSD датастор. Я выбрал такую схему использования доступного пространства:

220Gb — DATASTORE_SSD
149Gb — Отведено для особых ВМ
61Gb — Том для кэша и метаданных
10Gb — Host Swap Cache

Виртуальная сеть выглядит следующим образом:

Создан новый vSwitch:

Networking → Virtual Switches → Add standart virtual switch — указываем желаемое имя виртуального свитча (svm_vSwitch, в названиях я использую префикс svm_), остальное оставляем как есть.

К нему через порт группу подключается VMkernel NIC:

Networking → VMkernel NICs → Add VMkernel NIC
— Port group — New Port group
— New port group — Имя порт группы — svm_PG
— Virtual switch — svm_vSwitch
— IPv4 settings — Configuration — Static — указываем IP и маску сети

Создана порт группа, к которой будет подключена ВМ svm:

Networking → Port Groups → Add port group — указываем имя (svm_Network) и свитч svm_vSwitch

Подготовка дисков


Необходимо зайти на хост по ssh и выполнить следующие команды:

Отобразить пути всех подключенных дисков:
	# ls -lh /vmfs/devices/disks/
lrwxrwxrwx    1 root     root          72 Feb 22 20:24 vml.01000000002020202020202020202020203956504257434845535433373530 -> t10.ATA_____ST3750525AS_________________________________________9*E
lrwxrwxrwx    1 root     root          72 Feb 22 20:24 vml.01000000002020202020202020202020203956504257434b46535433373530 -> t10.ATA_____ST3750525AS_________________________________________9*F

Перейти в директорию, где будут размещаться «mapping file»:
	# cd /vmfs/volumes/DATASTORE_SSD/

Создаем RDM в режиме виртуальной совместимости:
	# vmkfstools -r /vmfs/devices/disks/vml.01000000002020202020202020202020203956504257434845535433373530 9*E.vmdk
	# vmkfstools -r /vmfs/devices/disks/vml.01000000002020202020202020202020203956504257434b46535433373530 9*F.vmdk

 

Подготовка ВМ


Теперь эти диски можно подключить (Existing hard disk) к новой ВМ. Шаблон CentOS 7, 1vCPU, 1024Gb RAM, 2 RDM disk, 61Gb ssd disk, 2 vNIC (порт группы VM Network, svm_Network) — во время установки ОС используем Device Type — LVM, RAID Level — RAID1

Настройка NFS сервера довольно проста:

# yum install nfs-utils
# systemctl enable rpcbind
# systemctl enable nfs-server
# systemctl start rpcbind
# systemctl start nfs-server
# vi /etc/exports
	/data 10.0.0.1(rw,sync,no_root_squash,no_subtree_check)
# exportfs -ar
# firewall-cmd add-service=nfs permanent
# firewall-cmd add-service=rpc-bind permanent
# firewall-cmd add-service=mountd permanent
# firewall-cmd —reload

 

Подготавливаем тома кэша и метаданных для включения кэширования тома cl_svm/data:

Инициализация диска и расширение группы томов:
	# pvcreate /dev/sdc
	# vgextend cl_svm /dev/sdc
Создание тома с метаданными, в «man» написано, что этот том должен быть в 1000 раз меньше тома с кэшем:
	# lvcreate -L 60M -n meta cl_svm /dev/sdc
Создание тома с кэшем:
	# lvcreate -L 58,9G -n cache cl_svm /dev/sdc
Создание кэш-пула из томов:
	# lvconvert type cache-pool cachemode writethrough —poolmetadata cl_svm/meta cl_svm/cache
Связываем подготовленный кэш-пул с томом данных:
	# lvconvert type cache cachepool cl_svm/cache cl_svm/data 
Статистику можно посмотреть в выводе:
	# lvs -o cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses
CacheReadHits    CacheReadMisses  CacheWriteHits   CacheWriteMisses
            421076           282076           800554          1043571

 

Уведомления о изменении состояния массива:

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

MAILADDR alert@domain.ru
MAILFROM svm@domain.ru

Чтобы изменения вступили в силу, нужно перезапустить службу mdmonitor:

#systemctl restart mdmonitor

 

Почта с ВМ отправляется средствами ssmtp. Так как я использую RDM в режиме виртуальной совместимости, то проверять состояние дисков будет сам хост.

Подготовка хоста

Добавляем NFS датастор в ESXi:

Storage → Datastores → New Datastore → Mount NFS Datastore
Name: DATASTORE_NFS
NFS server: 10.0.0.2
NFS share: /data

Настройка автозапуска ВМ:

Host → Manage → System → Autostart → Edit Settings
Enabled — Yes
Start delay — 180sec
Stop delay — 120sec
Stop action — Shut down
Wait for heartbeat — No

Virtual Machines → svm → Autostart → Increase Priority
(Автозапуск не сработал, пришлось удалить ВМ из Inventory и добавить заново)

Данная политика позволит ВМ svm запуститься первой, гипервизор примонтирует NFS датастор, после этого будут включаться остальные машины. Выключение происходит в обратном порядке. Время задержки запуска ВМ подобрано по итогам краш-теста, т. к. при малом значении Start delay NFS датастор не успевал примонтироваться, и хост пытался запустить ВМ, которые еще недоступны. Также можно поиграться параметром

NFS.HeartbeatFrequency

.

Более гибко автостарт ВМ можно настроить с помощью командной строки:

Посмотреть параметры автозапуска для ВМ:
	# vim-cmd hostsvc/autostartmanager/get_autostartseq
Изменить значения автостарта для ВМ (синтаксис):
	# update_autostartentry VMId StartAction StartDelay StartOrder StopAction StopDelay WaitForHeartbeat
Пример:
	# vim-cmd hostsvc/autostartmanager/update_autostartentry 3 «powerOn» «120» «1» «guestShutdown» «60» «systemDefault»

 

Небольшая оптимизация

Включить Jumbo Frames на хосте:

Jumbo Frames: Networking → Virtual Switches → svm_vSwitch указать MTU 9000;
Networking → Vmkernel NICs → vmk1 указать MTU 9000

В Advanced Settings установить следующие значения:

NFS.HeartbeatFrequency = 12
NFS.HeartbeatTimeout = 5
NFS.HeartbeatMaxFailures = 10
Net.TcpipHeapSize = 32 (было 0)
Net.TcpipHeapMax = 512
NFS.MaxVolumes = 256
NFS.MaxQueueDepth = 64 (было 4294967295)

Включить Jumbo Frames на ВМ svm:

# ifconfig ens224 mtu 9000 up
# echo MTU=9000 >> /etc/sysconfig/network-scripts/ifcfg-ens224

 

 

Производительность


Производительность измерялась синтетическим тестом (для сравнения, я снял показания с кластера на работе (в ночное время)).

Используемое ПО на тестовой ВМ:

— ОС CentOS 7.3.1611 (8 vCPU, 12Gb vRAM, 100Gb vHDD)
— fio v2.2.8

Последовательность команд запуска теста:
	# dd if=/dev/zero of=/dev/sdb bs=2M oflag=direct
	# fio -readonly -name=rr -rw=randread -bs=4k -runtime=300 -iodepth=1 -filename=/dev/sdb -ioengine=libaio -direct=1
	# fio -readonly -name=rr -rw=randread -bs=4k -runtime=300 -iodepth=24 -filename=/dev/sdb -ioengine=libaio -direct=1
	# fio  -name=rw -rw=randwrite -bs=4k -runtime=300 -iodepth=1 -filename=/dev/sdb -ioengine=libaio -direct=1
	# fio -name=rw -rw=randwrite -bs=4k -runtime=300 -iodepth=24 -filename=/dev/sdb -ioengine=libaio -direct=1

 

Полученные результаты представлены в таблицах (* во время тестов отмечал среднюю загрузку ЦП на ВМ svm):

VMFS6 Datastore

Тип диска

FIO depth 1 (iops)

FIO depth 24 (iops)

randread

randwrite

randread

randwrite

HDD

77

99

169

100

SSD

5639

17039

40868

53670

 

NFS Datastore

SSD Cache

FIO depth 1 (iops)

FIO depth 24 (iops)

CPU/Ready* %

randread

randwrite

randread

randwrite

Off

103

97

279

102

2.7/0.15

On

1390

722

6474

576

15/0.1

 

Рабочий кластер

Тип диска

FIO depth 1 (iops)

FIO depth 24 (iops)

randread

randwrite

randread

randwrite

900Gb 10k (6D+2P)

122

1085

2114

1107

4Tb 7.2k (8D+2P)

68

489

1643

480

Результаты, которые можно потрогать руками, получились при одновременном запуске пяти ВМ с Windows 7 и офисным пакетом (MS Office 2013 Pro + Visio + Project) в автозагрузке. По мере нагревания кэша, ВМ грузились быстрее, при этом HDD практически не участвовал в загрузке. При каждом запуске отмечал время полной загрузки одной из пяти ВМ и полной загрузки всех ВМ.

Одновременный запуск пяти ВМ

Datastore

Первый запуск

Второй запуск

Третий запуск

Время загрузки первой ВМ

Время загрузки всех ВМ

Время загрузки первой ВМ

Время загрузки всех ВМ

Время загрузки первой ВМ

Время загрузки всех ВМ

1

HDD VMFS6

4мин. 8сек.

6мин. 28сек.

3мин. 56сек.

6мин. 23сек.

3мин. 40сек.

5мин. 50сек.

2

NFS (SSD Cache Off)

2мин. 20сек.

3мин. 2сек.

2мин. 34сек.

3мин. 2сек.

2мин. 34сек.

2мин. 57сек.

3

NFS (SSD Cache On)

2мин. 33сек.

2мин. 50сек.

1мин. 23сек.

1мин. 51сек.

1мин. 0сек.

1мин. 13сек.

Время загрузки одиночной ВМ составило:

— HDD VMFS6 - 50 секунд
— NFS с выключенным кэшем - 35 секунд
— NFS с включенным и нагретым кэшем - 26 секунд

В виде графика:


Краш-тест


 

Отключение питания


После включения и загрузки хоста ВМ svm загрузилась с проверкой ФС (данные остались в кэше), на хосте примонтировался NFS датастор, далее загрузились остальные ВМ, проблем и потери данных не наблюдалось.

Выход из строя HDD (имитация)


Решил отключить питание SATA диска. К сожалению, горячая замена не поддерживается, необходимо аварийно выключать хост. Сразу после отключения диска появляется информация в Events.

Неприятным моментом оказалось, что при потере диска гипервизор просит для ВМ svm ответить на вопрос — «You may be able to hot remove this virtual device from the virtual machine and continue after clicking Retry. Click Cancel to terminate this session» — машина находится в состоянии фриза.

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

Выход из строя SSD


Наиболее неприятная ситуация — выход ssd из строя. Доступ к данным осуществляется в аварийном режиме. При замене ssd необходимо повторить процедуру настройки системы.

Обслуживание (Замена диска)


Если с диском вот-вот случится беда (по результатам S.M.A.R.T.), для того чтобы заменить его на рабочий необходимо выполнить следующую процедуру (на ВМ svm):

Посмотреть общее состояние массива: 
	# cat /proc/mdstat 
или для каждого устройства: 
	# mdadm —detail /dev/md126 /dev/md126
Пометить разделы неисправными:
	# mdadm manage /dev/md127 fail /dev/sda1 
	# mdadm manage /dev/md126 fail /dev/sda2
Удалить сбойные разделы из массива:
	# mdadm manage /dev/md127 remove /dev/sda1
	# mdadm manage /dev/md126 remove /dev/sda2

 

В настройках ВМ нужно «оторвать» погибающий vHDD, затем заменить HDD на новый.
После чего подготовить RDM накопитель и добавить к ВМ svm:

Перечитать список устройств, где X — номер SCSI шины Virtual Device Node в настройках vHDD:
	# echo «- — -» > /sys/class/scsi_host/hostX/scan
С помощью sfdisk скопировать структуру разделов:
	# sfdisk -d /dev/sdb | sfdisk /dev/sdc
Добавить получившиеся разделы в массив, установить загрузчик и дождаться окончания синхронизации:
	# mdadm manage /dev/md127 add /dev/sdc1
	# mdadm manage /dev/md126 add /dev/sdc2
	# grub2-install /dev/sdc

 

 

Аварийный доступ к данным


Один из дисков подключается к рабочей станции, далее необходимо «собрать» RAID, отключить кэш и получить доступ к данным, примонтировав LVM том:

# mdadm assemble scan
# lvremove cl_svm/cache 
# lvchanange -ay /dev/cl_svm/data
# mount /dev/cl_svm/data /mnt/data

 

Также я пробовал загрузить систему непосредственно с диска, настроил сеть и на другом хосте подключил NFS датастор — ВМ доступны.

Резюме


В итоге, я использую lvmcache в режиме write-through и раздел для кэша размером 60Gb. Немного пожертвовав ресурсами CPU и RAM хоста — вместо 210Gb очень быстрого и 1.3Tb медленного дискового пространства я получил 680Gb быстрого и 158Gb очень быстрого, при этом появилась отказоустойчивость (но при неожиданном выходе из строя диска придется поучаствовать в процессе доступа к данным).

 84   2021   esxi   ssd

dongle sms storage is full

Если Asterisk сообщает, что хранилище SMS переполнено: dongle sms storage is full

чтобы очистить вме смски, введите в консоли команду dongle cmd dongle0 AT+CMGD=1,4

*CLI> dongle cmd dongle0 AT+CMGD=1,4
[dongle0] ’AT+CMGD=1,4’ Command queued for execute
*CLI>  [dongle0] Got Response for user’s command:’OK’
[Feb 12 00:05:50] NOTICE[70634]: at_response.c:1711 
at_response: [dongle0] Got Response for user’s command:’OK’
dongle cmd dongle0 AT+CMGD=1,4
 141   2021   asterisk

Asterisk логирование chanspy

[app-chanspy]
include => app-chanspy-custom
exten => 555,1,Macro(user-callerid,)
exten => 555,2,System(/usr/bin/echo «Номер: ${CALLERID(num)} Время вызова: ${STRFTIME(${EPOCH},,%H:%M:%S)} Доступ в ChanSpy» >> /var/log/chanspy.log )
exten => 555,3,Authenticate(0000)
exten => 555,4,System(/usr/bin/echo «Номер: ${CALLERID(num)} Время вызова: ${STRFTIME(${EPOCH},,%H:%M:%S)} Пароль набран верно» >> /var/log/chanspy.log )
exten => 555,5,Read(SPYNUM,agent-newlocation)
exten => 555,6,System(/usr/bin/echo «Номер: ${CALLERID(num)} Время вызова: ${STRFTIME(${EPOCH},,%H:%M:%S)} Выбран номер ${SPYNUM} » >> /var/log/chanspy.log )
exten => 555,7,ChanSpy(SIP/${SPYNUM},qv(-1))
exten => 555,8,Hangup

 

 58   2021   asterisk

Tempcontrol добавление своих датчиков DS18B20 бесплатно без регистрации и смс

Сайт tempcontrol.ru не пашет 2 месяц, всем насрать даже тех поддержка номер которой был вытащен из гугла сказала пишите на support@visteh.ru там этим генеральный директор занимается может быть он вам ответит.

я охерел от такого при цене этой дерьмо коробки в 15000р должна быть и поддержка нормальная а не эта шляпа. Вообщем всем кто потерял датчики или хочет добавить новые описываю способ бесплатного добавления чтоб не платить хитрожопым из tempcontrol

Вот такой процессор там

root [ ~ ]# cat /proc/cpuinfo
Processor : ARM926EJ-S rev 4 (v5l)
BogoMIPS : 133.01
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 4

Hardware : tc3250 board with the LPC3250 Microcontroller
Revision : 0000
Serial : 0000000000000000

Вот лог прогрузки dmesg

root [ ~ ]# dmesg
Linux version 2.6.39.2-g7fda40b (yakor@amd64) (gcc version 4.6.3 (Gentoo 4.6.3 p1.3, pie-0.5.1) ) #32 PREEMPT Wed Jun 20 14:11:15 MSK 2012
CPU: ARM926EJ-S [41069264] revision 4 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: tc3250 board with the LPC3250 Microcontroller
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 16384
free_area_init_node: node 0, pgdat c0294da4, node_mem_map c02a4000
  Normal zone: 128 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 16256 pages, LIFO batch:3
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: console=ttyS0,115200 ubi.mtd=3 ubi.mtd=5 ubi.mtd=6 root=ubi1:rootfs rootfstype=ubifs ethaddr=02:74:66:fa:99:40
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 62216k/62216k available, 3320k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 — 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 — 0xfffe0000   ( 896 kB)
    DMA     : 0xffc00000 — 0xffe00000   (   2 MB)
    vmalloc : 0xc4800000 — 0xf0000000   ( 696 MB)
    lowmem  : 0xc0000000 — 0xc4000000   (  64 MB)
    modules : 0xbf000000 — 0xc0000000   (  16 MB)
      .init : 0xc0008000 — 0xc0023000   ( 108 kB)
      .text : 0xc0023000 — 0xc027c000   (2404 kB)
      .data : 0xc027c000 — 0xc0295440   ( 102 kB)
Preemptable hierarchical RCU implementation.
        RCU-based detection of stalled CPUs is disabled.
        Verbose stalled-CPUs detection is disabled.
NR_IRQS:96
Console: colour dummy device 80x30
Calibrating delay loop... 133.01 BogoMIPS (lpj=665088)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
LPC32XX unique ID: 0005b6dd75701b6e591c8cb710831800
bio: create slab <bio-0> at 0
Switching to clocksource lpc32xx_clksrc
Switched to NOHz mode on CPU #0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
msgmni has been set to 121
io scheduler noop registered (default)
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x40090000 (irq = 9) is a 16550A
console [ttyS0] enabled
serial8250.0: ttyS1 at MMIO 0x40080000 (irq = 7) is a U6_16550A
serial8250.0: ttyS2 at MMIO 0x40088000 (irq = 8) is a 16550A
serial8250.0: ttyS3 at MMIO 0x40098000 (irq = 10) is a 16550A
lpc32xx_hsuart.0: ttyTX0 at MMIO 0x40014000 (irq = 26) is a lpc32xx_hsuart
lpc32xx_hsuart.0: ttyTX1 at MMIO 0x4001c000 (irq = 24) is a lpc32xx_hsuart
brd: module loaded
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: Bad block at 0x000000000000
nand_read_bbt: Bad block at 0x000006520000
nand_read_bbt: Bad block at 0x00000a260000
nand_read_bbt: Bad block at 0x00000ea80000
nand_read_bbt: Bad block at 0x00000f8c0000
Creating 7 MTD partitions on «lpc32xx-nand»:
0x000000000000-0x000000020000 : «boot»
0x000000020000-0x000000180000 : «uboot»
0x000000180000-0x000000580000 : «safe-kernel»
0x000000580000-0x000003780000 : «safe-rootfs»
0x000003780000-0x000003b80000 : «kernel»
0x000003b80000-0x000006d80000 : «rootfs»
0x000006d80000-0x000010000000 : «work»
UBI: attaching mtd3 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: max. sequence number:       2
UBI: attached mtd3 to ubi0
UBI: MTD device name:            «safe-rootfs»
UBI: MTD device size:            50 MiB
UBI: number of good PEBs:        400
UBI: number of bad PEBs:         0
UBI: number of corrupted PEBs:   0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 400
UBI: number of PEBs reserved for bad PEB handling: 4
UBI: max/mean erase counter: 1/0
UBI: image sequence number:  1424920104
UBI: background thread «ubi_bgt0d» started, PID 270
UBI: attaching mtd5 to ubi1
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: max. sequence number:       269
UBI: attached mtd5 to ubi1
UBI: MTD device name:            «rootfs»
UBI: MTD device size:            50 MiB
UBI: number of good PEBs:        399
UBI: number of bad PEBs:         1
UBI: number of corrupted PEBs:   0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 399
UBI: number of PEBs reserved for bad PEB handling: 3
UBI: max/mean erase counter: 3/0
UBI: image sequence number:  438166388
UBI: background thread «ubi_bgt1d» started, PID 273
UBI: attaching mtd6 to ubi2
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: max. sequence number:       88
UBI: attached mtd6 to ubi2
UBI: MTD device name:            «work»
UBI: MTD device size:            146 MiB
UBI: number of good PEBs:        1165
UBI: number of bad PEBs:         7
UBI: number of corrupted PEBs:   0
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     1
UBI: available PEBs:             0
UBI: total number of reserved PEBs: 1165
UBI: number of PEBs reserved for bad PEB handling: 11
UBI: max/mean erase counter: 2/1
UBI: image sequence number:  1323325530
UBI: background thread «ubi_bgt2d» started, PID 276
lpc_mii_bus: probed
eth0: using RMII interface
eth0: LPC mac at 0x31060000 irq 29
eth0: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=0:00, irq=-1)
rtc-lpc32xx rtc-lpc32xx: rtc core: registered rtc-lpc32xx as rtc0
PNX4008-WDT: PNX4008 Watchdog Timer: heartbeat 19 sec
cpuidle: using governor ladder
cpuidle: using governor menu
Registered led device: 1-wire_port2
Registered led device: 1-wire_port1
Registered led device: 1-wire_port4
Registered led device: 1-wire_port3
Registered led device: power
Registered led device: nand-io
TCP cubic registered
NET: Registered protocol family 17
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 1
rtc-lpc32xx rtc-lpc32xx: setting system clock to 1970-01-01 00:00:08 UTC (8)
UBIFS: recovery needed
UBIFS: recovery completed
UBIFS: mounted UBI device 1, volume 0, name «rootfs»
UBIFS: file system size:   49029120 bytes (47880 KiB, 46 MiB, 380 LEBs)
UBIFS: journal size:       6580224 bytes (6426 KiB, 6 MiB, 51 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root:  0 bytes (0 KiB)
VFS: Mounted root (ubifs filesystem) on device 0:10.
Freeing init memory: 108K
UBIFS: recovery needed
UBIFS: recovery completed
UBIFS: mounted UBI device 2, volume 0, name «work»
UBIFS: file system size:   140507136 bytes (137214 KiB, 133 MiB, 1089 LEBs)
UBIFS: journal size:       9033728 bytes (8822 KiB, 8 MiB, 71 LEBs)
UBIFS: media format:       w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root:  0 bytes (0 KiB)

 

Берете список датчиков из панели или из консоли

далее берем ардуино и пишем код который будет брать ваш новый датчик ds18b20 и изменять его id на тот что есть в вашей коробке и отправлять его коробке

/*
 *    Example-Code that emulates a DS18B20
 *
 *    Tested with:
 *    — https://github.com/PaulStoffregen/OneWire —> DS18x20-Example, atmega328@16MHz as Slave
 *    — DS9490R-Master, atmega328@16MHz and teensy3.2@96MHz as Slave
 */

#include «OneWireHub.h»
#include «DS18B20.h»  // Digital Thermometer, 12bit
#include <OneWire.h>
OneWire  ds(11);  // on pin 10 (a 4.7K resistor is necessary)

constexpr uint8_t pin_led       { 13 };
constexpr uint8_t pin_onewire   { 12 };
float celsius, fahrenheit;
auto hub    = OneWireHub(pin_onewire);

auto ds18b20 = DS18B20(0x28, 0xA0, 0x36, 0x14, 0x03, 0x00, 0x00); // DS18B20: 9-12bit, -55 —  +85 degC
//28A0361403000088
auto ds18s20 = DS18B20(0x10, 0x00, 0x00, 0xA2, 0x18, 0xDA, 0x00);                 // DS18S20: 9   bit, -55 —  +85 degC
auto ds1822  = DS18B20(0x22, 0x00, 0x00, 0x22, 0x18, 0xDA, 0x00);                 // DS1822:  9-12bit, -55 — +125 degC

bool blinking(void);

void setup()
{
    Serial.begin(9600);
    Serial.println(«OneWire-Hub DS18B20 Temperature-Sensor»);
    Serial.flush();

    pinMode(pin_led, OUTPUT);

    // Setup OneWire
    hub.attach(ds18b20);
   // hub.attach(ds18s20);
   // hub.attach(ds1822);


    ds18b20.setTemperature(int8_t(85));

};

void loop()
{
    // following function must be called periodically
    hub.poll();
    // this part is just for debugging (USE_SERIAL_DEBUG in OneWire.h must be enabled for output)
    if (hub.hasError()) hub.printError();




    // Blink triggers the state-change
    if (blinking())
    {

        // Set temp
        static float temperature = celsius;
        //temperature += 0.1;
        if (temperature > 30.0) temperature = 20.0;
        ds18b20.setTemperature(celsius);
        //ds18s20.setTemperature(temperature);
        //ds1822.setTemperature(temperature);
        Serial.println(celsius);

              //—————————————————————————
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  //byte addr[8];
  //28 FF 7 DD 61 15 1 C6
unsigned char addr[8] = {0x28, 0xFF, 0x07, 0xDD, 0x61, 0x15, 0x01, 0xC6};
  //float celsius, fahrenheit;
  

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  

  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    //Serial.print(data[i], HEX);
   // Serial.print(» «);
  }


  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // «count remain» gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 — data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let’s zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  //fahrenheit = celsius * 1.8 + 32.0;
  Serial.print(»  Temperature = «);
  Serial.print(celsius);
  Serial.print(» Celsius, «);
  //Serial.print(fahrenheit);
  //Serial.println(» Fahrenheit»);
//—————————————————————————
    }
}

bool blinking(void)
{
    constexpr  uint32_t interval    = 1000;          // interval at which to blink (milliseconds)
    static uint32_t nextMillis  = millis();     // will store next time LED will updated

    if (millis() > nextMillis)
    {
        nextMillis += interval;             // save the next time you blinked the LED
        static uint8_t ledState = LOW;      // ledState used to set the LED
        if (ledState == LOW)    ledState = HIGH;
        else                    ledState = LOW;
        digitalWrite(pin_led, ledState);
        return 1;
    }
    return 0;
}

Пин 12 это выход на разьем в коробку, пин 11 это дата пин вашего нового датчика ds18b20, так же не забываем подтягивать новый датчик резистором на 4,7ком на шину +5В

После этого заходим в консоль коробки и проверяем как она видит ваш датчик

root [ ~ ]# tempcontrol
Found sensors:
0: 28 A0 36 14 03 00 00 88
RomCode: 28A0361403000088 Port: 0 Order :0 Time: 1496909700 Temp: 335
RomCode: 28A0361403000088 Port: 0 Order :0 Time: 1496909702 Temp: 335
RomCode: 28A0361403000088 Port: 0 Order :0 Time: 1496909703 Temp: 340
RomCode: 28A0361403000088 Port: 0 Order :0 Time: 1496909704 Temp: 340
RomCode: 28A0361403000088 Port: 0 Order :0 Time: 1496909705 Temp: 335

 

 51   2021   linux   tempcontrol
Ранее Ctrl + ↓