Доступ к данным на диске гостевой виртуальной машины

Предположим ситуацию когда имеется сервер под управлением Linux на котором установлен KVM и запущены виртуальные машины с Linux. С точки зрения производительности и удобства диски виртуальных машин нужно размещать в разделах LVM. Один LV = один диск для виртуальной машины. Однако когда потребуется достать данные с такого диска, а там установлен Linux с использованием LVM то окажется что LVM сервера не видит LVM расположенный внутри диска.

Для этого потребуется утилита kpartx которая подключит диск виртуальной машины после чего он станет виден ядру, lvm и fdisk.
Continue reading Доступ к данным на диске гостевой виртуальной машины

Отладка logrotate

logrotate запускается по крону один раз в сутки.

/etc/cron.daily/logrotate

Для отладки logrotate предусмотрен ключ -t который пишет операции которые должен сделать но из-за ключа отладки не делает в реальности:

/usr/sbin/logrotate -d /etc/logrotate.conf

Во время отладки конфигурационных файлов logrotate на боевом сервере такую команду можно запускать без опасений, что другие log-файлы будут прокручены слишком много раз и потеряется важная информация которая может ещё пригодиться для поиска проблем.

logrotate --help
Usage: logrotate [OPTION...] <configfile>
  -d, --debug               Don't do anything, just test (implies -v)
  -s, --state=statefile     Path of state file
  -v, --verbose             Display messages during rotation

Ключом -v можно пользоваться в команднике /etc/cron.daily/logrotate чтобы во время работы отладочная информация записывалась в файл:

logrotate -v /etc/logrotate.conf 2>&1 | sudo tee -a /var/log/logrotate.log

Для чего нужно поправить файл /etc/cron.daily/logrotate
Возможно для создания файла вам потребуется добавить исключение SELinux для нового log-файла /var/log/logrotate.log.
Continue reading Отладка logrotate

smartctl и новые диски

Когда в сервер устанавливаются новые диски, часто можно заметить что описания некоторых параметров S.M.A.R.T. регистров не соответствуют действительности либо вообще отствуют. Например так было после установки SSD Intel DC S3500 на сервер с “CentOS release 6.6 (Final)“:

170 Unknown_Attribute       0x0033   100   100   010    Pre-fail  Always       -       0
171 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
172 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
174 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       1

Continue reading smartctl и новые диски

Время начала и окончания действия сертификата

Как узнать время начала действия и окончания (истечения) сертификата?

echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates | cut -d '=' -f2- | xargs -I{} date --date="{}" '+%F %T'

Для того чтобы после взаимодействия с сервером в пакетном режиме openssl завершился необходимо передать ему перевод строки. Иногда можно встретить, что ему передают файл перенаправлением из /dev/null. Оба варианта работают одинаково.
Второй вызов openssl работает уже с полученным через pipe сертификатом и достаёт из него дату начала его дествия и дату окончания действия. Затем командой cut из сертификата извлекается только дата, и наконец дата передаётся в качестве параметра команде date которая из него может сформировать дату в различных форматах.
Continue reading Время начала и окончания действия сертификата

Разбираемся с томами Bacula/Bareos

Много лет подряд схема именования томов в Bacula/Bareos приводила меня в полное недоумение. Я не мог понять почему свежеустановленная система резервного копирования создаёт тома в строгом соответствии с настройками прописанными в секция pool, а через какое-то время “слетает с катушек” и начинает записывать данные в старые файлы. Оказалось причина в в том, что Bacula изначально была заточена под ленточные накопители. Агалогично она поступает и с дисками: тома на дисках воспринимаются как ленты. Следствие этой особенности в том, что если Bacula создала том (файл на жёстком диске) то она НИКОГДА не удаляет его с диска. У каждого пула и задания есть параметр Volume Retention который задаёт время по истечении которого файлы попавшие в этот том бакула считает удалёнными. Если установлена опция AutoPrune = yes то bacula удалит записи из каталога (SQL). А если установлена опция ActionOnPurge = Truncate то урежет размер файла до нуля.
Continue reading Разбираемся с томами Bacula/Bareos

Где найти полный инсталлятор skype для windows

Тенденция последнего времени заключается в получении контроля над пользовательскими устройствами. Казалось бы сделано это для удобства пользователей. Зачем пытаться разобраться с секцией download где может находиться куча версий программы. Пользователь видит скачиваемую программу совсем небольшого размера. Запускает её, а она скрытно стягивает много-мегабайтный инсталятор и установливает его на компьютер пользователя не забыв при этом наставить кучу сервисов которые позволят в фоновом режиме соединяться с серверами производителя и передавать туда какие-то данные и принимать и устанавливать какие-то обновления. Так поступают многие. В их числе Adobe со своим Flash player. Так поступает Mozilla со своим Firefox и Thunderbird, хотя на их сайте ещё можно найти ссылку на полный инсталятор в языковом разделе. И MS тут не отстаёт от других производителей софта. На их сайте очень сложно найти ссылку на полный инсталятор skype. Зато можно писать статьи типа этой объясняя немногочисленной аудитории где взять то, что раньше было в разделе Download.
Continue reading Где найти полный инсталлятор skype для windows

