FastNetMon

Wednesday 29 September 2010

Intel Core i7 980X vs Intel Xeon X5680

Судя по одному авторитетному сайту, фактически десктопный i7 является быстрее, чем серверный Xeon. Но при этом Xeon стоит в полтора раза дороже $1,699.50 против $999. Почему же так? Разумеется, ноги у этой разницы растут из ниши, в которой каждый из процессоров используются. Для i7 - это, грубо говоря, десктоп, а для Xeon - критичные бизнес приложения и очень надежные платформы.

Но почему же Xeon дороже при якобы меньшей мощности (даже не оговариваясь про особенности синтетических тестов, он быстрее)? Сразу оговорюсь, что все ниже описанное является моим рассуждением и может быть ошибочно, если у Вас больше знаний в сабже, то, пожалуйста, исправьте меня.

Первое и, на мой взгляд, самое основное преимущество Xeon - это возможность установки 2х и более процессоров на материнскую плату, как я понимаю, это требует определенных возможностей как со стороны чипсета, так и с процессора. Цитата из wiki, впрочем, доказывает мои догадки:
The Xeon is a brand of multiprocessing- or multi-socket-capable x86 microprocessors from Intel Corporation targeted at the non-consumer server, workstation and embedded system markets.

К преимуществам Xeon также стоит отнести память с коррекцией ошибок - ECC (я не буду спорить, что это прерогатива лишь серверных Xeon платформ и что оно так уж завязано на процессор, но десктоп плат с поддержкой ECC я не встречал давно) и поддержку SAS (аналогично предыдущем). Также, в процессе лазания по wiki обнаружил еще отличие - Xeon поддерживает больший размер адресуемой памяти, чем i7. Также у Xeon больший размер кэша 3го уровня. Также Xeon может работать с более быстрой памятью 1333 против 1066. Итого, преимущество фактически одно - возможность установки более, чем одного процессора.

В процессе изучения англоязычной вики наткнулся на интереснейший факт, у обоих этих процессоров схожее ядро, оба они представляют собой модификации ядра Westmere-EP (Westmere-EP).

Резюмируя, повторюсь, что это лишь мои рассуждения и не стоит принимать все на веру :) У кого есть факты, прошу в комменты, буду очень рад услышать.

Update: более серьезные поиски привели к тому, что у Xeon 5680 две шины QPI, одна для обычного ввода/вывода, а вторая для подключения к соседнему процессору, почерпнуто из: http://www.pcguide.com/vb/showthread.php?t=74132

Update: по информации с фан сайта Intel, две основные фишки Xeon 5600 (2xQPI и поддержка более быстрой памяти) просто-напросто заблокированы у i7 во избежание, так что архитектурные отличия кристаллов ничтожны, а вот в плане маркетинга меж ними пропасть.

Zabbix: Passive checks и Active checks

У системы мониторинга Zabbix есть два типа проверок - Passive checks и Active checks. На мой взгляд, названы они нелогично и моя их расшифровка "по наитию" оказалась неверной, о чем мне даже немного стыдно :)

Passive check

Это простой запрос некоторых данных у агента. Заббикс сервер (или прокси) запорашивает определенные данные (например, нагрузку на процессор, количество свободной памяти, число процессов Апача и проч.) у Агента и Агент сообщает результат на сервер (я так понимаю, это делается мгновенно).

Вот пример обмена данными при такой проверке:
1. Сервер открывает TCP соединение к Агенту
2. Сервер шлет агенту запрос "agent.ping\n"
3. Агент читает запрос и отвечает серверу следующее "
1"
4. Сервер обрабатывает полученные данные и извлекает из них ответ агента, в нашем случае это '1'

Active checks

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

[продолжение следует]

Источник: http://www.zabbix.com/documentation/1.8/protocols/agent

SUSE Studio - собери Linux дистрибутив для себя через веб-интерфейс

http://susestudio.com/

Хотелось бы видеть тоже самое, но с возможностью сборки OpenVZ имаджей и полной поддержкой CentOS и Debian.

Update:
Вот такая штука для Debian, Ubuntu: https://projects.lumentica.com/projects/reconstructor/wiki

Distributed Nagios eXecutorEnterprise

Масштабирование Nagios на тысячи узлов: http://dnx.sourceforge.net/

Sunday 26 September 2010

Online проверка орфографии

Вот от Яндекса: http://webmaster.yandex.ru/spellcheck.xml

А вот еще ресурс: http://orthography.morphology.ru/

Тест драйв - обновление Debian с ISPManager Lite с Lenny до Squeeze

Итак, имеем Debian 5 Lenny забитый веб-софтом и панелькой ISPManager Lite. Требуется обновить его до следующей стабильной версии Debian - Squeeze (честно говоря, она еще не совсем стабильная, а станет ей где-то в декабре). Список софта следующий: Apache 2.2, Postfix, quota, php, Proftpd, dovecot, Bind, MySQL, PhpMyAdmin, Awstats, SquirrelMail, Nginx, mod_fcgid.

Итак, приступаем к апдейту - он подробно описан в моем другом посте http://phpsuxx.blogspot.com/2009/03/debian-4-etch-debian-5-lenny.html за тем исключением, что менять нужно не etch на lenny, а lenny на squeeze.

В процессе apt-get upgrade будут показаны следующие уведомления.

"Services to restart for PAM library upgrade", на него отвечаем утвердительно.

Также будет вопрос "Configuration file `/etc/console-tools/config' Modified (by you or by a script) since installation" на него отвечаем Y.

Еще будет "Configuration file `/etc/sysctl.conf' Modified (by you or by a script) since installation.", также отвечаем Y.

На вопрос "Configuration file `/etc/mime.types' Modified (by you or by a script) since installation." ответ тоже Y.

На вопрос "Configuration file `/etc/cron.d/mdadm Modified (by you or by a script) since installation." также ответ Y.

На вопрос "Configuration file `/etc/mysql/my.cnf' Modified (by you or by a script) since installation." отвечаем Y, если нету продвинутого тюнинга конфига MySQL, в противном случае просто жмем Enter.

В процессе apt-get dist-upgrade будут показаны следующие уведомления.

На вопрос "Configuring dash Use dash as the default system shell (/bin/sh)?" отвечаем Yes (этот вопрос в связи с тем, что стандартный интерпретатор в Squeeze теперь dash).

Далее будет задан вопрос про grub2: "GRUB 0.97, the Legacy version of GNU GRUB, is from now on considered a deprecated option. Your system is now being upgraded to GRUB 2.", соглашаемся.

Далее будет вопрос "Configuring grub-pc Chainload from menu.lst?" - это вопрос на тему, загрузить ли данные об операционных системах из старого grub, соглашаемся на это.

Далее будет еще вопрос "The following Linux command line was extracted from /etc/default/grub or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is correct, and modify it if necessary. ", на него смело отвечаем Ok, если выдается пустая строчка ввода.

Теперь будет вопрос "ProFTPd configuration Run proftpd: standalone", соглашаемся с вариантом standalone.

Теперь вопрос про "Configuring phpmyadmin Please choose the web server that should be automatically configured to run phpMyAdmin.", на него просто отвечаем согласием не выбирая никакого веб-сервера в списке - потом придется его настроить отдельно в ISPManager.

Еще вопрос "Postfix Configuration, General type of mail configuration" выбираем в списке " No configuration" и соглашаемся.

Далее вопрос "Services to restart for GNU libc library upgrade" соглашаемся на это.

Далее у меня наступил EPIC FAIL.

Errors were encountered while processing:
/var/cache/apt/archives/udev_160-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

И при попытке повторить apt-get dist-upgrade был постигнут очередным:
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
insserv : Breaks: sysv-rc (< 2.87dsf-3) but 2.86.ds1-61 is installed E: Unmet dependencies. Try using -f.









Ну что же, пробуем сделать, как говорит инсталлятор:
apt-get install -f

Теперь мне была выдана ошибка:
Configuring sysv-rc Unable to migrate to dependency-based boot system Tests have determined that problems in the boot system exist which prevent migration to dependency-based boot sequencing: insserv: There is a loop between service mountall and checkfs if started, insserv: loop involving service checkfs at depth 9, insserv: loop involving service lvm2 at depth 8, insserv: loop involving service mountall at depth 10, insserv: There is a loop between service mountall and checkfs if started, insserv: loop involving service mdadm at depth 11, insserv: loop involving service networking at depth 16, insserv: loop involving service rsyslog at depth 16, insserv: loop involving service mountall-bootclean at depth 16, If the reported problem is a local modification, it needs to be fixed manually. If it's a bug in the package, it should be reported to the BTS and fixed in the package. See http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot for more information about how to fix the problems preventing migration. To reattempt the migration process after the problems have been fixed, run "dpkg-reconfigure sysv-rc".

С этой ошибкой приходится лишь соглашаться и думать потом, как ее разрулить.

Далее появляется новый герой, повествующий о том, что имена дисковых устройств могут поменяться:
Configuring linux-base The new Linux kernel version provides different drivers for some PATA (IDE) controllers. The names of some hard disk, CD-ROM, and tape devices may change. It is now recommended to identify disk devices in configuration files by label or UUID (unique identifier) rather than by device name, which will work with both old and new kernel versions.If you choose to not update the system configuration automatically, you must update device IDs yourself before the next system reboot or the system may become unbootable. Update disk device IDs in system configuration?

Тут я предлагаю пойти на риск и ответить Yes.

Далее получаем отчет о том, что имена для CD устройств были изменены:
Configuring linux-base

These configuration files will be updated:
/etc/udev/rules.d/70-persistent-cd.rules

The device IDs will be changed as follows:

+ PATH=pci-0000:00:01.1-scsi-1:0:0:0
+ PATH=pci-0000:00:07.1-scsi-0:0:0:0

Apply configuration changes to disk device IDs?

Соглашаемся с заменой.

Далее будет еще уведомление, что один из конфиг-файлов по-прежнему содержит устаревшее имя:
Configuring linux-base

Configuration files still contain deprecated device names
The following configuration files still use some device names that may change when using the new kernel: /etc/initramfs-tools/conf.d/resume: /dev/sda1

