Compiling Kernel 3.8 on Debian Testing/Wheezy

linuxNOTE: It seems like series 3.8 has issues with intel (i915) graphics — it occasionally generates kworker threads that causes unresponsiveness as seen by slow mouse and keyboard response when e.g. plugging or unplugging mains power. No issues on e.g. nvidia though.

http://verahill.blogspot.com.au/2013/03/368-slow-mouse-and-keyboard-triggered.html
http://forums.gentoo.org/viewtopic-p-7278760.html
https://bbs.archlinux.org/viewtopic.php?pid=1248190

Post: Kernel 3.8 is out now. Not much to say — the compilation works well using the standard method. The compressed kernel is about 81 Mb to download.

The approach below shows how to compile the kernel on Debian. If you’re interested in a more generic approach, see this post:

http://verahill.blogspot.com.au/2013/02/344-compile-kernel-38-without-using-kpkg.html

NOTE: kernel 3.8 — in contrast to the 3.7 series — now compiles fine on AMD FX 8150.

NOTE: kernel 3.8 plays well with nvidia dkms

Here we go:

sudo apt-get install kernel-package fakeroot build-essential ncurses-dev
mkdir ~/tmp
cd ~/tmp
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.8.tar.bz2
tar xvf linux-3.8.tar.bz2
cd linux-3.8/
cat /boot/config-`uname -r`>.config
make oldconfig

You will be asked a lot of questions — how many depends on what version you upgrade from. If in doubt, pick the default answer (i.e. hit enter). If really in doubt, use google.

Then continue:

make-kpkg clean

Do

make menuconfig

if you want to make any specific changes to the kernel (e.g. add support for certain devices)

Then continue:

time fakeroot make-kpkg -j4 --initrd kernel_image kernel_headers
As usual 4 is the number of threads you wish to launch — make it equal to the number of cores that you have for optimum performance during compilation (more about that here).
The build takes around 20 minutes on a four-core intel i5-2400 with -j4, and 14 minutes on an fx-8150 with -j8 (96 minutes with -j1).
Install:
sudo dpkg -i ../linux-image-3.8.0_3.8.0-10.00.Custom_amd64.deb ../linux-headers-3.8.0_3.8.0-10.00.Custom_amd64.deb
New stuff/Questions:
Offload RCU callback processing from boot-selected CPUs (RCU_NOCB_CPU) [N/y/?] (NEW) *
Memory placement aware NUMA scheduler (NUMA_BALANCING) [N/y/?] (NEW) *
Enable to assign a node which has only movable memory (MOVABLE_NODE) [N/y/?] (NEW)
Allow for memory hot-add (MEMORY_HOTPLUG) [Y/n] y
Allow for balloon memory compaction/migration (BALLOON_COMPACTION) [Y/n/?] (NEW)
Set default setting of cpu0_hotpluggable (BOOTPARAM_HOTPLUG_CPU0) [N/y/?] (NEW
Debug CPU0 hotplug (DEBUG_HOTPLUG_CPU0) [N/y/?] (NEW)
ACPI tables can be passed via uncompressed cpio in initrd (ACPI_INITRD_TABLE_OVERRIDE) [N/y/?] (NEW)
Support multiple cpuidle drivers (CPU_IDLE_MULTIPLE_DRIVERS) [N/y/?] (NEW)
"NOTRACK" target support (DEPRECATED) (NETFILTER_XT_TARGET_NOTRACK) [N/m] (NEW

Default SCTP cookie HMAC encoding
  > 1. Enable optional MD5 hmac cookie generation (SCTP_DEFAULT_COOKIE_HMAC_MD5) (NEW)
    2. Enable optional SHA1 hmac cookie generation (SCTP_DEFAULT_COOKIE_HMAC_SHA1) (NEW)
    3. Use no hmac alg in SCTP cookie generation (SCTP_DEFAULT_COOKIE_HMAC_NONE) (NEW)
  choice[1-3?]:   Enable optional MD5 hmac cookie generation (SCTP_COOKIE_HMAC_MD5) [Y/?] (NEW) y

Enable optional SHA1 hmac cookie generation (SCTP_COOKIE_HMAC_SHA1) [N/y/?] (NEW) *
Enable optional MD5 hmac cookie generation (SCTP_COOKIE_HMAC_MD5) [Y/?] (NEW) y
Distributed ARP Table (BATMAN_ADV_DAT) [N/y/?] (NEW)
Kvaser CAN/USB interface (CAN_KVASER_USB) [N/m/?] (NEW)
LSI MPT Fusion SAS 3.0 Device Driver (SCSI_MPT3SAS) [N/m/?] (NEW)
Chelsio Communications FCoE support (SCSI_CHELSIO_FCOE) [N/m/?] (NEW) *
Marvell 88E6060 ethernet switch chip support (NET_DSA_MV88E6060) [N/m/y/?] (NEW)
Marvell 88E6085/6095/6095F/6131 ethernet switch chip support (NET_DSA_MV88E6131) [N/m/y/?] (NEW)
Marvell 88E6123/6161/6165 ethernet switch chip support (NET_DSA_MV88E6123_61_65) [N/m/y/?] (NEW) *
Cadence devices (NET_CADENCE) [Y/n/?] (NEW)
AT91RM9200 Ethernet support (ARM_AT91_ETHER) [N/m/y/?] (NEW)
Cadence MACB/GEM support (MACB) [N/m/y/?] (NEW)
Broadcom devices (NET_VENDOR_BROADCOM) [Y/?] y
Marvell MDIO interface support (MVMDIO) [N/m/y/?] (NEW)
CDC MBIM support (USB_NET_CDC_MBIM) [N/m/?] (NEW)
Atheros Wireless Cards (ATH_CARDS) [N/m/?] (NEW)
Atheros AR5523 wireless driver support (AR5523) [N/m/?] (NEW)
Wilocity 60g WiFi card wil6210 support (WIL6210) [N/m/?] (NEW) *
Realtek RTL8723AE PCIe Wireless Network Adapter (RTL8723AE) [N/m/?] (NEW)
ARC UART driver support (SERIAL_ARC) [N/m/y/?] (NEW) *
CBUS I2C driver (I2C_CBUS_GPIO) [N/m/?] (NEW)
TS-5500 DIO blocks and compatibles (GPIO_TS5500) [N/m/y/?] (NEW) 
TI BQ2415x battery charger driver (CHARGER_BQ2415X) [N/m/?] (NEW)
Board level reset or power off (POWER_RESET) [N/y/?] (NEW) *

 Default Thermal governor
  > 1. step_wise (THERMAL_DEFAULT_GOV_STEP_WISE) (NEW)
    2. fair_share (THERMAL_DEFAULT_GOV_FAIR_SHARE) (NEW)
    3. user_space (THERMAL_DEFAULT_GOV_USER_SPACE) (NEW)
  choice[1-3?]:   Fair-share thermal governor (FAIR_SHARE) [N/y/?] (NEW)

Step_wise thermal governor (STEP_WISE) [Y/?] (NEW) y
User_space thermal governor (USER_SPACE) [N/y/?] (NEW)
SSB GPIO driver (SSB_DRIVER_GPIO) [N/y/?] (NEW) *
BCMA GPIO driver (BCMA_DRIVER_GPIO) [N/y/?] (NEW)
Support for Realtek PCI-E card reader (MFD_RTSX_PCI) [N/m/y/?] (NEW)
TI ADC / Touch Screen chip support (MFD_TI_AM335X_TSCADC) [N/m/y/?] (NEW)
Support for Nano River Technologies Viperboard (MFD_VIPERBOARD) [N/m/?] (NEW)
Support for Retu multi-function device (MFD_RETU) [N/m/?] (NEW) *
Maxim MAX8973 voltage regulator  (REGULATOR_MAX8973) [N/m/?] (NEW)
TI TPS51632 Power Regulator (REGULATOR_TPS51632) [N/m/?] (NEW)
Siano SMS1xxx based MDTV receiver (SMS_USB_DRV) [N/m/?] (NEW)
Siano SMS1xxx based MDTV via SDIO interface (SMS_SDIO_DRV) [N/m/?] (NEW)   *
Stanton Control System 1 MIDI (SND_SCS1X) [N/m/?] (NEW) *
ION iCade arcade controller (HID_ICADE) [N/m/?] (NEW)
HID over I2C transport layer (I2C_HID) [N/m/?] (NEW) *
Renesas R-Car USB phy support (USB_RCAR_PHY) [N/m/?] (NEW)   *
SDHCI support for ACPI enumerated SDHCI controllers (MMC_SDHCI_ACPI) [N/m/?] (NEW)
NXP PCF8523 (RTC_DRV_PCF8523) [N/m/?] (NEW)
Philips PCF8563/Epson RTC8564 (RTC_DRV_PCF8563) [M/n/?] m
Userspace platform driver with generic irq and dynamic memory (UIO_DMEM_GENIRQ) [N/m/?] (NEW)
Microsoft Hyper-V Balloon driver (HYPERV_BALLOON) [N/m/?] (NEW) *
SystemBase PCI Multiport UART (SB105X) [N/m/y/?] (NEW)
TTY over Firewire (FIREWIRE_SERIAL) [N/m/?] (NEW) *
F2FS filesystem support (EXPERIMENTAL) (F2FS_FS) [N/m/y/?] (NEW) *
Enable CIFS debugging routines (CIFS_DEBUG) [Y/n/?] (NEW)
Simplified Mandatory Access Control Kernel Support (SECURITY_SMACK) [N/y/?] (NEW)
Camellia cipher algorithm (x86_64/AES-NI/AVX) (CRYPTO_CAMELLIA_AESNI_AVX_X86_64) [N/m/y/?] (NEW)

Установка и настройка Wowza media server 2.2.4 и JW Player на Debian

wowza

Установка сервера

Топаем на оф сайт и качаем DEB версию. Пока качается ищем ключик (или покупаем…)

Установка самого сервера проста

sudo chmod +x WowzaMediaServer-2.2.4.deb.bin
sudo ./WowzaMediaServer-2.2.4.deb.bin

Т.к. требуется Java, ставим

apt-get install sun-java6-jre

Запускаем сервер

/etc/init.d/WowzaMediaServer start

 

Настройка сервера для вещания

Переходим в папку

cd /usr/local/WowzaMediaServer/content

Создаем папку для вещания, что типа плейлиста

mkdir simplevideostreaming

В папку content нужно будет класть ваше видео, либо сделать симлинк на content с вашим видео, и создать там папку simplevideostreaming.

 

Настройка плеера JW Player

Идем на оф сайт нажимаем Download JW Player, снимаем птички, ничего не заполняем, тыкаем Download Now. Плеер скачивается.

Распаковываем архив и кладем на сервер.

Пример для вещания

Кладем видео  video.flv в папку /usr/local/WowzaMediaServer/content

В папке которую мы распаковывали на сервер создаем тестовый html и вносим такие строки

<object id="player" style="display: block; margin-left: auto; margin-right: auto;" width="512" height="288" data="player.swf" type="application/x-shockwave-flash">
<param name="data" value="player.swf" />
<param name="name" value="player" />
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="flashvars" value="streamer=rtmp://ВАШ_САЙТ:1935/simplevideostreaming&amp;file=video.flv&amp;image=preview.jpg&amp;provider=rtmp" />
<param name="src" value="player.swf" />
</object>

Подробнее:

streamer означает что видео будет потоковое, а не из файла

ВАШ_САЙТ — вписываем ваш URL  сайта где крутится сервер  Wowza

simplevideostreaming — это папка-плейлист который создавали в после установки сервера.

video.flv и preview.jpg — собственно видео и превью которое показывается до запуска видео.

Сохраняем и открываем, получаем такое…

jwplaeer-300x171

К плееру можно прикрутить переключение в HD, шарилку на Facebook и прочие плагины. Их можно найти тут. Если нужно бесплатно есть на трекерах.

 

P.S. Суть установки Wowza media server для меня была в перемотки длинных видео, т.к приходилось ждать пока все видео прогрузится. Здесь же промотка происходит как на YouTube с любого места.

Маршрутизатор на Debian

При наличии более одного компьютера возникает потребность в организации совместного доступа в интернет. В условиях небольшого офиса или домашней сети подойдут стандартные решения SOHO, но как только количество компьютеров переваливает за 5-10 уже необходимо находить другие решения. Один из вариантов программный роутер с возможностью расширения функций (таких как кэширование, учет трафика, разграничение доступа, резка рекламы и банеров и т.д.). Установка и настройка программного роутера задача не такая уж и сложная, если иметь представление из чего он состоит и как работает. Рассмотрим простейший вариант реализации шлюза.

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

  • операционная система — Debian
  • набор железа — подойдет любой старенький компьютер PIII и выше с двумя сетевыми картами;
  • данные на имеющуюся сеть (провайдер, поставьте свои данные) eth0:

IP адрес: 192.168.10.5
шлюз: 192.168.10.254
DNS: 192.168.10.1

  • данные на внутреннюю локальную сеть (куда будем раздавать интернет) eth1:

IP адрес: 10.0.60.254 (наш новый шлюз)

С параметрами определились, можно начинать устанавливать. Систему ставим минимальную, из задач на сервере нам понадобится только OpenSSH, остальное нет необходимости ставить. Первым делом настроим сетевые интерфейсы, чтоб не сидеть за косолью, а подключиться с рабочей машины и все делать удаленно. Настройки сетевых интерфейсов находятся в файле /etc/network/interfaces, приводим примерно в такой вид, напоминаю, данные необходимо подставить свои.

user$ sudo nano /etc/network/interfaces
# Сетевая петля                 
auto lo
iface lo inet loopback
# Основной интерфейс от провайдера
auto eth0 eth1
iface eth0 inet static
        address 192.168.10.5
        netmask 255.255.255.0
        network 192.168.10.0
        broadcast 192.168.10.255
        gateway 192.168.10.254
        dns-nameservers 192.168.10.1
        dns-search localdomain.lan
# Дополнительный интерфейс локальная сеть
iface eth1 inet static
        address 10.0.60.254
        netmask 255.255.255.0

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

user$ sudo /etc/init.d/networking restart

Немного отредактируем некоторые файлы, чтоб потом все заработало без лишних «танцов с бубнами»

user$ sudo nano /etc/resolv.conf
search localdomain.lan
nameserver 192.168.10.1

С этого файла кэширующий сервер DNS будет брать настройки. Осталось совсем немного, настроить NAT и DNS. Это только слышать страшно, а делать просто. Для этого установим волшебный пакет — dnsmasq. Dnsmasq является простым в настройке кеширующим DNS и DHCP(опционально) сервером. Разработан специально для применения в небольших, в том числе и домашних сетях, использующих NAT и соединяющихся с Интернет посредством модема, ADSL и прочих вариантов.

user$ sudo aptitude install dnsmasq

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

user$ sudo touch /usr/local/bin/set_firewall
user$ sudo nano /usr/local/bin/set_firewall
#!/bin/sh
#
# Константы
# Интерфейс смотрящий в интернет
INET_IFACE="eth0"
#
# Сброс всех правил
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#
# Включаем режим прозрачности
iptables -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
#
# Включаем режим пересылки пакетов
echo "1" > /proc/sys/net/ipv4/ip_forward
user$ sudo chmod +x /usr/local/bin/set_firewall
user$ sudo /usr/local/bin/set_firewall

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

user$ sudo touch /etc/network/if-up.d/firewall
user$ sudo nano /etc/network/if-up.d/firewall
#!/bin/sh
/usr/local/bin/set_firewall
user$ sudo chmod +x /etc/network/if-up.d/firewall

Стоит предупредить, что это самый минимум для раздачи интернета в сеть в таком виде это использовать нельзя! Обязательно нужно защитить порты снаружи, об этом поговорим позже.

Ускорение запуска программ в Debian

Утилита preload ставилась и проверялась на Debian 5 Lenny, на других версиях Linux, наверняка, присутствует. Чем же она примечательна? Только тем, что позволяет производить в полуавтоматическом режиме анализ часто запускаемые программы и осуществлять кэширование части их кода в памяти. В среднем ускорение составляет около 45-50%. Для её установки не потребуется много времени, тем более она ставиться и настраивается сразу. Итак, устанавливаем:

[user]$su
[root]#apt-get install preload

Собственно, вся установка. После установки утилита запустится и начнёт уже работать. Как и у многих программ у неё есть свой конфигурационный файл /etc/preload.conf при желании можно изменить режим работы утилиты. Более детальное описание и детали конфигурации можно получить на сайте разработчика Techthrob.

GRUB 2 — ошибка 15

Изредка, особенно при невнимательной настройке загрузчика grub2 возникает ситуация, при которой система полностью отказывается грузиться, а на экране консоли возникает ошибка — “Error 15: File not found!”. Для решения проблемы необходимо внести изменения в файл /boot/grub/menu.lst, указав правильный раздел для загрузки — раздел root.

С начала загружаемся с Live CD и открываем терминал.

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

$ sudo fdisk -l | grep -i linux

Обычно это раздел системы и swap-раздел. Нас интересует раздел, содержащий /root.

/dev/hda5  1276  1397  979902    82  Linux swap / Solaris
/dev/hda6  1398  2550  9261441   83  Linux

/dev/hda6 — в нашем примере это раздел root. /dev/hda6 прописывается в grub, как (hd0,5). К примеру, если ваша система находится в /dev/hda1, то при загрузке нужно прописывать — (hd0,0). В grub прописывается значение на единицу меньшее, чем указано в разделе.

Откройте файл menu.lst и проверьте, что /dev/hda6 и (hd0,5) соответствуют разделу root, и никаких лишних разделов не указано. Это основная причина появления ошибки 15. В нашем примере root-раздел должен соответствовать разделу /dev/hda6, ниже указан пример файла /boot/grub/menu.lst:

title       Debian GNU/Linux, kernel 2.6.26-2-686
root        (hd0,5)
kernel      /boot/vmlinuz-2.6.26-2-686 root=/dev/hda6 ro
initrd      /boot/initrd.img-2.6.26-2-686
title       Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root        (hd0,5)
kernel      /boot/vmlinuz-2.6.26-2-686 root=/dev/hda6 ro single
initrd      /boot/initrd.img-2.6.26-2-686

Далее желательно проверить файл /etc/fstab на соответствие разделов и типов файловых систем:

# /etc/fstab: static file system information.
#
# <file system> <mount point>  <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults          0     0
/dev/hda6       /               ext3    errors=remount-ro 0     1
/dev/hda5       none            swap    sw                0     0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto   0     0

После перезагрузки, система должна нормально загрузиться.

Переустановка загрузчика

После загрузки LiveCD, открываем терминал и монтируем разделы системы:

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

# fdisk -l

Монтирование обычных систем:

# mount /dev/sda2 /mnt/

Если /boot примонтирован отдельно:

# mount /dev/sda1 /mnt/boot

Монтирование специальных систем:

# mount --bind /dev /mnt/dev
# mount --bind /dev/pts /mnt/dev/pts
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys

Заходим в chroot-систему:

# chroot /mnt

Если отсутствует файл /boot/grub/grub.cfg, или есть проблемы с настройкой:

# update-grub

Переустанавливаем GRUB2 :

# grub-install /dev/sda

(Внимание! Номер после названия раздела не пишется!)

Проверяем правильность настроек:

# grub-install --recheck /dev/sda

Выходим из chroot-системы:

# exit

# umount /mnt/sys
# umount /mnt/proc
# umount /mnt/dev/pts
# umount /mnt/dev
# umount /mnt/boot
# umount /mnt

# reboot

После перезагрузки всё должно заработать! 🙂

 

Proxy-сервер ffproxy

Для того, чтобы быстро установить простой прокси-сервер в Debian можно установить сервер ffproxy.

Для начала установим:

# apt-get install ffproxy

Открываем файл с настройками прокси-сервера

# mcedit /etc/ffproxy/ffproxy.conf

Тут нас интересует несколько строк:

port 8080

— В этой строке можно заменить номер порта нашего прокси-сервера. Например, у меня для прокси-сервера используется порт 3128.

Если компьютер сам подключен к прокси-серверу, то можно указать его параметры, заменив строки

forward_proxy 192.168.10.5
forward_proxy_port 8082

Для того, чтобы раскомментировать их, надо убрать # в начале строки.

Далее заполним список ip-адресов, с которых можно выходить в сеть через наш прокси-сервер:

# mcedit /etc/ffproxy/db/access.ip

там весьма оригинальный формат записи, крайне напоминающий регулярные выражения. Вполне возможно, что это они и есть и можно при помощи них задавать диапазоны айпишников — сам лично не проверял. Например, в моём случае это выглядит так: ^192\.168\.0\.101$ (там есть пример, глядя на который можно не запутаться).

Для того, чтобы разрешить подключения с любого ip-адреса, оставляем в файле только два символа

 .*

для разрешения всех подключений через IPv6 оставим только символ

:

для разрешения всех подключений через IPv4 напишем

 \.

Для запуска/остановки/перезапуска нашего прокси-сервера используем следующие команды:

/etc/init.d/ffproxy start
/etc/init.d/ffproxy stop 
/etc/init.d/ffproxy restart

Восстановление IP-фона Cisco 7942G

Cisco 7942G мне подарили товарищи по работе, за что им огромное спасибо и уважение! Угораздило же меня прошивать телефон на SIP-прошивку именно в тот момент, как скакнуло напряжение в офисе.. 8(( Телефон сдох.

После различных попыток восстановления телефона, он замолчал и уже не подавал никаких признаков жизни — на экране по появлялось никаких сообщений. Ни по команде 123456789*0#, ни по 3491672850*# восстановить телефон, с помощью местного TFTP-сервера и прошивок на нем, не удалось. (((

Пришлось менять стратегию.

Был запущен отдельный TFTP-сервер на DHCP с раздачей файла по протоколу BOOTP на Debian 5.0.6. Использовалось редкое в России устройство Synertron CV860A, с процессором VIA C3:

  • CPU VIA Eden/C3 376 PIN 1GHz,
  • PLE133 chipset, PC133 SDRAM memory,
  • 3x LANs, 2x Serial ports, 3x USB ports,
  • 50-pin bootable Compact Flash Disk Socket,
  • 1x DOC,
  • 1x 44-pin IDE,
  • and 1x 40-pin IDE.

 

Крайние правые порты (по порядку): eth0 и eth2.

Решение нашел благодаря статье на официальном сайте — http://www.cisco.com/en/US/ts/fn/620/fn62949.html

Вот содержание статьи:

Workaround:

Cisco recommends that customers stage their Cisco Unified IP Phones before deploying them to users. This allows Network Administrators to ensure:

— Each phone is upgraded to appropriate firmware releases.

— Properly configure the phone prior to deploying each phone

— The phone is assembled with the appropriate cables, handsets and optional headsets.

While staging the Network Administrator can perform additional activities such as factory resets, apply Dial Numbers and spot check phone functions.

Solution:

Cisco recommends the use of Firmware release 8.2(2)SR1 or later releases. This release and later versions are free of this defect. Registered users may obtain this release from the Cisco Unified IP Phone Firmware downloads (registered customers only) page. Select the proper load for your model of IP Phone.

Recovery of the IP Phone:

  1. Make sure your phones are on a network with a valid DHCP server.
  2. Make sure the DHCP server on this network has a valid Option 150 setting pointing to a valid Cisco TFTP server.
  3. Make sure you have a valid term11.default.loads file from load 8.2(2)SR1 or higher on the TFTP server that is referenced in Option 150.
  4. Make sure you have all other needed image files present on this same TFTP server. * See note below.
  5. Change the timing on the network — the problem is related to timing. Toggle switch port settings between «Auto» and «100Mbps.» On a Cisco switch the command to toggle the switch port switch:
    interface range fastethernet
    set speed 100
    set duplex full
    

    Wait 10 minutes, or until all the phones have been updated, then issue the following command if desired to return to original configuration:

    interface range fastethernet
    set speed auto
    set duplex auto
    

    Ensure that items 1 through 5 have been completed. If performing these five steps does not resolve the issue, continue with the remaining steps.

  6. Pull power on the phone (even if power is PoE).
  7. Hold down the # key on the phone.
  8. Continue holding down the # key and re-apply power.
  9. While still holding the # key wait for the Message Waiting Indicator (MWI) light on the handset to start flashing.
  10. Once the MWI light is flashing, release the # key and enter the following sequence exactly on the keypad:3491672850*#Once this sequence has been entered on the IP Phone, if all the network criteria above have been met, it should begin its recovery process. This process can take up to 15 minutes to finish. The phone may appear to be doing nothing during this time. However, if the phone does not recover after 20 minutes then it is possible that the recovery is stuck. In this case, re-examine your network and verify that steps 1-4 are in place, then re-issue the factory reset sequence.

* Note: The factory reset sequence is a way for a phone to clear flash and still upload to a valid firmware image. This is facilitated by the termxx.default.loads file, but requires that the image files listed in the termxx.default.loads file are available in TFTP for the phone to download. Open the termxx.default.loads file in any text editor. This loads file is essentially just a packing list showing all the OS and application files the phone needs to function. The files include a cnu, cvm, dsp, app and jar files. Please make sure that these files as listed in the termxx.default.loads file are in TFTP. («xx» will be either «06» for the CP-7906G model, or «11» for the CP-7911G model.)

Additional Diagnostic Steps:

— Try a hard-coded IP address as a test to see if this resolves the upgrade failures. If it does, and the number of failing IP Phones is relatively few, this procedure may be the most expedient. After the IP Phone upgrades successfully, reconfigure the IP Phone to use DHCP.

— Try putting the phone on a hub or a different switch and see if this helps change the startup timing enough so that the upgrade completes successfully.

***

Основная проблема возникла в пунктах 1-4, — не сразу удалось подобрать подходящую конфигурацию и заставить ее работать, ниже описываю положительный опыт создания такой конфигурации.

Первоначально пытался прописать DHCP option 150 на сервере Windows 2003 Server (позже подготовлю статью по этой теме), однако сразу не завелось, потому перешел на Debian.

IP-фон с помощью порта 10/100SW был подключен к свитчу, свитч подключен к серверу в порт eth0 (192.168.100.0/24), порт eth2 сервера (192.168.0.0/24) через еще один роутер, был подключен к интернету.

Итак, после установки операционной системы, был установлен TFTP-сервер:

apt-get install tftpd-hpa tftp-hpa
mcedit /etc/inetd.conf
#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
invoke-rc.d openbsd-inetd restart
chmod 777 /var/lib/tftpboot
echo TEST > /var/lib/tftpboot/test0
echo get test0 | tftp 127.0.0.1

Устанавливаем DHCP-сервер:

apt-get install dhcp3-server
mcedit /etc/dhcp3/dhcpd.conf

ddns-update-style none;

option option-150 code 150 = ip-address;

default-lease-time 3600;
max-lease-time 7200;

# eth2
subnet 192.168.0.0 netmask 255.255.255.0 {
}

# eth0
subnet 192.168.100.0 netmask 255.255.255.0 {
    range dynamic-bootp 192.168.100.2 192.168.100.99;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.100.255;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option routers 192.168.100.1;
    option option-150 192.168.100.1;
}

host cisco7942 {
    hardware ethernet b8:be:bf:22:be:05;
#    filename "SEPB8BEBF22BE05.cnf.xml";
    filename "term42.default.loads";
}

log-facility local7;

 

Настройки DHCP-клиента:

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

send host-name "dhcp-server";
send dhcp-client-identifier 00:40:48:b1:7c:59;
send dhcp-lease-time 3600;

request subnet-mask, broadcast-address, time-offset, routers,
	domain-name, domain-name-servers, domain-search, host-name,
	netbios-name-servers, netbios-scope, interface-mtu,
	rfc3442-classless-static-routes;

timeout 360;

Файл /etc/defaults/dhcp3-server:

INTERFACES="eth0"

Настройки сети:

auto lo
iface lo inet loopback

iface eth0 inet static
	address 192.168.100.1
	netmask 255.255.255.0
	network 192.168.100.0
	broadcast 192.168.100.255
auto eth0

allow-hotplug eth2
iface eth2 inet static
	address 192.168.0.53
	netmask 255.255.255.0
	network 192.168.0.0
	broadcast 192.168.0.255
	gateway 192.168.0.1
	dns-nameservers 192.168.0.1
auto eth2

Перезапуск сетевых настроек:

/etc/init.d/networking restart

Перезапуск DHCP-сервера:

/etc/init.d/dhcp3-server restart

Для пропуска трафика из подсети 192.168.0.0 в сеть 192.168.100.0, настраиваем NAT на IPtables, делаем скрипт ~/fw.start:

#!/bin/sh

INET="eth2"
INETIP="192.168.0.53"

iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP

echo "1" > /proc/sys/net/ipv4/ip_forward

И запускаем его:

sh ~/fw.start

После этого трафик из сети 192.168.0.0 будет доступен и в 192.168.100.0.

Результаты работы проверяю с помощью tshark:

apt-get install tshark
tshark -i eth0

После всех манипуляций перезагружаем IP-фон, как описано в статье в пункте 10:

1. Зажимаем #.
2. Отключаем питание.
3. После того, как начинают мигать кнопки Line отжимаем #.
4. Набираем комбинацию 3491672850*# и ждем, пока с TFTP-сервера пойдет трафик в телефон.

На TFTP-сервере были размещены файлы одной из ранних прошивок:

# ls /var/lib/tftpboot/

apps42.8-5-2TH1-9.sbn
cnu42.8-5-2TH1-9.sbn
cvm42sip.8-5-2TH1-9.sbn
dsp42.8-5-2TH1-9.sbn
jar42sip.8-5-2TH1-9.sbn
SIP42.8-5-2S.loads
term42.default.loads
term62.default.loads
dialplan.xml
CTLSEPB8BEBF22BE05.tlv
SEPB8BEBF22BE05.cnf.xml
XMLDefault.cnf.xml

dialplan.xml:

<DIALTEMPLATE>
  <TEMPLATE MATCH="*" Timeout="3"/>
</DIALTEMPLATE>

SEPB8BEBF22BE05.cnf.xml (конфиг-файл от более поздней прошивки):

<device>
    <fullConfig>true</fullConfig>
    <deviceProtocol>SIP</deviceProtocol>
    <devicePool>
        <dateTimeSetting>
            <dateTemplate>D.M.Y</dateTemplate>
            <timeZone>Ekaterinburg Standard Time</timeZone>
            <ntps>
                <ntp>
                    <name>10.210.0.87</name>
                    <ntpMode>Unicast</ntpMode>
                </ntp>
            </ntps>
        </dateTimeSetting>
        <callManagerGroup>
            <tftpDefault>true</tftpDefault>
                <members>
                <member priority="0">
                <callManager>
                <name>77.243.103.107</name>
                <description>Asterisk</description>
                <ports>
                  <ethernetPhonePort>2000</ethernetPhonePort>
                  <sipPort>5060</sipPort>
                  <securedSipPort>5061</securedSipPort>
                </ports>
                <processNodeName>77.243.103.107</processNodeName>
                </callManager>
                </member>
                </members>
             </callManagerGroup>
    </devicePool>
    <commonProfile>
        <phonePassword></phonePassword>
        <backgroundImageAccess>true</backgroundImageAccess>
        <callLogBlfEnabled>0</callLogBlfEnabled>
    </commonProfile>
    <loadInformation>SIP42.8-5-4S</loadInformation>
    <loadInformation434  model="Cisco 7942">SIP42.8-5-4S</loadInformation434>
    <vendorConfig>
        <disableSpeaker>false</disableSpeaker>
        <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
        <pcPort>0</pcPort>
        <settingsAccess>1</settingsAccess>
        <garp>0</garp>
        <voiceVlanAccess>0</voiceVlanAccess>
        <videoCapability>0</videoCapability>
        <autoSelectLineEnable>0</autoSelectLineEnable>
        <daysDisplayNotActive>1,7</daysDisplayNotActive>
        <displayOnTime>10:30</displayOnTime>
        <displayOnDuration>06:05</displayOnDuration>
        <displayIdleTimeout>00:05</displayIdleTimeout>
        <webAccess>1</webAccess>
        <spanToPCPort>1</spanToPCPort>
        <loggingDisplay>1</loggingDisplay>
        <loadServer></loadServer>
    </vendorConfig>

<userLocale>
   <name>Russian_Russian_Federation</name>
   <uid></uid>
   <langCode>ru_RU</langCode>
   <version>8.4.3.1000-1</version>
   <winCharSet>utf-8</winCharSet> </userLocale>
<networkLocale>Russian_Federation</networkLocale>
 <networkLocaleInfo>
   <name>Russian_Federation</name>
   <uid></uid>
   <version>8.4.3.1000-1</version>
 </networkLocaleInfo>
    <deviceSecurityMode>1</deviceSecurityMode>
    <idleTimeout>0</idleTimeout>
    <directoryURL></directoryURL>
     <servicesURL>77.243.103.107</servicesURL>
     <idleURL></idleURL>
    <messagesURL></messagesURL>
    <proxyServerURL></proxyServerURL>
    <dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
    <dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
    <dscpForCm2Dvce>96</dscpForCm2Dvce>
    <transportLayerProtocol>2</transportLayerProtocol>
    <capfAuthMode>0</capfAuthMode>
    <capfList>
        <capf>
            <phonePort>3804</phonePort>
        </capf>
    </capfList>
    <certHash></certHash>
    <encrConfig>false</encrConfig>
    <sipProfile>
        <sipProxies>
            <backupProxy>77.243.103.107</backupProxy>
            <backupProxyPort>5060</backupProxyPort>
            <emergencyProxy>77.243.103.107</emergencyProxy>
            <emergencyProxyPort>5060</emergencyProxyPort>
            <outboundProxy>77.243.103.107</outboundProxy>
            <outboundProxyPort>5060</outboundProxyPort>
            <registerWithProxy>true</registerWithProxy>
        </sipProxies>
     <sipCallFeatures>
        <cnfJoinEnabled>true</cnfJoinEnabled>
        <callForwardURI>x--serviceuri-cfwdall</callForwardURI>
        <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
        <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
        <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
        <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
        <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
        <rfc2543Hold>false</rfc2543Hold>
        <callHoldRingback>2</callHoldRingback>
        <localCfwdEnable>true</localCfwdEnable>
        <semiAttendedTransfer>true</semiAttendedTransfer>
        <anonymousCallBlock>2</anonymousCallBlock>
        <callerIdBlocking>2</callerIdBlocking>
        <dndControl>0</dndControl>
        <remoteCcEnable>true</remoteCcEnable>
     </sipCallFeatures>
      <sipStack>
        <sipInviteRetx>6</sipInviteRetx>
        <sipRetx>10</sipRetx>
        <timerInviteExpires>180</timerInviteExpires>
        <timerRegisterExpires>3600</timerRegisterExpires>
        <timerRegisterDelta>5</timerRegisterDelta>
        <timerKeepAliveExpires>120</timerKeepAliveExpires>
        <timerSubscribeExpires>120</timerSubscribeExpires>
        <timerSubscribeDelta>5</timerSubscribeDelta>
        <timerT1>500</timerT1>
        <timerT2>4000</timerT2>
        <maxRedirects>70</maxRedirects>
        <remotePartyID>false</remotePartyID>
        <userInfo>None</userInfo>
     </sipStack>
     <autoAnswerTimer>1</autoAnswerTimer>
     <autoAnswerAltBehavior>false</autoAnswerAltBehavior>
     <autoAnswerOverride>true</autoAnswerOverride>
     <transferOnhookEnabled>false</transferOnhookEnabled>
     <enableVad>false</enableVad>
         <preferredCodec>g711alaw</preferredCodec>
       <dtmfAvtPayload>101</dtmfAvtPayload>
       <dtmfDbLevel>3</dtmfDbLevel>
       <dtmfOutofBand>avt</dtmfOutofBand>
        <alwaysUsePrimeLine>false</alwaysUsePrimeLine>
        <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
        <kpml>3</kpml>
        <stutterMsgWaiting>1</stutterMsgWaiting>
        <callStats>true</callStats>
        <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
        <disableLocalSpeedDialConfig>true</disableLocalSpeedDialConfig>
        <startMediaPort>10100</startMediaPort>
        <stopMediaPort>10300</stopMediaPort>
        <voipControlPort>5060</voipControlPort>
        <dscpForAudio>184</dscpForAudio>
        <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
        <dialTemplate>dialplan.xml</dialTemplate>
         <phoneLabel>Cisco</phoneLabel>
          <natReceivedProcessing>false</natReceivedProcessing>
          <natEnabled>false</natEnabled>
          <natAddress></natAddress>
        <sipLines>
          <line button="1">
            <featureID>9</featureID>
            <featureLabel>672 L1</featureLabel>
            <proxy>77.243.103.107</proxy>
            <port>5060</port>
            <name>672</name>
            <displayName>672</displayName>
            <autoAnswer>
              <autoAnswerEnabled>2</autoAnswerEnabled>
            </autoAnswer>
            <callWaiting>3</callWaiting>
            <authName>672</authName>
            <authPassword>************</authPassword>
            <sharedLine>false</sharedLine>
            <messageWaitingLampPolicy>3</messageWaitingLampPolicy>
            <messagesNumber></messagesNumber>
            <ringSettingIdle>4</ringSettingIdle>
            <ringSettingActive>5</ringSettingActive>
            <contact>$ACCOUNT</contact>
            <forwardCallInfoDisplay>
              <callerName>true</callerName>
              <callerNumber>false</callerNumber>
              <redirectedNumber>false</redirectedNumber>
              <dialedNumber>true</dialedNumber>
            </forwardCallInfoDisplay>
          </line>
          <line button="2">
          <featureID></featureID>
          <featureLabel></featureLabel>
          <speedDialNumber></speedDialNumber>
          </line>
        </sipLines>
    </sipProfile>
</device>

XMLDefault.cnf.xml:

<Default>
    <callManagerGroup>
        <members>
            <member  priority="0">
                <callManager>
                    <ports>
                        <ethernetPhonePort>2000</ethernetPhonePort>
                    </ports>
                    <processNodeName>192.168.100.113</processNodeName>
                </callManager>
            </member>
        </members>
    </callManagerGroup>

 <loadInformation6  model="IP Phone 7910"></loadInformation6>
    <loadInformation124  model="Addon 7914"></loadInformation124>
    <loadInformation9  model="IP Phone 7935"></loadInformation9>
    <loadInformation8  model="IP Phone 7940"></loadInformation8>
    <loadInformation7  model="IP Phone 7960"></loadInformation7>
    <loadInformation20000  model="IP Phone 7905"></loadInformation20000>
    <loadInformation30008  model="IP Phone 7902"></loadInformation30008>
    <loadInformation30007  model="IP Phone 7912"></loadInformation30007>
   <loadInformation434  model="IP Phone 7942">SIP42.8-5-4S</loadInformation434>
</Default>

и пустой файл: CTLSEPB8BEBF22BE05.tlv

 

🙂

После всего этого, телефон восстановился.

Предстоит еще обновить прошивку с 8.5.2 до минимум 8.5.4 (для благополучно работы Cisco 7942 с Asterisk 1.4.39 у нас в конторе). Но это уже другая история.

 

Debian sources.list

# cat /etc/apt/sources.list

# Main Debian mirror
deb http://mirror.yandex.ru/debian/ squeeze main contrib non-free
#deb-src http://mirror.yandex.ru/debian/ squeeze main contrib non-free

# Security fixes
deb http://mirror.yandex.ru/debian-security/ squeeze/updates main contrib non-free
#deb-src http://mirror.yandex.ru/debian-security/ squeeze/updates main contrib non-free
# Debian Backports.org repo
deb http://mirror.yandex.ru/backports.org/ squeeze-backports main contrib non-free

# Debian multimedia archive
deb http://mirror.yandex.ru/debian-multimedia/ squeeze main

# Opera
deb http://mirror.yandex.ru/debian-opera/ squeeze non-free

# Opera Beta
#deb http://mirror.yandex.ru/debian-opera-beta/ squeeze non-free

# VirtualBox
#deb http://mirror.yandex.ru/debian-virtualbox/ squeeze non-free

# Google progs repo
#deb http://dl.google.com/linux/deb/ squeeze non-free

# I-rs openoffice repo
deb http://download.i-rs.ru/pub/openoffice/debian/ ./

# Local repository
# deb file:/var/localrepository/ squeeze main
# For nvidia drivers
#deb http://ftp.ru.debian.org/debian/ sid non-free

В Debian 5 используется имя дистрибутива lenny, в Debian 6 используется squeeze.

Обновление до версии Debian 6.0

One rather old laptop and one server were the test objects for this howto. Both systems do not have any RAID devices and use a simple partition scheme from a default basic Lenny install. If your setup deviates much from this, it’s highly recommended to read all details of the Debian Release Notes before you continue. Be warned. All commands are run as root and Debian recommends to use apt-get for the Squeeze upgrade process.

As with all upgrades, begin with a backup of your critical data, and that will be the users data in /home/your-users but I would also back up the content of all configurations files. The latter can quickly be archived:

tar -czvf host.etc.tar.gz /etc

Move your files for safe storage on a backup drive.

Edit your Apt source list file

To prepare for the installer, we need to get to a point where the package system is in a clean state. Move the preferences file from the directory if used. If you have a very complicated Debian source file, I would recommend that this is simplified to near the original install.

Open up a command line editor and reduce /etc/apt/source.list to something similar to only:

deb http://ftp.se.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.se.debian.org/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Naturally your country code is likely to be different from mine se.

Update the packages for Lenny
With a few commands we will make sure that the existing package system is in good shape before the system is upgraded to Squeeze.

apt-get update

Ready for first upgrade:

apt-get upgrade

Follow this with:

apt-get dist-upgrade

Check that no packages are on hold or in any half installed state

The system usually contains many many packages, and before the real upgrade stage we must fix such problem packages.

Ensure that we do not have any packages on hold with:

dpkg --audit
dpkg --get-selections | grep hold

No packages can be on hold.

For the final go ahead test use:

aptitude

Press g and the list shows which packages need your attention. Fix any packages in the action list, until the message says:

No packages are scheduled to be installed, removed or upgraded

Only then you are done and ready to pass this point.

Update the source list for Squeeze
Update once more the /etc/apt/sources.list:

deb http://ftp.se.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.se.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

and at the command line type:

apt-get update

Squeeze upgrade in two careful steps

It’s recommenced to use a two stage upgrade approach with kernel, udev and the preparation for grub2. After the first completed the full distribution upgrade is performed. Start with the upgrade like so:

apt-get upgrade

Now to the kernel; we need to find your flavor, i.e. the exact version numbers and architecture and install it with:

uname -r
apt-get install linux-image-2.6.26-2-amd64

If the system is old like my laptop it would install with:

apt-get install linux-image-2.6.26-2-686

Prepare grub2 and udev for the new system:

update-grub
apt-get install udev

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

http://linux.koolsolutions.com/2009/05/11/tip-debian-linux-kernel-firmware-issues-ethernet-drivers-missing/

Once previous steps have completed, it’s time to restart the system:

reboot

Almost there

When the system has restarted, continue with the full upgrade phase:

apt-get dist-upgrade

Starting the system with the first menu item shows if grub2 works properly, if so run:

upgrade-from-grub-legacy

which will install grub2 in the Master Boot Record (MBR) on the disk.

Further information are found on Debian main site.

S.M.A.R.T.

Какие проблемы позволяет выявить эта технология:

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

Установка:

sudo apt-get install smartmontools

smartctl — Control and Monitor Utility for SMART Disks.

Поддерживает многие ATA-3 и более поздние ATA, IDE, SATA и SCSI-3 диски.

smartd — демон, пытается включить SMART monitoring на ATA-устройствах (аналогично smartctl -s on) и будет опрашивать устройства каждые 30 минут, фиксирует ошибки дисков и изменения атрибутов через syslog-интерфейс.

Логи по-умолчанию найти можно в /var/log/messages.

В дополнение к логированию в файл, smartd может быть сконфигурирован для отсылки предупреждений на email, в случае обнаружения проблемы.

Выясняем, поддерживает ли диск SMART.

# smartctl -i /dev/hda

Включаем SMART, если выключен.

# smartctl -s /dev/hda

Для получения всей информации о диске:

# smartctl --all /dev/hda
smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.9 family
Device Model:     ST3802110A
Serial Number:    5LR3YW4N
Firmware Version: 3.AAE
User Capacity:    80,026,361,856 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Thu Jul  1 02:58:14 2010 MSD
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   119   097   006    Pre-fail  Always       -       207323748
  3 Spin_Up_Time            0x0003   099   099   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       192
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   087   060   030    Pre-fail  Always       -       473627314
  9 Power_On_Hours          0x0032   079   079   000    Old_age   Always       -       19192
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       478
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   057   048   045    Old_age   Always       -       43 (Lifetime Min/Max 35/44)
194 Temperature_Celsius     0x0022   043   052   000    Old_age   Always       -       43 (0 14 0 0)
195 Hardware_ECC_Recovered  0x001a   053   046   000    Old_age   Always       -       173144036
197 Current_Pending_Sector  0x0012   001   001   000    Old_age   Always       -       4294967295
198 Offline_Uncorrectable   0x0010   001   001   000    Old_age   Offline      -       4294967295
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 TA_Increase_Count       0x0032   100   253   000    Old_age   Always       -       0

Описание параметров таблицы smartctl:

RAW_VALUE — Каждый атрибут имеет raw value 6-ти байтовое значение
VALUE — одно байтовое значение усредненное.

Например в случае параметра «Temperature_Celsius» raw value хранит температуру диска (например 43 градуса)+ минимальную и максимальную температуру, при которой сохраняется работоспособность диска (например 33 и 45 градуса).

Формат raw data определяется производителем и не описан в стандарте. Firmware диска конвертирует raw value в normalized value в диапазоне от 1 до 253. Если это нормализованное значение меньше или равно threshold (THRESH), атрибут считается failed и отображается в столбце WHEN_FAILED. Если этот столбец пуст, все атрибуты в норме.

Минимальное (WORST) нормализованное значение тоже показано;
Это минимальное значение которое достигалось с момента включения SMART на диске.

TYPE — существует 2 типа атрибутов:

Критичные атрибуты: (Pre-fail)

Некритичные атрибуты: (Old_age) (величина value отведенная вендором до наработки на отказ (ресурс)).

Если VALUE стало меньше THRESH в случае Pre-fail атрибута — существует большая вероятность, что диск вылетит в ближайшие 24 часа.

Если VALUE стало меньше THRESH в случае Old_age атрибута — существует большая вероятность, что диск вылетит т.к. выработан ресурс. Вот только когда — науке это неизвестно.

Названия/значения атрибутов и интерпретация raw values не определена никаким стандартом. Иногда различные производители используют одинаковый Attribute ID для различных целей. Поэтому интерпретация специфических атрибутов smartctl может быть изменена опцией -v.

Уточнение: если возникли проблемы с SATA дисками — проверьте версию smartctl: для нормальной работы нужна последняя версия, например 5.38 или 5.39.

Демон smartd:

Редактируем /etc/smartd.conf

По-умолчанию там только одна опция DEVICESCAN
Рекомендуется закомментировать ее и просто перечислить список устройств, которые мы хотим мониторить.

# /etc/smartd.conf config file
/dev/hda -S on -o on -a -I 194 -m 891rpm@gmailcom
/dev/hda устройство, которое мы собираемся мониторить
-o включает автоматическое off-line тестирование
-S включает автозапись атрибутов
-m за которой следует e-mail указывает куда warning сообщения отсылать
-a указывает smartd мониторить все SMART параметры диска

smartd по умолчанию фиксирует изменение значений всех атрибутов.

Директива -I 194 означает игнорировать атрибут #194, (т.е. температуру), т.к. температура диска часто меняется и нет смысла ее логировать.

# /etc/init.d/smartd start
# rc-update add smartd default

Описание параметров:

Каждый атрибут имеет величину — Value.

Value Изменяется в диапазоне от 0 до 255 (задается производителем).

Низкое значение говорит о быстрой деградации диска или о возможном скором сбое. т.е. чем выше значение Value атрибута, тем лучше.

Raw Value — это значение атрибута во внутреннем формате производителя значение малоинформативно для всех кроме сервисманов.

Threshold. — минимальное возможное значение атрибута, при котором гарантируется безотказная работа накопителя.

При Значении атрибута меньше Threshold очень вероятен сбой в работе или полный отказ.

Атрибуты бывают критически важными (Pre-fail) и некритически важными (Old_age).

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

Критичные атрибуты:

  • Raw Read Error Rate — частота ошибок при чтении данных с диска, происхождение которых обусловлено аппаратной частью диска.
  • Spin Up Time — время раскрутки пакета дисков из состояния покоя до рабочей скорости. При расчете нормализованного значения (Value) практическое время сравнивается с некоторой эталонной величиной, установленной на заводе. Не ухудшающееся немаксимальное значение при Spin Up Retry Count Value = max (Raw равном 0) не говорит ни о чем плохом. Отличие времени от эталонного может быть вызвано рядом причин, например просадка по вольтажу блока питания.
  • Spin Up Retry Count — число повторных попыток раскрутки дисков до рабочей скорости, в случае если первая попытка была неудачной. Ненулевое значение Raw (соответственно немаксимальное Value) свидетельствует о проблемах в механической части накопителя.
  • Seek Error Rate — частота ошибок при позиционировании блока головок. Высокое значение Raw свидетельствует о наличии проблем, которыми могут являться повреждение сервометок, чрезмерное термическое расширение дисков, механические проблемы в блоке позиционирования и др. Постоянное высокое значение Value говорит о том, что все хорошо.
  • Reallocated Sector Count — число операций переназначения секторов. SMART в современных дисках способен произвести анализ сектора на стабильность работы «на лету» и в случае признания его сбойным, произвести его переназначение.

Некритичные атрибуты:

  • Start/Stop Count — полное число запусков/остановов шпинделя. Гарантировано мотор диска способен перенести лишь определенное число включений/выключений. Это значение выбирается в качестве Treshold. Первые модели дисков со скоростью вращения 7200 оборотов/мин имели ненадежный двигатель, могли перенести лишь небольшое их число и быстро выходили из строя.
  • Power On Hours — число часов проведенных во включенном состоянии. В качестве порогового значения для него выбирается паспортное время наработки на отказ (MTBF). Обычно величина MTBF огромна, и маловероятно, что этот параметр достигнет критического порога. Но даже в этом случае выход из строя диска совершенно не обязателен.
  • Drive Power Cycle Count — количество полных циклов включения-выключения диска. По этому и предыдущему атрибуту можно оценить, например, сколько использовался диск до покупки.
  • Temperatue — Здесь хранятся показания встроенного термодатчика. Температура имеет огромное влияние на срок службы диска (даже если она находится в допустимых пределах). Вернее имеет влияние не на срок службы диска а на частоту возникновения некоторых типов ошибок, которые влияют на срок службы.
  • Current Pending Sector Count — Число секторов, являющихся кандидатами на замену. Они не были еще определенны как плохие, но считывание их отличается от чтения стабильного сектора, так называемые подозрительные или нестабильные сектора.
  • Uncorrectable Sector Count — число ошибок при обращении к сектору, которые не были скорректированы. Возможными причинами возникновения могут быть сбои механики или порча поверхности.
  • UDMA CRC Error Rate — число ошибок, возникающих при передаче данных по внешнему интерфейсу. Могут быть вызваны некачественными кабелями, нештатными режимами работы.
  • Write Error Rate — показывает частоту ошибок происходящих при записи на диск. Может служить показателем качества поверхности и механики накопителя.

В SMART III появилась функция, позволяющая прозрачно для пользователя переназначать BAD сектора.

Работает механизм следующим образом: при неустойчивом чтении сектора, или же ошибки его чтения, SMART заносит его в список нестабильных и увеличит их счетчик (Current Pending Sector Count). Если при повторном обращении сектор будет прочитан без проблем, он будет выброшен из этого списка. Если же нет, то при представившейся возможности — при отсутствии обращений к диску, диск начнет самостоятельную проверку поверхности, в первую очередь подозрительных секторов. Если сектор будет признан сбойным, то он будет переназначен на сектор из резервной поверхности (соответственно RSC увеличиться). Такое фоновое переназначение приводит к тому, что на современных винчестерах сбойные секторы практически никогда не видны при проверке поверхности сервисными программами. В тоже время, при большом числе плохих секторов их переназначение не может происходить до бесконечности. Первый ограничитель очевиден — это объем резервной поверхности.

У современных винчестеров есть два дефект-листа P-list (Primary, заводской) и G-list (Growth, формируется непосредственно во время эксплуатации). И при большом числе переназначений может оказаться так, что в G-list не оказывается места для записи о новом переназначении. Эта ситуация может быть выявлена по высокому показателю переназначенных секторов в SMART.

Ссылки:

http://ksimute.trancom.ru/smart-hdd.shtml
http://www.linuxjournal.com/article/6983
http://smartmontools.sourceforge.net/
http://www.3dnews.ru/storage/smart/