Отключение APM в дисках подключённых через RAID контроллер

Некоторые жёсткие диски, не только ноутбучные 2.5″ но и например 3.5″ вполне серверные модели WDC WD2002FYPS-02W3B0, имеют отвратительную особенность парковать головы. Для ноутбучных дисков это вероятно оправдано и сделано чтобы исключить повреждение дисков при возможных ударах ноутбука, компьютер то мобильный. А вот для 3.5″ дисков это сделано вроде бы как для экономии электрической энергии. Но ресурс механизма парковок ограничен и через некоторое время это приводит к его износу и поломке диска. Чтобы предотвратить износ механизма принудительной парковкой головок нужно отключить APM диска.
Отключить APM в дисках можно с помощью утилиты hdparm.

hdparm -B 255 /dev/sda

Однако она не работает если диск подключён в RAID контроллер. В этом случае RAID контроллер отдаёт в систему блочное устройство без уточнения из каких дисков оно собрано. Тоесть система обращаясь к блочному устройству представленному RAID контроллером не обращается конкретно к какому-то диску. Поэтому функционал физического доступа к порту диска через имя блочного устройства ограничен.
Continue reading Отключение APM в дисках подключённых через RAID контроллер

Запись терминальной сессии

Для записи терминальной сессии можно использовать обычный подход, записывать видео. Однако в этом есть два неудобства: во-первых видео занимает много места, во-вторых из видео нельзя сделать copy&paste текстовой информации.

Оба эти недостатка отсутствуют в программе asciinema. Её файлы маленькие и поддерживается copy&paste.

Галерею работ можно посмотреть на https://asciinema.org/.
И сразу можно сделать копию для себя так как исходный код прилагается.
Исходный код плеера
Исходный код для сайта

А с помощью другой утилиты можно устроить живую демонстрацию своей консоли.

Трансляция окна своей консоли как WEB приложения

GoTTY позволяет устроить демонстрацию окна своей консоли как web приложения.

Для эмуляции терминала на JavaScript в интернет браузерах Gotty использует hterm. Gotty имеет свой websocket сервер перебрасывает PTY веб-клиентам и принимает ввод от клиентов и перебрасывает его на PTY. Идея hterm + websocket была навеяна Wetty.

Для каждого клиента подсоединяющегося к websocket GoTTY порождает новый процесс и это значит, что напрямую нельзя расшаривать терминал многим клиентам. Однако можно использовать мультиплексор терминала tmux. Но в этом случае клиенты будут находиться в режиме viewonly без передачи нажатий клавиатуры в терминал, а тот кто будет подключён локально сможет управлять терминалом.

Распространяется под лицензией MIT.
Исходники на https://github.com/yudai/gotty

Также имеется и утилита которая позволяет сделать легковесные файлы с записью работы в терминальной сессии и воспроизводить их в браузере.

Получение списка NS серверов для домена

Однострочный скрипт для получения списка ns сероверов домена.

DOMAIN="youngblog.hoster-ok.com"; TLD="${DOMAIN##*.}"; FLD="${DOMAIN%.*}"; FLD="${FLD##*.}"; echo -e "TLD:${TLD}\nFLD:${FLD}"; ROOTNS=`dig +short NS ${TLD}. | head -n 1 | sed -e 's/\.$//g'`; dig +authority +noadditional +nocomments +nostats +nocmd ${FLD}.${TLD}. @${ROOTNS} | sed -e 's/[;#%].*//g;s/^[ \t]*//g;s/[ \t]*$//g;/^$/d'
TLD:com
FLD:hoster-ok
hoster-ok.com.          172800  IN      NS      ns1.vds-ok.com.
hoster-ok.com.          172800  IN      NS      ns2.vds-ok.com.
hoster-ok.com.          172800  IN      NS      ns1.hoster-ok.com.

Принцип следующий:
Первая команда  dig +short NS ${TLD}.  (обратите внимание на точку на конце) получает корневые NS сервера которые обслуживают конкретный TLD (Top Level Domain) например .com .net .org .ru и т.д., а вторая команда  dig +authority +noadditional +nocomments +nostats +nocmd ${FLD}.${TLD}. @${ROOTNS}  получает из определённого NS @${ROOTNS} информацию по домену ${FLD}.${TLD}. (снова обратите внимание на точку на конце) информация, которую нужно включить или подавить, перечислена ключами.

Примечание!В целях балансировки нагрузки первая команда выдаёт список серверов в произвольном порядке для того чтобы те кто выбирает постоянно одну и ту же строку каждый раз получали другой сервер.