Далее вопрос "Configuration file `/etc/ntp.conf' Modified (by you or by a script) since installation.", отвечаем Y.

Далее "Configuration file /etc/ssh/ssh_config", также отвечаем Y.

Далее вопрос " A new version of configuration file /etc/dovecot/dovecot.conf is available, but the version installed currently has been locally modified.", тут нужно выбрать "keep the local version currently installed" и подтвердить.

Далее вопрос "Configuration file `/etc/apache2/ports.conf' Modified (by you or by a script) since installation." отвечаем Y.

Далее вопрос "Configuration file `/etc/apache2/apache2.conf' Modified (by you or by a script) since installation.", отвечаем на него N, иначе нам сотрет все сайты из конфига Апача.

Далее запрос про PHP: "A new version of configuration file /etc/php5/apache2/php.ini is available, but the version installed currently has been locally modified.", тут я рекомендую " install the package maintainer's version ", так как в любом случае PHP придется реконфигурировать почти полностью и заново ставить все расширения, так как изменилась версия c 5.2 до 5.3.

Все, теперь мой apt-get install -f кончился и я повторно запускаю apt-get dist-upgrade.

И повторно:
/var/cache/apt/archives/udev_160-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

И повторно
apt-get install -f

Вопрос "Configuration file `/etc/nginx/nginx.conf' Modified (by you or by a script) since installation." отвечаем N, иначе сотрет все виртуальные хосты.

Далее "The phpmyadmin package must have a database installed and configured before it can be used. This can be optionally handled with dbconfig-common." отвечаем N (я так и не понял, про что спрашивал этот скрипт).

Повторяем
apt-get dist-upgrade

Но теперь получаем явный посыл от udev:
apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
udev
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/479kB of archives.
After this operation, 815kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Preconfiguring packages ...
(Reading database ... 45181 files and directories currently installed.)
Preparing to replace udev 0.125-7+lenny3 (using .../archives/udev_160-1_amd64.deb) ...


Since release 150, udev requires that support for the CONFIG_SYSFS_DEPRECATED
feature is disabled in the running kernel.

Please upgrade your kernel before or while upgrading udev.

AT YOUR OWN RISK, you can force the installation of this version of udev
WHICH DOES NOT WORK WITH YOUR RUNNING KERNEL AND WILL BREAK YOUR SYSTEM
AT THE NEXT REBOOT by creating the /etc/udev/kernel-upgrade file.
There is always a safer way to upgrade, do not try this unless you
understand what you are doing!


dpkg: error processing /var/cache/apt/archives/udev_160-1_amd64.deb (--unpack):
subprocess new pre-installation script returned error exit status 1
configured to not write apport reports
Errors were encountered while processing:
/var/cache/apt/archives/udev_160-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
test:~#

Иными словами, новы udev требует, чтобы опция ядра CONFIG_SYSFS_DEPRECATED была отключена, но в Debian Lenny она еще включена:
cat /boot/config-`uname -r` | egrep 'CONFIG_SYSFS_DEPRECATED'
CONFIG_SYSFS_DEPRECATED=y

Итак, пробуем перезагрузиться:
shutdown -r now

После перезагрузки сервер поднялся, ядро встало новое:
uname -a
Linux test.ru 2.6.32-5-amd64 #1 SMP Fri Sep 17 21:50:19 UTC 2010 x86_64 GNU/Linux

И в новом ядре данная опция отключена, как и требует новый udev:
cat /boot/config-`uname -r` | grep CONFIG_SYSFS_DEPRECATED
# CONFIG_SYSFS_DEPRECATED_V2 is not set

Заканчиваем обновление:
apt-get dist-upgrade

И еще раз перезагружаемся для проверки работы udev:
shutdown -r now

Все, после перезагрузки проверяем версию дистрибутива:
cat /etc/debian_version
squeeze/sid

Починка ISPManager

vi /etc/apache2/ports.conf

И там заменяем все 80 на 8080 и после этого перезапускаем Апача и Nginx:
/etc/init.d/apache2 restart
/etc/init.d/nginx restart

Обновляем MySQL до версии 5.1

Стандартным путем MySQL не обновился, поэтому нужно это сделать вручную (инсталлятор удалит старый MySQL 5.0 и все связанные с ним клиентские библиотеки):
apt-get install -y mysql-server-5.1

Теперь проверяем работу СУБД перезапуском:
/etc/init.d/mysql restart

Заканчиваем миграцию на новые версии grub и sysv-rc

В первую очередь пробуем включить dependency based boot system http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot, которая в процессе инсталляции отказалась включаться автоматически, для этого даем команду:
dpkg-reconfigure sysv-rc

И при запросе на конвертацию ответить Yes, после этого конвертация должна быть выполнена и на консоль должно быть выдано сообщение "success: Enabled dependency based boot system.".

Теперь нужно закончить миграцию на grub2 (эта команда выцеплена из конфига /boot/grub/menu.lst):
upgrade-from-grub-legacy

В открывшемся окошке выбираем диски, на которые нужно поставить grub2, у меня в системе стоит Soft Raid 5 из дисков sda, sdb и sdc, поэтому в моем случае необходимо выбрать в списке sda, sdb и sdc соответственно и нажать "Ok".

После этого grub2 будет установлен на указанные диски (к слову, ставится он как и grub1: grub-install /dev/sdN), а grub1 будет удален из системы:
upgrade-from-grub-legacy
0
Installation finished. No error reported.
Installation finished. No error reported.
Installation finished. No error reported.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
Found linux image: /boot/vmlinuz-2.6.26-2-amd64
Found initrd image: /boot/initrd.img-2.6.26-2-amd64
No volume groups found
done

GRUB Legacy has been removed, but its configuration files have been preserved,
since this script cannot determine if they contain valuable information. If
you would like to remove the configuration files as well, use the following
command:

rm -f /boot/grub/menu.lst*

Теперь можно удалить конфиг старого grub (а конфиг нового лежит по пути /boot/grub/grub.cfg):
rm -f /boot/grub/menu.lst*

Ну и теперь еще одна перезагрузка:
shutdown -r now

Conclusion
Ну что, господа системные администраторы, имеющие в распоряжении много машин на Lenny :) Готовьтесь к траблам, обновление очень геморное. Конечно, я искренне надеюсь, что к моменту релиза Squeeze часть проблем будет исправлена, но тем не менее изменения очень серьезные и их много, так что малой кровью тут не обойтись.

Из ключевых изменений в Debian Squeeze, которые надо знать перед миграцией:
1) Переход на grub2
2) Обновление udev, которое невозможно накатить находясь под ядром от Debian 5 Lenny (требуется перезагрузка, которая разбивает процесс обновления на два шага)
3) Переход на PHP 5.3.2
4) Переход на dash в качестве стандартного интерпретатора Bash
5) Переход на ядро 2.6.32-5.
6) Обновление в sysv-rc: dependency based boot system http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot
7) Переход на Perl 5.10.1
8) Переход на Python 2.6.6
9) Обновление nginx до 0.7.67
10) Обновление MySQL до 5.1
11) Теперь есть поддержка dkms.

Источник: http://www.debian.org/News/2010/20100806

Повышение безопасности ядра Linux

http://www.linux-sec.net/Kernel/

Debian-Wiki: must read для каждого пользователя этой замечательной ОС

Прошу: http://wiki.debian.org/FrontPage, там ну очень много полезной инфы.

Сборка модулей ядра посредством module-assistant на примере драйвера squashfs

Устанавливаем modult-assistant:
apt-get install -y module-assistant

Готовим m-a к работе, скачиваем исходники нужных нам ядер и все-все-все, что может потребоваться для сборки ядер:
m-a prepare

Обновляем данные об имеющихся пакетах (я не совсем понял, хранится ли список удаленно или нет):
m-a update

Запрашиваем весь список имеющихся пакетов:
m-a list

Или есть способ с более красивой выдачей (взят из Debian wiki):
m-a list | grep -E '^[^ ].*\(' | cut -d " " -f 1 | sort

Скачиваем, компилируем и устанавливаем в текущее ядро драйвер squashfs:
m-a auto-install squashfs

Или можно воспользовать укороченной версией команды:
m-a a-i squashfs

Теперь наш модуль появился в списке установленных (у module-assistant есть своего рода база данных по типу той, что есть у rpm / dpkg):
m-a list-installed

Вуаля, драйвер собран, теперь загружаем его:
modprobe squashfs

modinfo squashfs
filename: /lib/modules/2.6.26-2-amd64/kernel/fs/squashfs/squashfs.ko
license: GPL
author: Phillip Lougher
description: squashfs 3.3, a compressed read-only filesystem
depends: zlib_inflate
vermagic: 2.6.26-2-amd64 SMP mod_unload modversions

Еще стоит обратить внимание, что m-a не просто "кладет" модуль в папку модулей активного ядра, но и делает это "правильно", через deb пакет:
dpkg -l | grep squ | grep modul
ii squashfs-modules-2.6.26-2-amd64 1:3.3-7+2.6.26-25lenny1 Squash filesystem support for Debian Linux kernels

Содержимое .deb пакета, впрочем, сводится к паре файликов:
dpkg -L squashfs-modules-2.6.26-2-amd64
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/squashfs-modules-2.6.26-2-amd64
/usr/share/doc/squashfs-modules-2.6.26-2-amd64/copyright
/usr/share/doc/squashfs-modules-2.6.26-2-amd64/changelog.Debian.gz
/lib
/lib/modules
/lib/modules/2.6.26-2-amd64
/lib/modules/2.6.26-2-amd64/kernel
/lib/modules/2.6.26-2-amd64/kernel/fs
/lib/modules/2.6.26-2-amd64/kernel/fs/squashfs
/lib/modules/2.6.26-2-amd64/kernel/fs/squashfs/squashfs.ko

Итак, все отлично, модуль установлен и работает :) Но даст ли данная тулза автоматизацию, если ядро было обновлено через apt-get или вовсе было поставлено другое ядро (из репозитория, разумеется) ? Пока ответа на этот вопрос у меня нету, скорее всего, потребуется просто сделать a-i.

Источник: http://wiki.debian.org/ModuleAssistant

module-assistant: утилита для упрощения создания пакетов модулей ядра

