Тест диска в Linux на наличие ошибок и битых секторов

Переключимся сразу на root пользователя:

sudo -i

Посмотрим список дисков:

fdisk -l
df -h

Посмотреть информацию и модель диска можно так:

hdparm -i /dev/sda

Если поддерживается SMART, установим утилиты и посмотрим статистику SMART:

apt-get install smartmontools
smartctl -a /dev/sda
smartctl -a /dev/sda|grep -i reallocated

Запуск SMART тестов и просмотр информации (smartctl -X для остановки длинного теста):

smartctl -H /dev/sda
smartctl --test=long /dev/sda
smartctl -l selftest /dev/sda

Теперь выполним проверку диска на битые сектора (-s отобразит информацию о сканировании, -v более подробный режим):

badblocks -sv /dev/sda1

Можно сохранить результат в файл:

badblocks -sv /dev/sda1 > ~/badblocks.list

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

umount /dev/sda1

Выполнить проверку используя e2fsck можно так:

e2fsck /dev/sda1

Расположение файлов логирования cPanel

Приведу ниже список путей расположения файлов логирования cPanel.

Логи в директории /var/cpanel/:
/var/cpanel/horde/log/ (Horde)
/var/cpanel/roundcube/log/ (RoundCube)
/var/cpanel/squirrelmail/ (SquirrelMail)
/var/cpanel/logs (разные логи cpanel)
/var/cpanel/accounting.log (создание, удаление аккаунтов и т.д.)
Per account bandwidth history (Cached) /var/cpanel/bandwidth.cache/{USERNAME}
Per account bandwidth history (Human Readable) /var/cpanel/bandwidth/{USERNAME}
/var/cpanel/updatelogs/updated.ДАТА.log (отчеты об обновлении)

Логи в директории /usr/local/cpanel/logs/:
/usr/local/cpanel/logs/access_log (логи доступа и действий пользователей)
/usr/local/cpanel/logs/cpbackup (резервное копирование)
/usr/local/cpanel/logs/cphulkd.log (защита cPHulk)
/usr/local/cpanel/logs/dnsadmin_log (dnsadmin)
/usr/local/cpanel/logs/error_log (Ошибки cPanel)
/usr/local/cpanel/logs/license_log (Лицензии)
/usr/local/cpanel/logs/build_locale_database_log
/usr/local/cpanel/logs/login_log (Ошибки входа)
/usr/local/cpanel/logs/panic_log (Ошибки)
/usr/local/cpanel/logs/tailwatch_log (Tailwatch)
/usr/local/cpanel/logs/updated_analysis/{TIMESTAMP}.log
/usr/local/cpanel/logs/cpdavd_error_log (WebDisk)
/usr/local/cpanel/3rdparty/mailmain/logs (Mailman)
/usr/local/cpanel/logs/queueprocd.log
/usr/local/cpanel/logs/setupdbmap_log
/usr/local/cpanel/logs/easy/apache/
/usr/local/cpanel/logs/splitlogs_log
/usr/local/cpanel/logs/stats_log
/usr/local/cpanel/logs/safeapcherestart_log

Логи в директории /var/log/:
/var/log/cpanel (логи установки cpanel)
/var/log/cpanel-install.log
/var/log/chkservd.log (статус сервисов)
/var/log/maillog (почтовые логи)
/var/log/messages (почтовые логи)
/var/log/exim_rejectlog
/var/log/exim_paniclog (почтовые логи с ошибками)
/var/log/exim_mainlog (почтовые логи о доставке и получении)
/var/log/slowqueries (лог медленных запросов MySQL, если они включены в my.cnf)
/var/log/easy-tomcat7/localhost-access_log
/var/log/easy-tomcat7/catalina.err
/var/log/easy-tomcat7/catalina.out

Логи в других директориях:
/usr/local/apache/domlogs/ДОМЕН
/usr/local/apache/logs/suphp_log (suPHP)
/usr/local/apache/logs/error_log (ошибки web сервера)
/usr/local/apache/domlogs/ftpxferlog (FTP)
/var/spool/exim/input/ (очередь входящей почты)
/var/lib/mysql/ИМЯ_СЕРВЕРА.err (Ошибки MySQL)

Решение ошибки «Unable to create channel of type ‘SIP’ (cause 20 — Subscriber absent)»

Заметил однажды при звонках в консоли Asterisk следующую ошибку:

dial_exec_full: Unable to create channel of type ‘SIP’ (cause 20 — Subscriber absent)

В контексте диалплана у меня выполняется звонок одновременно на два телефона:

exten => s,5,DIAL(SIP/204&SIP/203,19)

Иногда один из IP-телефонов выключен, в связи с чем и возникает эта ошибка, сообщающая что абонент отсутствует.
Для решения нужно просто включить IP-телефон.

Можно посмотреть информацию о SIP в консоли Asterisk:

asterisk -rvv
sip show peers
sip show peer НОМЕР
quit

Если вместо IP-адреса клиента отображается null, а expire равно -1, то SIP клиент не в сети:

Expire: -1
Addr->IP: (null)

Настройка Asterisk CDR и Asterisk CDR Viewer

CDR (Call Data Record), позволяет в MySQL базе данных вести статистику активности звонков.

На тесте настрою Asterisk CDR и Asterisk CDR Viewer в Ubuntu Server.
Предположим что Asterisk уже установлен.

Сначала установим необходимые компоненты:

sudo apt-get install mysql-server php5-mysql apache2 git
sudo service apache2 restart

Приступим к созданию базы данных в которую будут сохранятся записи о звонках.
Подключимся к MySQL:

mysql -u root -p

Создадим базу данных:

CREATE DATABASE asteriskcdrdb;

Создадим пользователя asteriskcdr:

GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO  asteriskcdr@localhost  IDENTIFIED BY 'ПАРОЛЬ';
flush privileges;

Переключимся на базу asteriskcdrdb:

use asteriskcdrdb;

И создадим таблицу:

CREATE TABLE cdr (
   calldate datetime NOT NULL default '0000-00-00 00:00:00',
   clid varchar(80) NOT NULL default '',
   src varchar(80) NOT NULL default '',
   dst varchar(80) NOT NULL default '',
   dcontext varchar(80) NOT NULL default '',
   channel varchar(80) NOT NULL default '',
   dstchannel varchar(80) NOT NULL default '',
   lastapp varchar(80) NOT NULL default '',
   lastdata varchar(80) NOT NULL default '',
   duration int(11) NOT NULL default '0',
   billsec int(11) NOT NULL default '0',
   disposition varchar(45) NOT NULL default '',
   amaflags int(11) NOT NULL default '0',
   accountcode varchar(20) NOT NULL default '',
   uniqueid varchar(32) NOT NULL default '',
   userfield varchar(255) NOT NULL default '',
   did varchar(50) NOT NULL default '',
   recordingfile varchar(255) NOT NULL default '',
   KEY `calldate` (`calldate`),
   KEY `dst` (`dst`),
   KEY `accountcode` (`accountcode`),
   KEY `uniqueid` (`uniqueid`)
);

На этом создание базы завершено, теперь перейдем к настройке конфигурационного файла /etc/asterisk/cdr_mysql.conf, стандартно все строки в нем закомментированы.
Раскомментируем и укажем параметры для подключения к mysql базе в секции [global]:

[global]
hostname=localhost
dbname=asteriskcdrdb
table=cdr
password=ПАРОЛЬ
user=asteriskcdr

В файле конфигурации модулей /etc/asterisk/modules.conf должен быть прописан на загрузку модуль cdr_mysql.so:

load => cdr_mysql.so

Вручную из консоли asterisk его можно загрузить так:

sudo asterisk -rvv
module load cdr_mysql.so
module show like cdr_mysql.so

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

mysql -u root -p
use asteriskcdrdb;
select * from cdr;

По сути теперь можно использовать данные из базы любым удобным способом, например дописать к какому нибудь биллингу скрипты статистики и графиков.
Мы же настроим готовый Asterisk CDR Viewer.
Скачаем файлы и переместим в директорию веб-сервера:

cd /tmp/
git clone https://github.com/g613/asterisk-cdr-viewer/
cd asterisk-cdr-viewer
tar -xzvf asterisk-cdr-viewer-latest.tgz
mv asterisk-cdr-viewer /var/www/asterisk-cdr-viewer
chown -R www-data:www-data /var/www/

Русскую версию можно найти тут https://github.com/prog-it/Asterisk-CDR-Viewer-Mod

Скопируем файл с веб-конфигурацией в директорию с веб-сервером apache2:

cp /var/www/asterisk-cdr-viewer/contrib/httpd/asterisk-cdr-viewer.conf /etc/apache2/conf-enabled/asterisk-cdr-viewer.conf
service apache2 restart

Укажем настройки подключения к базе данных для Asterisk-CDR-viewer в файле /var/www/asterisk-cdr-viewer/include/config.inc.php

После чего уже можно будет просматривать статистику открыв в браузере http://СЕРВЕР/acdr

В версии 1.0.9 заметил опечатку в коде, из-за которой отображался белый экран а в логах была ошибка:

PHP Parse error: syntax error, unexpected ‘[‘ in /var/www/asterisk-cdr-viewer/index.php on line 23

Для исправления откроем файл index.php и в конце 23 строки увидим пропущенный символ $:

$startmonth = is_blank($_REQUEST['startmonth']) ? date('m') : printf('%02d',_REQUEST['startmonth']);

Должно быть так:

$startmonth = is_blank($_REQUEST['startmonth']) ? date('m') : printf('%02d',$_REQUEST['startmonth']);

Все.

Настройка FSK в Asterisk для определения номеров

Чтобы определялся номер, с аналоговых линий, нужно в контексте для транка каждого канала Dahdi указать:

usecallerid = yes
hidecallerid=no
cidstart = ring
cidsignalling = bell
callerid = asreceived

asreceived — означает что номер нужно передавать в виде, в каком он есть.
Я использовал китайскую плату TDM410P.
Также необходимо подать заявку оператору телефонной связи чтобы они включили не старый АОН, а CallerID, то есть FSK (Bellcore).
Я написал сообщение в техническую поддержку на сайта Укртелеком, и на следующий день на стационарный телефон перезвонил местный инженер.
Мы были подключены к АТС SI 3000, спустя еще день с нескольких попыток нам все же включили FSK и номера начали определяться еще до снятия трубки, мобильные, стационарные и т.д., хотя иногда бывали случаи что номер был не определен.

Если у провайдера телефонной связи не включен FSK, то в консоли Asterisk при звонках можно увидеть ошибки:

WARNING[21790][C-00000000]: chan_dahdi.c:1842 my_get_callerid: Failed to decode CallerID
ERROR[21790][C-00000000]: callerid.c:566 callerid_feed: No start bit found in fsk data.

Записать для анализа звук с канала телефонной линии можно командой:

dahdi_monitor 1 -v -r streamrx.wav

Также можно включить(on)/отключить(off) режим отладки звонков открыв консоль Asterisk и набрав команду:

sudo asterisk -rvvvvvv
sip set debug on
sip set debug off

Сгенерированный /etc/asterisk/dahdi-channels.conf я оставил без изменений (на всякий случай приведу его содержимое):

; Span 1: WCTDM/0 "Wildcard TDM410P" (MASTER)
;;; line="1 WCTDM/0/0 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 1
callerid=
group=
context=default

;;; line="2 WCTDM/0/1 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 2
callerid=
group=
context=default

;;; line="3 WCTDM/0/2 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 3
callerid=
group=
context=default

;;; line="4 WCTDM/0/3 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 4
callerid=
group=
context=default

Увеличение громкости звонков в Asterisk

Чтобы увеличить громкость разговора при звонках, необходимо в файле /etc/asterisk/extensions.conf, в начале каждого диалплана добавить пару строк (на которых нужно увеличить громкость):

exten => X.,1,Set(VOLUME(TX)=5)
exten => X.,n,Set(VOLUME(RX)=5)

Минимальное значение 0, а максимальное 10.

Если используется Dahdi, то можно усилить громкость на плате прописав в /etc/asterisk/chan_dahdi.conf или в контексте нужного транка:

rxgain=2.0
txgain=2.0

Тут стандартное значение 0.0, а максимальное 6.0, где rx (receive) — входящая громкость, tx (transmit) — исходящая от Asterisk.

Скрипт быстрой настройки IPTables

Иногда нужно например удалить все правила IPTables и прописать только нужное, так вот для удобства можно указать их в скрипте, после чего выполнить его.

Переключимся на root пользователя, в Ubuntu это можно сделать так:

sudo -i

Сначала посмотрим существующие правила (возможно некоторые будут нужны и их можно будет скопировать в скрипт):

iptables -nvL

И собственно ниже приведу пример скрипта с набросанными правилами IPTables:

#!/bin/sh
# Пример очистки и удаления всех существующие правил и цепочек
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -t filter -X
iptables -t nat -X
iptables -t mangle -X
iptables -X
# Запретим все входящие и проходящие соединения, разрешим все исходящие от сервера
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Разрешим локальный интерфейс
iptables -A INPUT -i lo -j ACCEPT
# Не трогаем уже установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Откроем порты SSH, HTTP для всех если нужно
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# При необходимости можно разрешить все входящие соединения конкретному IP-адресу
iptables -A INPUT -s 192.168.10.101 -j ACCEPT
# Пример разрешения PING
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
# и т.д.

Сделаем файл скрипт исполняемым:

chmod  rules.sh

Выполним его:

./rules.sh

Для удобного сохранения правил в Ubuntu, чтобы они не сбросились после перезапуска системы, можно установить iptables-persistent:

apt-get install iptables-persistent

После чего сохранять правила командой:

service iptables-persistent save

Можно такте сохранить текущие активные правила командами:

iptables-save >/etc/firewall.conf
ip6tables-save >/etc/firewall6.conf

Создать файл например через редактор nano (Ctrl+X для выхода из редактор, y/n и Enter для сохранения или отмены изменений):

nano -w /etc/network/if-up.d/00-iptables

Добавить в него содержимое:

#!/bin/sh
iptables-restore < /etc/firewall.conf
ip6tables-restore < /etc/firewall6.conf

И сделать файл выполняемым:

chmod 744 /etc/network/if-up.d/00-iptables

Смотрите также:
Настройка IPTables