Вот наткнулся на такую интересную штуку: http://packages.debian.org/lenny/module-assistant, которая сильно упрощает сборку модулей ядра в Debian: http://wiki.debian.org/ModuleAssistant

Что такое dkms?

DKMS is a framework designed to allow individual kernel modules to be upgraded without changing the whole kernel. It is also very easy to rebuild modules as you upgrade kernels.

http://pkg-dkms.alioth.debian.org/

Xen Dom0 постоянно неожиданно перезагружается на Debian 5 Lenny

Вот столкнулся с такой напастью - машина с Xen Dom0 на Debian 5 Lenny где-то раз несколько в месяц перезагружается без каких-либо ошибок в логах и продолжает работать корректно. И никак не могу понять, в чем причина. После недолгих поисков нашел, что Dom0 в случае ошибок Xen перезагружается автоматически. Как же его отучить это делать и научить оставаться в режиме "с кернел паником на экране"?

Очень просто, нужно для Xen прописать noreboot опцию ядра:
title Xen 3.1-1-i386 / Debian GNU/Linux, kernel 2.6.18-6-xen-686
root (hd0,0)
kernel /xen-3.1-1-i386.gz noreboot
module /vmlinuz-2.6.18-6-xen-686 root=/dev/foo ro console=tty0
module /initrd.img-2.6.18-6-xen-686

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

Источник: http://wiki.debian.org/Xen#dom0automaticreboots

Saturday 25 September 2010

Fatal error: Call to undefined function finfo_open() или установка fileinfo для PHP на Debian 5

Это дополнительное расширение и его нужно ставить из PECL:
apt-get install -y libmagic-dev libmagic1
cd /usr/src
pecl download fileinfo
tar -xf Fileinfo-1.0.4.tgz
cd Fileinfo-1.0.4
phpize
./configure
make
make install
echo 'extension="fileinfo.so"' > /etc/php5/conf.d/fileinfo.ini

Все, после этого проверяем, подключилось ли расширение:
php -m | grep file

Консольный torrent клиент - rtorrent

Встречайте, rtorrent!

На Debian ставится проще-простого:
apt-get install -y rtorrent screen

Запускать его стоит в screen, иначе все закачки прервутся после закрытия окна ssh:
screen
rtorrent rutrackerNNNN.torrent

Где, rutrackerNNNN.torrent - имя торрент-файла ранее загруженного в папку /root. После запуска закачка начнется автоматически. После того, как она закончится, rtorrent перейдет в режим раздачи и если у Вас нет лимитов трафика, то можно отключиться от ssh и позволить скачать с себя файлы другим :)

Краткая инструкция по эксплуатации:
CTRL+q # выйти

Безопасное использование mysqldump

http://blog.ronix.net.ua/2010/08/mysqldump-skryvaem-parametry.html?utm_source=rss&utm_medium=rss&utm_campaign=mysqldump-skryvaem-parametry

Wednesday 22 September 2010

Gmail priority inbox

И снова революционная фича и Гугла: http://mail.google.com/mail/help/priority-inbox.html

Подключили поддержку IPv6 первому VPS клиенту через tunnelbroker.net!

Ура! Возможно, в скором времени начнем подключать нэтив поддержку IPv6 даже для VPS :)

Update (22 сентября): и еще одному :)

Список OpenVZ Capabilities для VPS с описанием

Очень долго не мог загуглить сабж. Чисто случайно обнаружил PDF ку с их описанием (очень странно, что SwSoft овой доке за 2006 го они были описаны, а в Parallels овой за 2008 - нет).

chown If a process has this capability set on, it can change ownership on the files not belonging to it or belonging to another user. You have to set this capability on to allow the Virtual Private Server root user to change ownership on files and directories inside the VPS.
default: on

dac_override This capability allows to access files even if the permission is set to disable access. Normally leave this on to let the VPS root access files even if the permission does not allow it.
default: on

dac_read_search Overrides restrictions on reading and searching for files and directories. The explanation is almost the same as above with the sole exclusion that this capability does not override executable restrictions.
default: on

fowner Overrides restrictions on setting the S_ISUID and S_ISGID bits on a file requiring that the effective user ID and effective group ID of the process shall match the file owner ID.
default: on

fsetid Used to decide between falling back on the old suser() or fsuser().
default: on

kill Allows sending signals to processes owned by other users.
default: on

setgid Allows group ID manipulation and forged group IDs on socket
credentials passing.
default: on

setuid Allows user ID manipulation and forged user IDs on socket
credentials passing.
default: on

setpcap Transfer any capability in your permitted set to any process ID; remove any capability in your permitted set from any process
ID.
default: off

linux_immutable Allows the modification of the S_IMMUTABLE and S_APPEND file attributes. These attributes are implemented only for the EXT2FS and EXT3FS Linux file systems and, as such, this capability has no effect for Virtual Private Servers running on top of VZFS. However, if you bind mount a directory located on the EXT2FS or EXT3FS file system into a Virtual Private Server and revoke this capability, the root user inside the VPS will not be able to delete or truncate files with these attributes on.
default: on

net_bind_service Allows to bind to sockets with numbers below 1024.
default: on

net_broadcast Allows network broadcasting and multicast access.
default: on

net_admin Allows the administration of IP firewalls and accounting.
default: off

net_raw Allows to use the RAW and PACKET sockets.
default: on

ipc_lock Allows to lock shared memory segments and mlock/mlockall calls.
default: on

ipc_owner Overrides IPC ownership checks.
default: on

sys_module Insert and remove kernel modules. Be very careful with setting
this capability on for a Virtual Private Server; if a user has the
permission of inserting kernel modules, this user has essentially
full control over the Hardware Node.
default: off

sys_rawio Allows to create VZFS symlinks over VZFS.
default: off

sys_chroot Allows to use chroot().
default: on

sys_ptrace Allows to trace any process.
default: on

sys_pacct Allows to configure process accounting.
default: on

sys_admin In charge of many system administrator tasks such as swapping,
administering APM BIOS, and so on. Shall be set to off for
Virtual Private Servers.
default: off

sys_boot This capability currently has no effect on a VPS behaviour.
default: on

sys_nice Allows to raise priority and to set priority for other processes.
default: on

sys_resource Override resource limits (do not confuse with user
beancounters).
default: on

sys_time Allows to change the system time.
default: off

sys_tty_config Allows the configuration of TTY devices.
default: on

mknod Allows the privileged aspects of mknod().
default: on

lease Allows to take leases of files.
default: on

Источник: www.canadianwebhosting.com/documents/VzLinuxUG.pdf

Sunday 19 September 2010

Моя доступность

На несколько дней пропадаю из блога, не скучайте :)

Бизнес школа Сколково

Сабжект видел давно и сильно ужасался ценами (ага, 60 тысяч евро за курс обучения MBA), но выглядело вполне вкусно и интересно. Вот эль президенте в твоем твиттере пишет, что только-только был первый выпуск этой школы, а уважаемый all вторит, что школа эта продукт второсортный - ни в какие рейтинги MBA она не входит (по крайней мере в первые 50), а вот по цене уделывает чуть менее, чем всех - http://twitter.com/Don4a/status/24948644827

pbuilder-dist - инновационный способ массовой сборки большого числа deb пакетов

http://www.netfort.gr.jp/~dancer/software/pbuilder-doc/pbuilder-doc.html

Конструктор сайтов с поддержкой совместной работы

http://orbs.com/

Регистрация на сайте Hurricane Electric для получения IPv6 туннеля

1. Регистрируемся на сайте http://tunnelbroker.net/register.php
2. Логинимся
3. В левом блоке "User Functions" выбираем "Create Regular Tunnel"
4. Теперь вводим в поле ввода внешний IP своего сервера
5. Выбираем страну наиболее близкую к серверу для лучшей связи
6. Подтверждаем создание и в ответ получаем "O.K.: Your tunnel has been allocated"
7. Щелкаем по ссылке "Tunnel Details", там все детали нашей сети (обращаю внимание, что это полноценная IPv6 сеть, это не 6to4 адреса).

Все, теперь дело за малым, настроить тунеллирование.

А вот примеры настроек, который генерирует tunnelbroker для Линуксов.

Рекомендуемый вариант подключения:
ip tunnel add he-ipv6 mode sit remote 216.66.xx.xx local 78.46.yy.yy ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:xxxx:xxx::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr

Устаревший вариант:
ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::216.66.xxx.xxxx
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:xxxx:xxxx:xxx::2/64
route -A inet6 add ::/0 dev sit1

Доступ к IPv6 изнутри OpenVZ контейнера без поддержки IPv6 провайдером

Итак, у нас есть OpenVZ VPS, тяга ко всему новому и ленивый хостер, который ну никак не хочет подключать нэтивную поддержку IPv6, итак, что делать? Упросить хостера включить две фичи для контейнера, а длее действовать самому :)

Для начала для контейнера необходимо включить (это требуется сделать Вашему хостеру, как его упросить - решать Вам) поддержку sit (механизм инкапсуляции IPv6 пакетов в IPv4), на уровне ноды это делается так:
vzctl set 106 --features sit:on --save

А также поддержку опции net_admin:
vzctl set 106 --capability net_admin:on --save

После этого необходимо перезагрузить контейнер:
vzctl restart 106

После этого внутри контейнера появится новый интерфейс sit:
ifconfig sit
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Теперь просто настраиваем его по инструкции из моего блога: http://phpsuxx.blogspot.com/2010/09/ipv6-debian-6to4.html (разве что с поправкой, что echo "ipv6" >> /etc/modules; modprobe ipv6 делать не нужно!)

Если делать по моему мануалу и забыть подключить net_admin, то получим нечто вот такое:
/etc/init.d/networking restart
Reconfiguring network interfaces...if-up.d/mountnfs[venet0]: waiting for interface venet0:0 before doing NFS mounts (warning).
if-up.d/mountnfs[venet0]: waiting for interface sit0 before doing NFS mounts (warning).
if-up.d/mountnfs[venet0:0]: waiting for interface sit0 before doing NFS mounts (warning).
SIOCADDRT: Operation not permitted
Failed to bring up sit0.
done.

А если все нормально, то вуаля:
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8004::6a) 56 data bytes
64 bytes from 2a00:1450:8004::6a: icmp_seq=1 ttl=56 time=60.0 ms
64 bytes from 2a00:1450:8004::6a: icmp_seq=2 ttl=56 time=59.8 ms
64 bytes from 2a00:1450:8004::6a: icmp_seq=3 ttl=56 time=50.6 ms
64 bytes from 2a00:1450:8004::6a: icmp_seq=4 ttl=56 time=50.1 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 50.118/55.155/60.026/4.784 ms

У мануала имеется баг - дело в том, что OpenVZ с ноды при каждой перезагрузке переписывает /etc/network/interfaces заново, таким образом всем наши старания оттуда будут тщательно стерты (если пробовать добавлять конфигурацию в /etc/network/interfaces.template, то ничего не происходит, а разбираться влом).

Настройка IPv6 на Debian узле посредством 6to4 (не требуется поддержка хостера)

Как я уже говорил ранее, есть такая прекрасная технология как 6to4, которая позволяет подключаться к IPv6 сетям даже в том случае, если провайдер/хостер не имеет поддержки IPv6 вообще и все их возможности ограничены IPv4.

Эта технология отличается тем, что настроить ее очень легко. Давайте рассмотрим это на примере выделенного сервера на Debian 5 Lenny.

Сейчас нам нужен наш локальный внешний айпи, допустим, это 188.40.135.23, теперь для него необходимо узнать IPv6 6to4 адрес, соответствующий ему, для этого воспользуемся инструкцией. В результате работа утилиты получился префикс: 2002:bc28:8717::, то есть, первый IP будет: 2002:bc28:8717::1

Добавляем загрузку поддержки IPv6 при запуске системы:
echo "ipv6" >> /etc/modules; modprobe ipv6

Открываем конфиг сети:
vi /etc/network/interfaces

И вписываем там следующее:
auto sit0
iface sit0 inet6 static
address 2002:bc28:8717::1 # 6to4 address for our IPv4
netmask 16
gateway ::192.88.99.1

Перезапускаем сеть:
/etc/init.d/networking restart

Вуаля, мы в IPv6 Интернете:
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8004::67) 56 data bytes
64 bytes from 2a00:1450:8004::67: icmp_seq=1 ttl=56 time=58.4 ms
64 bytes from 2a00:1450:8004::67: icmp_seq=2 ttl=56 time=58.7 ms
64 bytes from 2a00:1450:8004::67: icmp_seq=3 ttl=56 time=58.7 ms
64 bytes from 2a00:1450:8004::67: icmp_seq=4 ttl=56 time=58.8 ms
^C
--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3012ms
rtt min/avg/max/mdev = 58.455/58.704/58.893/0.233 ms

Подготовленный читатель быстро сделает замечание, что такой подход к подключению к IPv6 раза в 2 "медленнее" (по пингам 60 мс против 21 в нэтив), чем нэтивный IPv6 линк: http://phpsuxx.blogspot.com/2010/09/ipv6-debian-5-lenny-fastvpsru.html

Источник:
http://wiki.debian.org/DebianIPv6#IPv66to4Configuration и http://www.mrdbs.com/setting-up-a-6to4-tunnel-in-debian.html

Как рассчитать 6to4 IPv6 адрес, соответствующий IPv4 адресу?

Для этого есть специальная утилита ipv6calc, устанавливаем ее:
apt-get install -y ipv6calc

Теперь, допустим, у нас есть IPv4 адрес 74.125.232.19 (ага, Google), как его преобразовать в IPv6 представление для 6to4? Вот так:
ipv6calc --quiet --action conv6to4 74.125.232.19

Вот такой результат работы команды будет:
2002:4a7d:e813::

Источник: http://wiki.debian.org/DebianIPv6#IPv66to4Configuration

Доступ в IPv6 сети, если поддержки IPv6 у провайдера/хостера нету

Тут есть несколько вариантов:
1) Ждать нэтив поддержки
2) 6to4
3) Различные механизмы тунеллирования (поидее, они работают также по протоколу 6to4, но сервер-ретранслятор тут не задан жестко протоколом и может менятся).

Подключение к IPv6 сетям посредством протокола 6to4

6to4 - это механизм позволяющий передавать IPv6 поверх IPv4 без явного создания туннелей (для этого используются специальные серверы-ретрансляторы).

Задачи 6to4 заключаются в следующем:
1) Он выделяет каждому владельцу IPv4 адреса блок IPv6 адресов (то есть, если у Вас уже есть IPv4 адрес, то у Вас автоматически есть и огромный блок IPv6 адресов). Такие адреса начинаются с 2002::/16 и называются "6to4 adresses".
2) Инкапсулирует IPv6 вовнутрь пакетов IPv4.
3) Маршрутизирует трафик между IPv4 и IPv6 сетями.

Чтобы разрешить хосту с 6to4 адресом общаться с настоящим IPv6 необходимо установить его шлюзом IPv4 адрес ближайшего сервера-ретранслятора, записанный в виде :192.88.99.1. Этот адрес постоянен вне зависимости от того, где находился клиент (это сделано для удобства), и занимается тем, что передает все данные полученные по IPv4 в IPv6 сеть.

Источник: http://en.wikipedia.org/wiki/6to4

Настройка нэтивного IPv6 на Debian 5 Lenny и 6 Squeeze на FastVPS.ru

В FastVPS.ru c недавнего времени можно к любому выделенному серверу совершенно бесплатно заказать IPv6 /64 подсеть (это 18 с десятком нулей IP адресов). Грех было не воспользоваться таким заманчивым предложением и не взять подсеть на потестить :)

После заказа сети в саппорте мы получаем следующие настройки сети:
IPs: 2a01:4f8:101:3181:: /64
Gateway: 2a01:4f8:101:3180::1 /59

Useable IP addresses:
2a01:4f8:101:3181::2 to 2a01:4f8:101:3181:ffff:ffff:ffff:ffff

Итак, попробуем настроить нэтивный IPv6 на Debian 5 Lenny.

На Debian5 Lenny добавляем загрузку поддержки IPv6 при запуске системы:
echo "ipv6" >> /etc/modules; modprobe ipv6

На Вebian 6 этого делать не требуется, система загрузит модули сама.

После этого открываем файл конфигурации сети:
vi /etc/network/interfaces

И добавляем (внизу от всех имеющихся там записей) в него следующее:
iface eth0 inet6 static
address 2a01:4f8:101:3181::2
netmask 64
gateway 2a01:4f8:101:3180::1
pre-up ip -6 route add 2a01:4f8:101:3180::1 dev eth0

После этого для применения настроек необходимо перезапустить сеть:
/etc/init.d/networking restart

Но, при этом, скорее всего нас постигнет неудача:
/etc/init.d/networking restart
Reconfiguring network interfaces...SIOCADDRT: File exists
Failed to bring up eth0.
done.

Пугаться тут рано, это не бага, это фича, нужно просто отправить машину в мягкий ребут:
shutdown -r now

И после ребута все должно заработать как требуется:
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8004::63) 56 data bytes
64 bytes from 2a00:1450:8004::63: icmp_seq=1 ttl=55 time=24.9 ms
64 bytes from 2a00:1450:8004::63: icmp_seq=2 ttl=55 time=21.0 ms
64 bytes from 2a00:1450:8004::63: icmp_seq=3 ttl=55 time=21.5 ms
64 bytes from 2a00:1450:8004::63: icmp_seq=4 ttl=55 time=21.1 ms
64 bytes from 2a00:1450:8004::63: icmp_seq=5 ttl=55 time=21.1 ms
64 bytes from 2a00:1450:8004::63: icmp_seq=6 ttl=55 time=21.1 ms
^C
--- ipv6.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5020ms
rtt min/avg/max/mdev = 21.060/21.823/24.914/1.394 ms

Вуаля :)

И теперь networking restart работает корректно:
/etc/init.d/networking restart
Reconfiguring network interfaces...done.

Есть ли нэтивные IPv6 DNS у Google DNS?

Нету: http://code.google.com/speed/public-dns/faq.html#ipv6

IPv6 адреса для OpenVZ контейнеров

В сабже ничего сложного нету, до установки OpenVZ на сервере необходимо настроить работу IPv6, например, по следующему мануалу: http://phpsuxx.blogspot.com/2010/09/ipv6-centos-55-fastvpsru.html

А также необходимо подключить поддержку IPv6 в OpenVZ:
vi /etc/sysconfig/vz

Там корректируем следующий параметр:
IPV6="yes"

После этого перезапускаем демона OpenVZ:
/etc/init.d/vz restart

После указанной подготовки необходимо назначить свободный IPv6 адрес какому-то определенному VE (проверялось с CentOS 5.5 в контейнере):

vzctl set 101 --ipadd 2a03:3f8:204:3182::3 --save

Все, после этого можно смело идти пинговать Гугл (можно, конечно, пинговать какой-то узел по хостнейму, но у меня это не заработало, так как на VPS был осознанно выключен IPv4, а IPv6 DNS не нашлось):
vzctl enter 101
entered into CT 101
[root@myvps /]# ping6 2a00:1450:8004::93
PING 2a00:1450:8004::93(2a00:1450:8004::93) 56 data bytes
64 bytes from 2a00:1450:8004::93: icmp_seq=0 ttl=54 time=21.3 ms
64 bytes from 2a00:1450:8004::93: icmp_seq=1 ttl=54 time=21.5 ms
64 bytes from 2a00:1450:8004::93: icmp_seq=2 ttl=54 time=21.4 ms
64 bytes from 2a00:1450:8004::93: icmp_seq=3 ttl=54 time=21.5 ms

--- 2a00:1450:8004::93 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 21.385/21.498/21.597/0.171 ms, pipe 2

Настройка нэтивного IPv6 на CentOS 5.5 на FastVPS.ru

В FastVPS.ru c недавнего времени можно к любому выделенному серверу совершенно бесплатно заказать IPv6 /64 подсеть (это 18 с десятком нулей IP адресов). Грех было не воспользоваться таким заманчивым предложением и не взять подсеть на потестить :)

После заказа сети в саппорте мы получаем следующие настройки сети:
IPs: 2a01:4f8:101:3181:: /64
Gateway: 2a01:4f8:101:3180::1 /59

Useable IP addresses:
2a01:4f8:101:3181::2 to 2a01:4f8:101:3181:ffff:ffff:ffff:ffff

Итак, для начала попробуем настроить нэтивный IPv6 на CentOS.

Для начала нужно включить поддержку IPv6 в системе:
vi /etc/sysconfig/network

И корректируем строку (если ее нету, ее необходимо добавить):
NETWORKING_IPV6=yes

Теперь открываем конфигурацию интерфейса eth0:
vi /etc/sysconfig/network-scripts/ifcfg-eth0

И добавляем туда следующее (назначаем "First useable IP" как основной IPv6 IP для машины):
IPV6INIT=yes
IPV6ADDR=2a01:4f8:101:3181::2

Применяем настройки:
/etc/init.d/network restart

Так как шлюз находится в другой подсети, необходимо явно указать настройки статического роутинга. Для этого создаем файл:
vi /etc/sysconfig/network-scripts/route6-eth0

И добавляем в него следующее (да, это два упоминания Gateway):
2a01:4f8:101:3180::1 dev eth0
default via 2a01:4f8:101:3180::1

Тоже самое можно сделать (но до первой перезагрузки) следующими командами:
ip -6 route add 2a01:4f8:101:3180::1 dev eth0
ip -6 route add default via 2a01:4f8:101:3180::1

Все, после этого пробуем пинговать Google (обращаю внимание, что ping в сети IPv6 называется ping6):
ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8004::93) 56 data bytes
64 bytes from 2a00:1450:8004::93: icmp_seq=0 ttl=55 time=21.2 ms
64 bytes from 2a00:1450:8004::93: icmp_seq=1 ttl=55 time=21.2 ms
64 bytes from 2a00:1450:8004::93: icmp_seq=2 ttl=55 time=21.4 ms
64 bytes from 2a00:1450:8004::93: icmp_seq=3 ttl=55 time=21.2 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 21.219/21.300/21.475/0.205 ms, pipe 2

Источник: http://www.cyberciti.biz/faq/rhel-redhat-fedora-centos-ipv6-network-configuration/, исходный код скрипта /etc/sysconfig/network-scripts/ifup-ipv6, а также http://www.cyberciti.biz/tips/configuring-static-routes-in-debian-or-red-hat-linux-systems.html

Saturday 18 September 2010

Как в Debian собрать пакет под архитектуру отличную от архитектуры текущей машины?

Легко, явно указав требуемую платформу для бинарного пакета:
debuild -us -uc -ai386

Сколько IP адресов содержится в /n сети при IPv6 адресации?

2^(128-n) адресов. То есть, например, /64 сеть IPv6 - это 2^(128-64) = 18 446 744 073 709 551 616 адресов.

Источник: http://en.wikipedia.org/wiki/IPv6_address

Типы IP туннелей, поддерживаемых в Linux: IPIP (IPv4 в IPv4), GRE (IPv4 и IPv6 в IPv4), SIT (IPv6 в IPv4)

Вот отличная статейка на эту тему: http://www.linuxfoundation.org/collaborate/workgroups/networking/tunneling

Также немножко подробностей можно найти в man ip.

IPv4 2 IPv6 туннель внутри OpenVZ VPS посредством tun/tap

http://code.google.com/p/tb-tun/

Сертификация на IPv6 от Hurricane Electric

http://ipv6.he.net/certification/

Зеркала для Debian 5 Lenny на hetzner.de, доступные по IPv6

Да, да! такое уже бывает :)

# Packages and Security Updates from the Hetzner Debian Mirror
deb ftp://mirror.ipv6.hetzner.de/debian/packages lenny main contrib non-free
deb ftp://mirror.ipv6.hetzner.de/debian/security lenny/updates main contrib non-free

Хосты правда успешно резолвятся в IPv6 адреса:
nslookup -type=AAAA mirror.ipv6.hetzner.de
Server: 192.168.155.1
Address: 192.168.155.1#53

Non-authoritative answer:
mirror.ipv6.hetzner.de has AAAA address 2a01:4f8:0:a006::1:1



Взято с: http://wiki.hetzner.de/index.php/Hetzner_Aptitude_Mirror#IPv6

Apache mod_vhost_limit: лимитированние числа worker процессов на vhost

По наводке arp`а нашел такую штуку: http://ivn.cl/2010/01/06/downloads-for-bandwidth-mod/

Модуль предназначен для того, чтобы задать лимит числа процессов-обработчиков для конкретного vhost. То есть, его задача не дать кому-то одному забить сервер до такой степени, что он либо повиснет либо упрется в MaxClients.

Прямой путь до исходников (зеркало):
http://fastvps.googlecode.com/svn/trunk/packages/mod_vhost_limit/mod_vhost_limit-0.2.tgz

Friday 17 September 2010

CentOS: компиляция 32 битного ПО на 64 битной платформе

При попытке скомпилировать программу имеем баг:
cc -m32 test.c
In file included from /usr/include/features.h:352,
from /usr/include/sys/poll.h:23,
from /usr/include/poll.h:1,
from ABftw_c.c:42:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory

Чинится это так:
yum -y install glibc-devel

Источник: http://www.cyberciti.biz/faq/x86_64-linux-error-gnustub-32h-missing-error-and-solution/

Мониторинг оставшихся ipv4 IP в реальном времени

http://www.potaroo.net/tools/ipv4/index.html или вот http://ipv6.he.net/v4ex/sidebar

Очередной локальный root эксплоит для ядер Linux с 2.6.26-rc1 до 2.6.36-rc4 (а также ядер 2.6.18 от RHEL)

https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2010-3081

Подробности проблемы: https://access.redhat.com/kb/docs/DOC-40265

P.S. фикса еще нету.

RHEL 5 / CentOS 5 уязвимы, так как этот патч был бэкпортирован в 2.6.18 RHEL ядра.

Debian 5 Lenny уязвим, но вот фиксы: http://www.debian.org/security/2010/dsa-2110. Проблеме не подвержены ядра начиная с 2.6.26-25lenny1.

Есть workaround: http://seclists.org/fulldisclosure/2010/Sep/273

Ускорение ребилда Soft RAID в Linux

Имеем при ребилде RAID примерно вот такую картину:

cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
8393856 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
282535040 blocks [2/2] [UU]
[>....................] resync = 0.2% (674432/282535040) finish=5133.2min speed=913K/sec

unused devices:



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


Для управления скоростью ребилда рейда есть два параметра:

cat /proc/sys/dev/raid/speed_limit_min
1000

cat /proc/sys/dev/raid/speed_limit_max
200000


То, что скорость фактически урезана на уровне 1 мегабайта секунду вполне оправданно на случай, если на сервере продолжает работать какой-либо софт. Но если все сервисы приостановлены на время ребилда, можно спокойно увеличить эту скорость мегабайт так до 50 в секунду посредством команды:

echo 50000 > /proc/sys/dev/raid/speed_limit_min


А теперь наблюдаем за результатом:

cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
8393856 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
282535040 blocks [2/2] [UU]
[>....................] resync = 1.1% (3379136/282535040) finish=129.8min speed=35831K/sec

unused devices:


Резюмируя все выше сказанное - если в системе есть активный ввод/вывод, то ребилд RAID ждет времени, когда ввод-вывод освобождается и только тогда может повышать скорость ребилда выше speed_limit_min. Если же требуется заставить приложения "подвинуться" и дать синхронизации массива повышенный приоритет, то необходимо повысить speed_limit_min до 10000 или выше (в зависимости от нагрузки на систему).

make-kpkg: после установки полученных .deb пакетов не собирается initrd

Это бага: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523735

А вот еще пара способов обойти его: https://help.ubuntu.com/community/Kernel/Compile

Серьезная оптимизация скорости работы lighttpd за счет использования Linux AIO

http://blog.lighttpd.net/articles/2006/11/12/lighty-1-5-0-and-linux-aio

Что есть sendfile() и с чем его едят?

Многие, уверен, часто слышали про такой системный вызов как sendfile() (например, в Nginx), но не многие задумывались, для чего он нужен и почему его часто позиционируют как "оптимизационный" (то есть, позволяющий что-либо убыстрить, ускорить).

Задача sendfaile заключается в том, чтобы скопировать из дескриптора 1 энное число байт в дескриптор 2 (также для копирования можно задать смещение). Почему такой вызов, который легко "эмулируется" последовательным read с первого дескриптора и write во второй считается оптимизационным? Да очень просто - при вызове sendfile в отличие от read/write отсутствует пересылка данных из ядра в пространство пользователя и обратно (все копирование происходит сугубо в пространстве ядра), этим и достигается экономия ресурсов.

Источник большей части вдохновения - комменты к статей на Хабре: http://habrahabr.ru/blogs/nginx/68480/

Небольшая оптимизация Proftpd - запрет резолва адресов клиентов

Для реализации задачи добавляем в конфиг:
vi /etc/proftpd/proftpd.conf

Следующую строку:
UseReverseDNS off

Перезапускаем демона:
/etc/init.d/proftpd restart

ISPManager + Debian + PHP + виртуальный хостинг = мириады файлов в папке mod-tmp/bin-tmp

Не проходит и недели, чтобы вопрос о том, как победить эту напасть, хоть кто-то не задал на Серче (searchenegines.ru). Итак, вопрос - какого фига они создаются и не удаляются автоматически? Ранее, я поднимал одну из сторону этого вопроса (сколько именно должна храниться сессия) http://phpsuxx.blogspot.com/2010/04/php-debian.html, но там я упустил из виду ряд деталей.

Благодаря одному из наших клиентов (если он меня читает, передаю искреннюю благодарность) я обнаружил такой вот параметр работы PHP сессий:
session.gc_probability = 1

Этот параметр является числителем дроби, которая высчитывает вероятность запуска удаления старых файлов сессий при данном запуске PHP интерпретатора, вся дробь выглядит так:
p = session.gc_probability / session.gc_divisor

То есть, если при данном запуске PHP требуется удалять старые файлы сессий с вероятностью 1/100 (оптимальное дефалтное значение), то значения параметров должны быть 1 и 100 соответственно. Чтобы в свою очередь запретить удаление старых сессий, нужно задать session.gc_probability равным нулю.

Что же мы имеем в стандартной конфигурации свеже установленного Debian с панелью ISPManager? А вот что:

php -i | grep session.gc_
session.gc_divisor => 100 => 100
session.gc_maxlifetime => 1440 => 1440
session.gc_probability => 0 => 0

Внимание вопрос из начала поста - какого хрена? А вот такого (/etc/php5/cgi/php.ini):
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.

; This is disabled in the Debian packages, due to the strict permissions
; on /var/lib/php5. Instead of setting this here, see the cronjob at
; /etc/cron.d/php5, which uses the session.gc_maxlifetime setting below.
; php scripts using their own session.save_path should make sure garbage
; collection is enabled by setting session.gc_probability
;session.gc_probability = 0
session.gc_divisor = 100

Иными словами, в связи с особенностями системы безопасности в Debian PHP gc был полностью отключен. А что за "strict permissions /var/lib/php5" ? А вот что:
su www-data
domain:~/v001049/data$ ls -la /var/lib/php5
ls: cannot open directory /var/lib/php5: Permission denied
v1:~/v001049/data$ ls -la /var/lib/php5/sess_ffae85888b2698c46af74bcbb36a534f
-rw------- 1 www-data www-data 89 2010-09-17 04:31 /var/lib/php5/sess_ffae85888b2698c46af74bcbb36a534f
domain:~/v001049/data$ cat /var/lib/php5/sess_ffae85888b2698c46af74bcbb36a534f
current_language|i:0;vote_completed|a:0:{}gids|a:1:{i:0;s:4:"1897";}counts|a:1:{i:0;i:1;}v1:~/v001049/data$
domain:~/v001049/data$
domain:~/v001049/data$ rm /var/lib/php5/sess_ffae85888b2698c46af74bcbb36a534f

То есть, в данной папке gc PHP даже теоретически работать не может - ему запретили запрос листинга каталога. Поэтому, сессии удаляются спец-скриптом /etc/cron.d/php5, который пускается от рута по CRON и проблем с правами не имеет.

Но ISPManager ведь создает отдельные папки для сессий клиентов и дает им там полную власть (листинг каталога разрешен!), следовательно, PHP gc будет там работать отлично, поэтому, опцию session.gc_probability можно смело (по крайне мере, если PHP для клиентов работает в режиме FastCGI) приводить в вид:

session.gc_probability = 1

После подобной перенастройки strace по всем PHP процессам легко показывает, что сессии мочатся:
strace -s 1024 -e trace=unlink -f $(pidof php5-cgi | sed 's/\([0-9]*\)/\-p \1/g')
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_fb03780fa60f20c40a9a3a8a653f0a48") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_a6b769c2e42878be628e9eebcff644e1") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_72db961a3a0c427dd2ca206801822eb3") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_2cd999481257e8ddf8fdc564e9b35655") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_81a55680deea55890219ad3ce0e098aa") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_1f00aa57e21437ea859d476da63e4a3c") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_735c6fbe4e76df9cb2aacc704580f934") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_1a5261a2dd852d14c1760efc7315b43d") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_c5e5cff56c2fc56f087e9bfc96c2ae0a") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_74d6c37033f2372b7187f1bffccbda78") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_456c347c477a694f9e85bfdd8cb78919") = 0
[pid 1381] unlink("/var/www/v001218/data/bin-tmp/sess_da4e80b181f5518c282f40c1de2dc3e0") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_ebe77e387b01e9de16f82aa6c35676f3") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_916646b0ed54757bd2c64a2852430af5") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_d2039dbed4dc17b7ad34b93a8820f6cf") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_7563c763ca1e997ff418d40bb945b91b") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_92f0d552abf944226e3c86e1837167b1") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_07a81fe5c04ebedfe2f48a4d55064e9b") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_23af29de2594d854b4264eee09723141") = 0
[pid 1381] unlink("/var/www/xxxxx/data/bin-tmp/sess_7856d53ddb52613410e01495a49d2381") = 0

Вот такая вот проблемка, вот такое вот решение :)

P.S. да, Миш, ты был прав, тут я накосячил поверив чужому аудиту кода PHP.

mount -bind: создание "ссылок" для папок

Возможно вот так легко и непринужденно:
mount --bind olddir newdir

Где newdir - новое имя папки olddir.

Как вывести в системе все процессы, находящиеся в D-state (ожидание ввода-вывода)?

ps aux | awk '{if($8=="D"){print $0}}'

Thursday 16 September 2010

Хостинг провайдер на Gentoo

https://www.sevenl.net/blog/gentoo-org-interviews-david-gallo-and-cassius-adams-of-sevenl/

Критическая локальная root уязвимость 64 битных новых ядер Linux: CVE-2010-3301

Блог кернел хакера, который нашел баг: http://sota.gen.nz/compat2/

Эксплоит: http://sota.gen.nz/compat2/robert_you_suck.c

Обсуждение на Лоре: http://www.linux.org.ru/news/security/5340028/page1?lastmod=1284669535613

Обсуждение на Опеннете: http://www.opennet.ru/opennews/art.shtml?num=27979

RHEL 5 / CentOS 5 ядра, по заявлению RedHat, не уязвимы: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2010-3301

Новые версии Ubuntu (Lucid, Keramic, Jaunty) на ядрах начиная с 28го (28, 31, 32) и выше уязвимы, но в апдейтах уже есть фикс, подробнее: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/640390, а вот обновленные пакеты: https://edge.launchpad.net/~ubuntu-security-proposed/+archive/ppa/+packages

Классификатор уязвимости: CVE-2010-3301

А вот патчи для upstream ядра: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=36d001c70d8a0144ac1d038f6876c484849a74de

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=eefdca043e8391dcd719711716492063030b55ac

P.S. кому нужны патчи против бага для ванильного 34го ядра - велкам в комменты.

Реализация D-Bus сервера на уровне ядра Linux

http://www.opennet.ru/openforum/vsluhforumID3/70688.html

Monday 13 September 2010

Очень удобные ключи для mtr

mtr --report --report-cycles=1000 domain.ru

Вот такие ключики заставят mtr перейти в режим "отчета", то есть, послать 1000 пакетов и после этого вывести результаты на экран, при этом сам процесс не отображается.

Отличное сравнение безопасности современных Linux дистрибутивов

http://www.opennet.ru/opennews/art.shtml?num=27938

Sunday 12 September 2010

После обновления Ubuntu внутри OpenVZ контейнера выдается ошибка: Unable to open pty: No such file or directory

Итак, имеем Ubuntu (9/10), которую обновили внутри OpenVZ контейнера. Контейнер недоступен по сети, а при попытке войти в него с локальной консоли получаем ошибку:
vzctl enter 111
enter into CT 111 failed
Unable to open pty: No such file or directory

Чем это вызвано? Тем, что после апдейта Ubuntu добавила udev в автозапуск, а этого внутри OpenVZ контейнера сделать нельзя. Как это победить?

Останавливаем контейнер:
vzctl stop 111
Stopping container ...
Container was stopped
Container is unmounted

Чрутимся в контейнер:
chroot /vz/private/111

Удаляем udev из автозапуска:
update-rc.d -f udev remove

Выходим из контейнера:
exit

Запускаем контейнер:
vzctl start 111

Но, к сожалению, этот совет помогает далеко не всегда.

Источник: http://wiki.openvz.org/Ubuntu_without_templates

IPTV в Самаре

Вот так: http://samara.dom-tv.in/a-one

Thursday 9 September 2010

Как определить, какая файловая система на разделе блочного устройства?

Вот так:
file -s /dev/sda3
/dev/sda3: Linux rev 1.0 ext3 filesystem data, UUID=4ca2642e-d5ff-40a5-b7b8-ff9f4ddbae1c (needs journal recovery) (errors) (large files)

Wednesday 8 September 2010

Новое слово в программирование под GPU

http://www.nvidia.com/object/fermi_architecture.html

AXFR и безопасность DNS

Всем, кто когда бы то ни было использовал / настраивал DNS сервисы крайне обязательно к прочтению: http://habrahabr.ru/blogs/infosecurity/88545/

Как узнать, выдает ли Ваш DNS подробные данные о содержимом зоны (AXFR) ? Легко:
dig -t AXFR domain.ru @ns.domain.ru

Или посредством веб-сервиса: http://www.digitalpoint.com/tools/zone-transfer/?domain=domain.ru

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

Как победить проблему? Вот пример для Debian. Открываем конфиг-файл:
vi /etc/bind/named.conf.options

И там внутрь блока options добавляем (тем самым мы позволяем только нашим DNS серверам дергать зону и никому больше):
allow-transfer { ip_первичного_днс; ip_вторичного_днс; };

Перезапускаем DNS:
/etc/init.d/bind9 restart

Все, проблема решена :)

Starting domain name service...: bind9 failed

Вот случилась такая проблемка на Debian Lenny:
/etc/init.d/bind9 start
Starting domain name service...: bind9 failed!


Есть очень легкий способ попросить Named сказать о том, почему он падает:
named -g -u bind
09-Sep-2010 00:41:46.124 starting BIND 9.6-ESV-R1 -g -u bind
09-Sep-2010 00:41:46.124 built with '--prefix=/usr' '--build=i486-linux-gnu' '--host=i486-linux-gnu' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--localstatedir=/var/run/bind' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-dlz-postgres=no' '--with-dlz-mysql=no' '--with-dlz-bdb=yes' '--with-dlz-filesystem=yes' '--with-dlz-ldap=yes' '--with-dlz-stub=yes' '--enable-ipv6' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -DNS_RUN_PID_DIR=0 -O2' 'LDFLAGS=' 'CPPFLAGS=' 'CXXFLAGS=-g -O2' 'FFLAGS=-g -O2'
09-Sep-2010 00:41:46.124 adjusted limit on open files from 1024 to 1048576
09-Sep-2010 00:41:46.124 found 2 CPUs, using 2 worker threads
09-Sep-2010 00:41:46.125 using up to 4096 sockets
09-Sep-2010 00:41:46.129 loading configuration from '/etc/bind/named.conf'
09-Sep-2010 00:41:46.723 /etc/bind/named.conf:238: unknown option 'egated'
09-Sep-2010 00:41:46.723 /etc/bind/named.conf:238: unexpected token near end of file
09-Sep-2010 00:41:46.842 loading configuration: unexpected token
09-Sep-2010 00:41:46.842 exiting (due to fatal error)

Идем на эту строку и фиксим проблему :)

Пересборка initrd Debian

Иногда по различным причинам в Debian генерируется кривой или неполный initrd файл, поэтому может возникнуть необходимость его пересборки, делать это так:
update-initramfs -v -u -k `uname -r` -t

Если же Вы в LiveCD и uname -r вернет далеко не ядро текущей системы, то смотрите в /etc/grub.conf или /boot/grub/menu.lst версию используемого ядра и вписывайте ее как аргумент команды вручную.

Может ли iptables приводить к потере пакетов на сервере?

Еще как может, особенно, если высокая нагрузка на сеть и включено много conntrack модулей у iptables.

Update: предположение не подтвердилось, потери все же на канале.

Проблемы с убеганием времени в Xen DomU (CentOS 5)

Итак, есть Dom0 с нормальным временем, а есть DomU с убегающим за сутки на 10-20 минут временем. Как победить?

1. В Dom0 ставим опцию independent wallclock = 1
2. В DomU через 10-15 минут по CRON ставим синхронизацию времени командой: ntpdate pool.ntp.org

Monday 6 September 2010

iotop для FreeBSD

top -m io -o total

Работает суперски, сейчас попробовал загрузить диск dd шкой, так она сразу взлетела в верх списка :)

Debian backports теперь официальный!

http://www.opennet.ru/opennews/art.shtml?num=27862

Как удалить все до единого разделы с диска в Linux?

Итак, имеем сглючивший софт, который сотворил нечто вот такое:
fdisk -l /dev/sda

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000a44f0

Device Boot Start End Blocks Id System
/dev/sda1 1 523 4199044+ fd Linux raid autodetect
/dev/sda2 524 785 2104515 fd Linux raid autodetect
/dev/sda3 786 1177 3148740 fd Linux raid autodetect
/dev/sda4 1178 182401 1455681780 85 Linux extended
/dev/sda5 1178 1569 3148739+ fd Linux raid autodetect
/dev/sda6 1570 1961 3148739+ fd Linux raid autodetect
/dev/sda7 1962 2353 3148739+ fd Linux raid autodetect
/dev/sda8 2354 2745 3148739+ fd Linux raid autodetect
/dev/sda9 2746 3137 3148739+ fd Linux raid autodetect
/dev/sda10 3138 3529 3148739+ fd Linux raid autodetect
/dev/sda11 3530 3921 3148739+ fd Linux raid autodetect
/dev/sda12 3922 4313 3148739+ fd Linux raid autodetect
/dev/sda13 4314 4705 3148739+ fd Linux raid autodetect
/dev/sda14 4706 5097 3148739+ fd Linux raid autodetect
/dev/sda15 5098 5489 3148739+ fd Linux raid autodetect
/dev/sda16 5490 5881 3148739+ fd Linux raid autodetect
/dev/sda17 5882 6273 3148739+ fd Linux raid autodetect
/dev/sda18 6274 6665 3148739+ fd Linux raid autodetect
/dev/sda19 6666 7057 3148739+ fd Linux raid autodetect
/dev/sda20 7058 7449 3148739+ fd Linux raid autodetect
/dev/sda21 7450 7841 3148739+ fd Linux raid autodetect
/dev/sda22 7842 8233 3148739+ fd Linux raid autodetect
/dev/sda23 8234 8625 3148739+ fd Linux raid autodetect
/dev/sda24 8626 9017 3148739+ fd Linux raid autodetect
/dev/sda25 9018 9409 3148739+ fd Linux raid autodetect
/dev/sda26 9410 9801 3148739+ fd Linux raid autodetect
/dev/sda27 9802 10193 3148739+ fd Linux raid autodetect
/dev/sda28 10194 10585 3148739+ fd Linux raid autodetect
/dev/sda29 10586 10977 3148739+ fd Linux raid autodetect
/dev/sda30 10978 11369 3148739+ fd Linux raid autodetect
/dev/sda31 11370 11761 3148739+ fd Linux raid autodetect
/dev/sda32 11762 12153 3148739+ fd Linux raid autodetect
/dev/sda33 12154 12545 3148739+ fd Linux raid autodetect
/dev/sda34 12546 12937 3148739+ fd Linux raid autodetect
/dev/sda35 12938 13329 3148739+ fd Linux raid autodetect
/dev/sda36 13330 13721 3148739+ fd Linux raid autodetect
/dev/sda37 13722 14113 3148739+ fd Linux raid autodetect
/dev/sda38 14114 14505 3148739+ fd Linux raid autodetect
/dev/sda39 14506 14897 3148739+ fd Linux raid autodetect
/dev/sda40 14898 15289 3148739+ fd Linux raid autodetect
/dev/sda41 15290 15681 3148739+ fd Linux raid autodetect
/dev/sda42 15682 16073 3148739+ fd Linux raid autodetect
/dev/sda43 16074 16465 3148739+ fd Linux raid autodetect
/dev/sda44 16466 16857 3148739+ fd Linux raid autodetect
/dev/sda45 16858 17249 3148739+ fd Linux raid autodetect
/dev/sda46 17250 17641 3148739+ fd Linux raid autodetect
/dev/sda47 17642 18033 3148739+ fd Linux raid autodetect
/dev/sda48 18034 18425 3148739+ fd Linux raid autodetect
/dev/sda49 18426 18817 3148739+ fd Linux raid autodetect
/dev/sda50 18818 19209 3148739+ fd Linux raid autodetect
/dev/sda51 19210 19601 3148739+ fd Linux raid autodetect
/dev/sda52 19602 19993 3148739+ fd Linux raid autodetect
/dev/sda53 19994 20385 3148739+ fd Linux raid autodetect
/dev/sda54 20386 182401 1301393519+ fd Linux raid autodetect

Удалять все это руками - самоубийство. Поэтому требуется автоматизация :) Здесь нам поможет parted:

parted /dev/sda
GNU Parted 1.8.8
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
New disk label type? [msdos]?
(parted) quit
Information: You may need to update /etc/fstab.

Вот и все, диск идеально чист:
fdisk -l /dev/sda

Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000a44f0

Device Boot Start End Blocks Id System

По материалам: http://www.virtualvcp.com/linux-technical-guides/125-clearing-a-guid-partition-table-gpt-in-linux

Linux Soft Raid: active (auto-read-only)

Иногда для массивов, доступ к которым осуществляется очень редко, можно наблюдать такую картину:
cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[0] sdb2[1]
2104448 blocks [2/2] [UU]

md0 : active (auto-read-only) raid1 sda1[0] sdb1[2](S)
4200896 blocks [2/1] [U_]

md2 : active raid1 sdb3[2] sda3[0]
306263040 blocks [2/1] [U_]
[>....................] recovery = 0.1% (475200/306263040) finish=225.1min speed=22628K/sec

unused devices:

То есть, по каким-то причинам массив /dev/md0 перешел в статус "только чтение".

Как же его вывести из этого статуса и заставить ребилдится? Очень легко:
mdadm -w /dev/md0

Вуаля, пошел ребилд:
cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[0] sdb2[1]
2104448 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[2]
4200896 blocks [2/1] [U_]
resync=DELAYED

md2 : active raid1 sdb3[2] sda3[0]
306263040 blocks [2/1] [U_]
[>....................] recovery = 0.6% (2013504/306263040) finish=531.5min speed=9537K/sec

unused devices:

Тестирование поведения RAID-Z массива во FreeBSD при полном отказе одного из дисков

Итак, мы имеем собранный RAID-Z массив из 3 дисков: http://phpsuxx.blogspot.com/2010/09/raid-z-freebsd-81.html

Перед тем как подобную технологию эксплуатировать, стоит протестировать, как она поведет себя во внештатных ситуациях, скажем, при полном или частичном отказе одного из 3 дисков.

Частичный отказ диска

Итак, "отключаем" массив от системы:
zpool export backup

При этом он также будет отмонтирован.

Теперь эмулируем физическое повреждение поверхности диска /dev/ad6 (пишем на него гигабайт "белого шума"):
dd if=/dev/urandom of=/dev/ad6 bs=1m count=1000

Снова подключаем массив:
zpool import backup

После этого можно попробовать прочесть какой-либо из файлов с массива (или можно этого не делать, как я понял) и в итоге мы увидим следующее:
zpool status
pool: backup
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-9P
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0
ad6 ONLINE 0 0 10
ad10 ONLINE 0 0 0

errors: No known data errors

То есть, ZFS определила, что мы чего-то нахимичили с данными (так как они не совпадали со своими ключевыми суммами), это на лету исправила и сообщила нам число ошибок из-за ключевых сумм с ad6. Что же, прекрасно, если винт правда начал умирать, Вы узнаете это первым.

Но при этом ZFS нашел не все ошибки (так понимаю, по причине, что мы считали далеко не все данные с диска), поэтому есть возможность попросить ZFS провести полную проверку данных на этом томе и исправить все найденные ошибки:
zpool scrub backup

После чего увидим следующий status:
zpool status
pool: backup
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-9P
scrub: scrub completed after 0h0m with 0 errors on Sun Sep 5 23:05:03 2010
config:

NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0
ad6 ONLINE 0 0 21 1.00M repaired
ad10 ONLINE 0 0 0

errors: No known data errors


Теперь же попросим ZFS забыть про наши опыты и сбросить число ошибок:
zpool clear backup ad6

И теперь наш статус девственно чист:
zpool status
pool: backup
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0
ad6 ONLINE 0 0 0
ad10 ONLINE 0 0 0

errors: No known data errors

Полный отказ диска

Допустим, диск отказывает на пустом месте. Для этого есть прекрасная команда offline:
zpool offline backup ad4

После такой наглости массив переходит в состояние DEGRADED (разрушен, это нештатный режим его работы):
zpool status
pool: backup
state: DEGRADED
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-9P
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
backup DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
ad4 OFFLINE 0 49 0
ad6 ONLINE 0 0 0
ad10 ONLINE 0 0 0

errors: No known data errors

Подключаем диск обратно:
zpool online backup ad4

Смотрим статус массива:
zpool status
pool: backup
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-9P
scrub: resilver completed after 0h0m with 0 errors on Sun Sep 5 23:00:15 2010
config:

NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 49 0 21.5K resilvered
ad6 ONLINE 0 0 1 15K resilvered
ad10 ONLINE 0 0 0 14K resilvered

errors: No known data errors

Как я понял, в полях resilvered указано сколько блоков с каждого из рабочих дисков было считано, а напротив "отказавшего диска" указано число блоков которое было восстановлено на основе данных четности (но я могу ошибаться, не верьте мне!). Данные были восстановлены и теперь массив снова в статусе ONLINE. Примерно тоже самое произойдет, когда потребуется заменить один из дисков в связи с отказом.

Физическая замена одного из дисков

Допустим, на одном из дисков по данным S.M.A.R.T. образовалось большое число сбойных секторов и его стоит заменить (для чистоты эксперимента мне пришлось немного погонять техников ДЦ и физически заменить один из дисков.). Нужно ли готовить массив к этому заранее? Совершенно не нужно (официальная документации Sun). Сервер просто выключается, сбойный диск заменяется (то есть, на место подключения старого диска ставится новый) и сервер включается. Статус массива при этом будет следующий:
zpool import
pool: backup
id: 15744554445999282139
state: DEGRADED
status: One or more devices are missing from the system.
action: The pool can be imported despite missing or damaged devices. The
fault tolerance of the pool may be compromised if imported.
see: http://www.sun.com/msg/ZFS-8000-2Q
config:

backup DEGRADED
raidz1 DEGRADED
ad4 ONLINE
ad6 UNAVAIL cannot open
ad10 ONLINE


И при этом массив не был подключен к системе:
zpool list
no pools available

То есть, ZFS заметила, что диск ad6 куда-то пропал и не хочет запускаться. Что же делать?

Делаем "явное" подключение пула:
zpool import backup

После этого статус примет вид:
zpool status backup
pool: backup
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
backup DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
ad4 ONLINE 0 0 0
1502173858046405299 UNAVAIL 0 227 0 was /dev/ad6
ad10 ONLINE 0 0 0

errors: No known data errors

После этого сообщаем ZFS, что мы заменили этот диск:
zpool replace backup ad6

И, вуаля, массив снова в штатном режиме:
zpool status backup
pool: backup
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Sep 6 16:05:36 2010
config:

NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0 31K resilvered
ad6 ONLINE 0 0 0 2.18M resilvered
ad10 ONLINE 0 0 0 33K resilvered

errors: No known data errors

Поистине фантастическая технология :)

По материалам: http://www.freebsd.org/cgi/man.cgi?zpool и http://people.freebsd.org/~pjd/misc/zfs/zfs_self-healing.swf

Sunday 5 September 2010

Что такое resilvering?

Resilvering - это ресинхронизация, пересборка или реконструкция, иными словами, процесс восстановления содержимого поврежденного устройства с использованием данных с уцелевших устройств.

http://blogs.sun.com/bonwick/entry/smokin_mirrors

Создание RAID-Z массива на FreeBSD 8.1

Итак, имеем FreeBSD 8.1:
FreeBSD rescue 8.1-STABLE FreeBSD 8.1-STABLE #0: Mon Jul 26 08:20:08 UTC 2010 root@fbsd64.hetzner.de:/usr/obj/usr/src/sys/GENERIC amd64

А также три SATA-2 диска по 1.5 тб (каждый из которых ранее были разбиты для Linux Soft Raid-5):
find /dev | egrep 'ad'
/dev/ad4
/dev/ad4s1
/dev/ad4s2
/dev/ad4s3
/dev/ad6
/dev/ad6s1
/dev/ad6s2
/dev/ad6s3
/dev/ad10
/dev/ad10s1
/dev/ad10s2
/dev/ad10s3

Просмотрим список имеющихся ZFS пулов:
zpool list
no pools available

Создаем ZFS RAID-Z1 пул с именем backup на базе трех винтов:
zpool create backup raidz ad{4,6,10}

Итого, убеждаемся, что он создался:
zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
backup 4.06T 220K 4.06T 0% ONLINE -

В данный момент меня смутило, что при трех дисках по 1.5 тб эффективный объем вышел 4 тб, а не 2.7 (как было бы в случае RAID-5).

Теперь смотрим статус массива:
zpool status
pool: backup
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
backup ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4 ONLINE 0 0 0
ad6 ONLINE 0 0 0
ad10 ONLINE 0 0 0

errors: No known data errors

Теперь смотрим в mount и замечаем чудесным образом там появившийся новый раздел:
mount | grep /backup
backup on /backup (zfs, local)

Который как раз на 2.7 тб:
df -h | grep backup
backup 2.7T 24K 2.7T 0% /backup

Вуаля, все, можно на нем размещать свои данные и совершенно не боятся, если один из дисков сбойнет :)

Уничтожить zpool можно также очень просто:
zpool destroy backup

По материалам: http://people.freebsd.org/~pjd/misc/zfs/zfs_self-healing.swf

Вышел Proxmox VE 1.6

http://pve.proxmox.com/wiki/Proxmox_VE_News#Proxmox_VE_1.6_released

Установка Proxmox на Debian Lenny

http://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Lenny

Как запустить mysqloptimize для всех БД на сервере c ISPManager?

mysqloptimize --all-databases -uroot -p`cat /usr/local/ispmgr/etc/ispmgr.conf | grep Password | awk '{print $2}' | head -n1`

Ми-8

Ми-8 - это самый массовый вертолёт в мире. Выпускается непрерывно в течение вот уже сорока пяти лет (пятидесяти, если считать от В-8). Данные по точному количеству выпущенных "восьмёрок" расходятся от 12 до 15 тысяч (через несколько месяцев эту цифру получится уточнить до сотен).

Подробнее: http://parfaits.livejournal.com/840986.html

До Америки на ... контейнеровозе!

http://voyadger.livejournal.com/59849.html

Saturday 4 September 2010

Отправка лога ядра (dmesg) по сети

http://zgp.org/pipermail/linux-elitists/2008-December/012665.html

Технический блог австралийского хостинг провайдера anchor.com.au

Крайне рекомендую к прочтению: http://www.anchor.com.au/blog

После обновления Debian до squeeze / sid (Ubuntu) внутри OpenVZ VPS упала сеть

Чем это вызвано? Это вызвано тем, что в новых версиях Debian (и, следовательно, Ubuntu) используется инновационная система запуска upstart, из-за которой OpenVZ как раз и не может запустить сеть. Правильного решения проблемы я не знаю (скорее всего, обновление vzctl), поэтому есть костыльный способ запускать сеть насильно, для этого на VPS делаем:
echo "service networking start" >> /etc/rc.local

После этого открываем файл в редакторе:
vi /etc/rc.local

И переносим строку "exit 0" в самый низ.

И перезапускаем его через панель управления либо с ноды командой:
vzctl restart CTID

Friday 3 September 2010

Юбилей! Принимаются поздравления!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
cd:46:c0:90:41:88:b8:1a:14:ec:7c:8b:a3:43:43:a0.
Please contact your system administrator.
Add correct host key in /Users/nrg/.ssh/known_hosts to get rid of this message.
Offending key in /Users/nrg/.ssh/known_hosts:1000
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,password).

Как выставить время на BIOS часах?

Итак, имеем на выделенном сервере отстающее BIOS время:
hwclock
Fri 03 Sep 2010 10:16:06 PM MSD  -0.240216 seconds

В то время, как время в системе:
date
Fri Sep  3 14:22:21 MSD 2010

Чтобы привести BIOS часы в соответствие с системными используем такую команду:
hwclock --systohc

После этого убеждаемся, что время в системе совпадает с BIOS временем:
hwclock

Что делать если man страница закэшировалась?

Вот сейчас обновил vzctl, а man-страница его почему-то осталась от предыдущей версии. Как это победить?

Очень просто, ищем нужный ман в кэше:
find /var/cache/man/ | grep vzctl
/var/cache/man/cat8/vzctl.8.bz2

Удаляем его кэшированную версию:
rm /var/cache/man/cat8/vzctl.8.bz2

Снова открываем man требуемой страницы (он уже будет сгенерирован с нуля и будет актуальным):
man vzctl

Веская причина обновлять vzctl - появление поддержки ipt_recent в 3.0.24 версии

Только толкьо хотел отказать клиенту в подключении модуля ipt_recent, как на новом сервер заметил, что он теперь поддерживается для клиентскиех контейнеров! Вот соответствующие записи в changelog.

Thursday 2 September 2010

Xen vs KVM

http://blog.foaa.de/2010/09/xen-4-0-1-vs-kvm-0-12-4-mysql-and-apache-benchmarks/

Как ни странно, но Xen тут победитель :)

Монтирование собственных разделов в OpenVZ контейнеры

http://wiki.openvz.org/Bind_mounts

Операционной системе Linux 19 лет!

Пусть с небольшим опозданием, но все же! Ура Линусу Торвальдсу :)

Подробнее: http://www.opennet.ru/opennews/art.shtml?num=27731

Вышел Plone 4

Вот новость: http://plone.org/news/plone-4-released, а вот отличный пошаговый курс по новым фичам http://plone.org/products/plone/features

Из волнующих лично меня изменений в первую очередь стоит отметить, что теперь используется Python 2.6 (ссылка), 3я же версия Plone не работала ни с 2.5 ни с 2.6, что вызывало много проблем при установке Plone. Если же говорить о планах на будущее, то 4.1 версия будет поддерживать Python 2.7 (ссылка).

Также не стоит забывать, на базе чего работает Plone - это платформа приложений Zope. Plone 4 базируется на ее 2.12 версии (ссылка). Также обращаю внимание, что не стоит искать эту версию на офсайте Zope 2, она доступна через egg: http://pypi.python.org/pypi/Zope2/2.12.8