четверг, 30 июня 2011 г.

Сборка FreeBSD-9 с помощью Clang

Сборка FreeBSD-9 с помощью Clang
Clang является фронэндом к LVM и призван заменить gcc в базовой системе. Сейчас же по умолчанию сборка как системы, так и портов ведется с помощью далеко не самой свежей версии gcc.

Согласно http://wiki.freebsd.org/BuildingFreeBSDWithClang для переключения на clang нужно прописать в /etc/make.conf
.if !defined(CC) || ${CC} == "cc"
CC=clang
.endif
.if !defined(CXX) || ${CXX} == "c++"
CXX=clang++
.endif
# Don't die on warnings
NO_WERROR=
WERROR=
# Don't forget this when using Jails!
NO_FSCHG=
Однако, это имеет побочный эффект в виде использования clang в том числе и для сборки портов. Если это не то, что нам нужно, немного подправим конфиг, добавив дополнительное условие:

.if empty(.CURDIR:M/usr/ports/*)
.if !defined(CC) || ${CC} == "cc"
CC=clang
.endif
.if !defined(CXX) || ${CXX} == "c++"
CXX=clang++
.endif
.endif
Таким образом clang будет использоваться только если текущая директория не начинается с /usr/ports

http://blog.bsd-root.com/2011/05/freebsd-9-clang.html

php display errors

Пример файла для отладки индекса
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
ini_set('display_startup_errors','On');
require("index.php");
?>

Можно их вставить сразу в файл, убрав require

Вариант для .htaccess
php_flag display_errors on
php_value error_reporting E_ALL

portmaster

Используем portmaster

В целом, portupgrade удобнее, но его огромные зависимости ужасают... Плюс у него есть pkgdb, поэтому для установки того же мускуля достаточно набрать portinstall mysql50, тогда как с портмастером будет portmaster databases/mysql50. Если категория неизвестна -- придётся использовать locate или cd /usr/ports && make search name="mysql", что порядком напрягает на большом количестве пакетов.

portmanager security/sudo
установка пакета

portmaster -L
Список пакетов, для которых есть обновленные версии

portmaster -ah
обновить все пакеты

portmaster -d -R -r 'png-*'
Обновление порта и всех зависящих от него портов на примере png

полезный ключик -o
Позволяет заменить уже установленный порт на другой. Полезно, когда установленный порт, например, вынесен из дерева портов за устареванием, как, например, было с libtool15, на замену которой пришла libtool22. Таким образом, замена одного на другое на примере того же libtool происходит вот так:
portmaster -o devel/libtool22 devel/libtool15

если в директорию порта в базе данных портов (в моем случае это была /var/db/pkg/teTex-base-3.0.20) поместить файл с именем +IGNOREME, то portmaster его проигнорирует и ставить не будет.

http://www.daemony.ru/?p=820

среда, 29 июня 2011 г.

FreeBSD 9-current - обновление ядра

Актуально, пока оно current.

Возьмём за основу файл /usr/share/examples/cvsup/standart-supfile
Скопируем в другое место, затем проверим, что там default tag=. и поправим default host например на cvsup.ru.freebsd.org

Теперь обновляемся как обычно
#csup -g -L 2 our-supfile
итд.

SSD: Что о них нужно знать

http://pc-help.tomsk.ru/forum/viewtopic.php?f=1&t=2826

...
Код E1 – Host Writes
This attribute reports the total number of sectors written by the host system. The raw value is increased by 1 for every 65,536 sectors written by the host. Use the Raw value for this attribute.
«Этот атрибут показывает, сколько всего записано данных на диск»


Код E9 – Media Wearout Indicator
This attribute reports the number of cycles the NAND media has experienced.
The normalized value declines linearly from 100 to 1 as the average erase cycle count increases from 0 to the maximum rated cycles.
Once the normalized value reaches 1, the number will not decrease, although it is likely that significant additional wear can be put on the device. Use the Normalized value for this attribute.
«Этот атрибут показывает, сколько здоровья осталось у диска»
...

Для SLC интеля (Х25-Е на 32 гига) при Е1=22Тб Е9=99
то есть записать он сможет что-то около 2 петабайт.
Надо понять, как мониторить эти поля в линухе..

пятница, 24 июня 2011 г.

Немного ненависти про hetzner

В принципе, за достаточно смешные деньги можно получить мощную железку. Проблема в том, что железки эти - обычные бытовые компы.
Ограничения:
1) корпуса максимум на 4 диска, даже если каналов больше. Просто повесить ssd на проводах нельзя, политика компании.
2) если диски были sata, а надо sas - требуется подключить все диски через какой-то adaptec типа 5405. Возможно, переносить систему. Перенос через спецов - платный.
3) там нельзя хостить важные проекты. Причина -- ниже.
4) КВМ есть, но установка от 20 до 60 минут и более. Причём штатные КВМ весьма своенравны и глючны.
5) если хочется ssd - есть только MLC.
6) на каждый чих с конфигурацией надо заказывать flexi pack, 15$/мес.
7) если понадобится перезагрузка -- вы крупно попали. Особенно если пациент "пока теплый" и например на пинги отвечает.

В общем, берем мы там сервера через fastvps, и это накладывает ряд багов и нюансов. Например, один раз был отправлен запрос на ребут, который просто потерялся. Также, саппорт работает не 24х7, а в рабочие часы (Ежедневно, с 10:00 до 23:00), хотя шанс кого-нибудь поймать ночью и есть, но лучше на это не надеяться. А самая засада будет, если упадёт в 23:05, с субботы на воскресенье, и требуется помощь в ДЦ - часов 12 простоя поймать очень даже реально.

Теперь снова про хецнер. Есть у них панелька для ребута, которая похоже считает себя умнее пользователя. Например, хард-резет бесполезно нажимать, если сервер пингуется, но внутри кернел паник или что-то такое. Особым "умом" отличается их саппорт (напоминаю, я уже про сам хецнер). Например, они не будут делать ручной резет, если сервер пингуется.
"Ручной резет еще не производился. Сотрудники ДЦ уверены, что раз сервер пингуется, то с ним ничего делать не нужно. Сейчас наш администратор отправляет уточнение о том, что резет необходим." Из тикета.
Так что писать хецнеру нужно в стиле "нужно сделать резет. Сервер отвечает на пинги, но не работает и нужен резет. И не надо строить из себя умных, JUST DO IT!!"
Если через фаст - сразу написать в тикете: "нужен ручной резет, хоть сервер и отвечает. Напишите об этом хецнеру, иначе эти тупые уродыих инженегры ничего делать не будут".

Итог... в 8.30 обнаружили "maxproc exceeded by uid 0", и только в 13.50 получили ребут. Поэтому недопустимо в таких местах держать важные проекты. Зато дёшево, пока работает.

понедельник, 20 июня 2011 г.

Настройка nginx-passenger для CentOS

http://olemskoi.ru/node/6776

Для начала, нужна сама репа
http://olemskoi.ru/repository
Для установки загрузите файл http://rpms.southbridge.ru/southbridge-stable.repo в папку /etc/yum.repos.d/

1
yum install ruby-enterprise-rubygems
2
gem install passenger
3
yum install nginx-passenger

OCZ HSDL: новый скоростной интерфейс для твёрдотельных накопителей

http://www.thg.ru/storage/ocz_hsdl_ibis/print.html


OCZ High-Speed Data Link

OCZ не прибегла к каким-либо секретным хитростям при разработке интерфейса HSDL. Он построен на доступных стандартах - и OCZ подробно описала, на чём основывается HSDL. Новый интерфейс использует ту же самую схему кодирования 8b/10b, что и PCI Express, SATA, HyperTransport и USB 3.0. А когда на рынок выйдет новая шина PCI Express 3.0, то HSDL сможет перейти даже на схему кодирования 128b/130b, которая у неё используется.

То есть, по большей части, основой интерфейса HSDL является шина PCI Express.

Один канал HSDL состоит из четырёх линий PCIe, объединённых вместе, что даёт предсказуемую масштабируемость. На данный момент компания предлагает SSD IBIS с одноканальными картами-адаптерами, которые (как и можно было ожидать) устанавливаются в слот PCIe x4 материнской платы. В будущем у компании есть планы по выпуску двухканальных карт, которые будут устанавливаться в слот PCIe x8.

...

Итак, мы знаем, что представляет собой интерфейс HSDL в своей нынешней форме, а также знакомы с потенциалом роста. Но что можно сказать про IBIS, накопители первого поколения, которые разработаны с учётом скоростного интерфейса HSDL? Что ж, на данный момент многие накопители IBIS просто слишком дорогие. Как указывает компания, в данном случае OCZ не ставит на оптимальное соотношение производительности за свои деньги - для этого есть линейка RevoDrive. В случае IBIS вы платите за продукт, который обеспечивает больше 100 000 операций ввода/вывода в секунду, а также пропускную способность потокового чтения/записи намного выше, чем может дать порт SAS.

среда, 15 июня 2011 г.

Отладка долго выполняющихся транзакций в MySQL

http://www.opennet.ru/tips/2557_mysql_innodb_transaction_debug.shtml

ssh-keys на пальцах

[черновик]

Представим, что есть 2 жилых дома, у каждого есть хозяин (root), жильцы (users) и обслуживающий персонал (daemons), а также бывают гости. У этих домов есть адреса, чтобы жители других домов могли найти нужный дом. При "сдаче в эксплуатацию" (первый запуск sshd) выдаётся уникальный набор документов (генерация ключей, которые лежат в /etc/ssh/)

Захотел житель из дома А зайти в гости в дом Б. Узнал он адрес, по адресу узнал, куда идти (занёс этот адрес в known_hosts), попутно запомнил, как этот дом выглядит - вдруг кто-то ночью этот дом подменит?.. :) Но обстановка на улице напряжённая, нельзя доверять всем подряд. Получаем от этого дома информацию (рупор - плохо, домофон?)

Заходит.. Стучится в нужную квартиру и знакомится с жильцом

Хозяин имеет право ходить по квартирам и проверять, всё ли в порядке (root имеет полный доступ), поэтому по умолчанию хозяин не может придти "с улицы" (вход под root запрещён), им может стать только жилец дома. Все жильцы имеют право получать права хозяина (su), а есть те, кто могут стать исполняющими обязанности (группа wheel)

вторник, 14 июня 2011 г.

Облака, белогривые лошадки..

Что они дают, и где грань между облаком и vps

"Слова «облако», «облачные вычисления», «облачный» используются для чего попало. Новое модное слово, buzzword. Мы видим «облачные антивирусы», «облачные блейд-сервера». Даже именитые вендоры сетевого оборудования, не стесняются выставлять коммутаторы с ярлыком «for cloud computing». Это вызывает инстинктивную неприязнь, примерно, как «органические» продукты питания.

Любой технарь, который попытается разобраться с технологиями, лежащими в основе «облака», после нескольких часов борьбы с потоком рекламных восторгов, обнаружит, что это облака — это те же VDSы, вид сбоку. Он будет прав. Облака, в том виде, как их делают сейчас — обычные виртуальные машины.

Однако, облака, это не только маркетинг и переименованные VDS. У слова «облако» (или, точнее у фразы «облачные вычисления») есть есть своя техническая правда. Она не такая патетичная и восхитительно-инновационная, как рассказывают маркетологи, но она всё-таки есть. Придумана она была много десятилетий назад, но только сейчас инфраструктура (в первую очередь, Интернет и технологии виртуализации x86) доросла до уровня, который позволяет реализовать её в массовом порядке."
Учёт ресурсов в облаках

Но автор то ли забывает, то ли умалчивает и про необходимость всё-таки ограничить эти ресурсы. Если у нас вычислительный кластер -- за сутки или месяц, но мы на той же задаче пережуём одинаковое количество данных. Другое дело - web-сфера, где наша мегасистема может и выдержит мега DDoS на десятки гигабит, но во сколько это встанет владельцам? Лучше получить 504, чем попасть на миллионы, которые гарантированно не принесут прибыли. Ловить начало атаки и срочно выключаться?
На данный момент мы в любом случае будем ограничены ресурсами ноды, но если "облачность" станет "истинной"? Когда любая задача будет автоматом раскидываться на десятки, сотни серверов?

Другой момент - отказоустойчивость. Настоящая облачность это не просто отвязанность от конкретной железки, это отвязанность от площадки. И если у нас вышла из строя площадка -- её тут же должна заменить другая, причём незаметно для всех. Это называется "high avaliability" и стоит денег. Больших денег. И этого пока облака дать не могут.

Ещё проблема:
Управление памятью гостевой машины в облаке
"Одна из первых проблем, с которой сталкиваешься, когда решаешь сделать в облаке «неограниченную память» — это то, что современные операционные системы не готовы к «неограниченной памяти». Связано это с дисковым кешем.

Ядро забирает себе всю свободную память для кеша. Если есть дисковые операции и есть свободная память — кеш будет расти. В случае сервера с единолично пользуемой памятью это благо, однако, если мы говорим о том, что все мегабайты платные, платить за дисковый кеш в 10-20Гб откровенно не хочется."

MapReduce

http://ru.wikipedia.org/wiki/MapReduce

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

смена айпи у машины в ezjail

Как оказалось, можно назначить 1 айпи нескольким машинам. Налажал, присвоил разным джайлам 1 айпи. Надо поправить - поставить 1 машине новый айпи.
Похоже, штатных методов нет.
Руками так:
# ee /usr/local/etc/ezjail/myjail
находим строку

export jail_myjail_ip="192.168.1.37"
и меняем на нужное. Потом надо зайти в машину и сменить айпи там. Увы, тут не так просто все.

# /etc/netstart
Starting devd.
devd: Can't open devctl device /dev/devctl: No such file or directory
/etc/rc.d/devd: WARNING: failed to start devd
Setting hostuuid: 2848412f-cc08-da11-9b12-26074710a313.
Setting hostid: 0xae73ae76.
/etc/rc.d/hostname: WARNING: $hostname is not set -- see rc.conf(5).
ifconfig: ioctl (SIOCDIFADDR): permission denied
ifconfig: up: permission denied
Starting Network: lo0.

lo0: flags=8049<up,loopback,running,multicast> metric 0 mtu 16384
options=3<rxcsum,txcsum>
/etc/netstart: /etc/rc.d/ip6fw: not found

Разные варианты перезапуска тоже не проходят, reboot нету, init 0 просто не срабатывает... Дергать хост можно далеко не всегда.

воскресенье, 12 июня 2011 г.

немного про сети

Стоит в комнате несколько человек. Кто-то может сказать: "Миша, иди сюда."
Это UDP-пакет. Миши может и не быть в комнате, или он может не услышать.
Можно крикнуть "Всем внимание" - это броадкаст.
"Петя, Вася - выключите свет". Это мультикаст.
"Миша, ты тут?" - это ICMP пакет. В ответ можно получить "да, я тут" или не получить ничего. Хотя иногда бывает, что привратник отвечает вместо него "этот человек недоступен".
Может быть диалог.
-Миша!
-Да?
Установлено TCP соединение. Или не установлено, если Миша по каким-то причинам не ответил.

Но что делать, если нам нужен Миша, а в комнате его нет? У двери стоит привратник с телефоном - гейт или роутер. Если мы знаем, где сидит Миша - мы говорим "соедини меня с адресом: дом 1, квартира 2, абонент 3" и говорим по телефону. Если адреса не знаем, но есть официальное имя - запрашиваем адрес по имени у привратника, тот связывается с местным отделом адресов, если там информации нет - они передают в районный отдел итд. Потом по всей этой цепочке адрес возвращается и сообщается нам. Это днс. Если привратник записывает себе в записную книгу, чтобы в следующий раз найти этот адрес быстрее, это кэширующий днс.

суббота, 11 июня 2011 г.

IPMI: смена адреса

Обычно надо смотреть 1 канал, проверим настройки и приступим.
#ipmitool shell

ipmitool> lan print 1
....
ipmitool> lan set 1 ipaddr 1.2.3.4
Setting LAN IP Address to 1.2.3.4
ipmitool> lan set 1 netmask 255.255.255.248
Setting LAN Subnet Mask to 255.255.255.248
ipmitool> lan set 1 defgw ipaddr 1.2.3.1
Setting LAN Default Gateway IP to 1.2.3.1
ipmitool> lan print 1
....

Если при этом получим ошибку
LAN Parameter Data does not match! Write may have failed.
значит, что-то не так в настройках. Возможно, неверная маска. При этом default gateway не установится.

Боремся с blank screen (черный экран)

Я знаю 2 варианта:
1) acpi=ht в параметры ядра
2) setterm

Второй метод удобнее тем, что он может не просто показать "пустоту", но и перевести монитор в сберегающий режим.

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

пятница, 10 июня 2011 г.

Установка FreeBSD с корнем на ZFS, используя GPT

В связи с удобством zfs, особенно в части расширения ssd-кэшами, начал переводить сервера на zfs.
warning: не забываем про память! Учитываем, что надо 2+ гига
warning: На i386-arch ставить скорее вредно.. если встанет вообще. Так что только amd64.

Диски пока в основном старые, но для удобства надо бы делать выравнивание. Вообще, под загрузчик надо 62 сектора, но с выравниванием начинать будем или с 64 сектора, или со второго мегабайта. Я выровняю на 1М, 256 блоков=128кб на блоке 512 байт. (интересно, когда можно будет руками задать размер блока через опции, а не патчи кода)

# gpart create -s GPT ad6

# gpart add -b 1M -s 256 -t freebsd-boot ad6

# gpart show ad6
=> 34 625142381 ad6 GPT (298G)
34 2014 - free - (1M)
2048 256 1 freebsd-boot (128k)
2304 625140111 - free - (298G)

Впрочем, размер раздела можно было задать и через -s 128k, с версии 8.0 beta 1 уже понимало ключи размерности.

Дальше нужен своп -- туда идут дампы при падениях, да и работать без свопа вообще -- идея плохая. Размер - если памяти достаточно, и система не на ssd ставится - лучше сделать равным размеру памяти, чтобы полный дамп влез. Место на sata достаточно дешёвое, и даже на sas лишние 10 гиг на фоне сотен штатных -- потеря небольшая. Впрочем, кому как. Главное, не меньше 2 гигов.

Со свопом ещё нюанс: если мы начали свопиться, и вдруг какой-то диск выпадает -- есть огромный шанс словить kernel panic, поэтому надо будет или каким-то образом зеркалировать его, или создавать в файле уже на zfs.

# gpart add -s 4G -t freebsd-swap ad6

Теперь создадим основной раздел

# gpart add -t freebsd-zfs ad6
ad6p3 added

# gpart show ad6
=> 34 625142381 ad6 GPT (298G)
34 2014 - free - (1M)
2048 256 1 freebsd-boot (128k)
2304 8388608 2 freebsd-swap (4.0G)
8390912 616751503 3 freebsd-zfs (294G)

Разметка закончена.
Создадим основной пул.

куда примонтируем, название пула, какие диски
нюанс: у mdadm есть опция missing, что полезно при сборке 1 или 10 рейда без части дисков (если на второй части рабочие данные например). У zfs, насколько я понял, штатно такого не сделать. Или создать sparse-файл размером как диск (даст ли?), и сразу его отключить (zpool offline) и стереть, или создать пул на 1 диск и потом добавить в него второй. Неприменимо для raidz, насколько я знаю - там extend не делался раньше, только переносом пула.
Сделать зеркало из простого диска -- zpool attach (pool) (disk) (new disk)

# zpool create -O atime=off -m /mnt/zfs pool ad6p3

Пора поставить загрузчик.
# gpart bootcode -b /boot/pmbr ad6
bootcode written to ad6

Для выполнения мы должны иметь этот самый /boot/pmbr в основной системе.
PMBR это Protective MBR
Это своеобразная "заглушка", что диск размечен.

Дальше надо записать основной загрузчик.
# gpart bootcode -p /boot/gptzfsboot -i 1 ad6

-i 1 - это первый раздел, который freebsd-boot, в gpart show 3 колонка.

(впрочем, можно написать просто # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad6)

Что за файлы есть в /boot и зачем они нужны -- очень хорошо описано тут:
http://bu7cher.blogspot.com/2011/05/freebsd.html

Дальше начинается шаманство, которое называется "разделение пула на датасеты". Тут есть множество схем.
Поскольку созданные разделы делят весь объем диска, не надо долго высчитывать, где сколько места нужно, поэтому имеет смысл создавать по датасету на основные разделы. Вдобавок, это облегчает работу со снапшотами. Хотя меру надо знать. Ну и добавить-удалить раздел не проблема.

# zfs create pool/usr
# zfs create pool/usr/home
# zfs create pool/var
# zfs create -o exec=off -o setuid=off -o readonly=on pool/var/empty
# zfs create -o setuid=off pool/tmp
# chmod 1777 /mnt/zfs/tmp
# zfs create -o compression=on -o exec=off -o checksum=off pool/var/log

Дальше можно создать usr/ports, usr/src, usr/obj, var/db, var/log, var/run, var/mail итд.

Для веб серверов я дополнительно выделяю
# zfs create pool/var/db
# zfs create pool/var/db/mysql
# zfs create pool/var/www

Некоторые говорят - зачем к примеру выделять usr/ports. Кто-то выделяет, чтобы поставить сжатие на порты. Но в данном случае выделяется ради снапшотов usr.

Также не забываем про права. Дело в том, что к примеру /var/db/mysql с дефолтными правами вполне может не заработать.
# chown mysql:mysql /var/db/mysql
# chmod 0700 /var/db/mysql

Имеет смысл рассматривать разделение для перевода основной части системы в read-only, а всё изменяемое снэпшотить.

А теперь накатываем систему.
Тоже много вариантов. Через rsync с основной системой, через make world, с ливсд выполнением пачки install.sh...


# make DESTDIR=/mnt/zfs installkernel KERNCONF=WM8
# make DESTDIR=/mnt/zfs installworld
warning: /tmp должен быть, быть достаточной ёмкости и не содержать опции noexec
Сразу перекинем порты
# portsnap -p /mnt/zfs/usr/ports/ extract
И сорцы
# rsync -avS /usr/src/ /mnt/zfs/usr/src/
Но etc окажется почти пуст.
# make DESTDIR=/mnt/zfs distrib-dirs distribution

Но после перезагрузки пул не найдёт -- надо скопировать информацию о нём
# cp /boot/zfs/zpool.cache /mnt/zfs/boot/zfs/

После этого нужно настроить boot/loader.conf, прописать rc.conf, make.conf, fstab итд.

Сделаем чрут и донастроим
# chroot /mnt/zfs /bin/csh

loader.conf:
## поддержка загрузки
# echo 'zfs_load="YES"' >> /boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf
##
# echo 'vfs.zfs.prefetch_disable=1' >> /boot/loader.conf

## если памяти меньше гига -- без этих строк будет падать. если больше - лучше не добавлять.
# echo 'vm.kmem_size="330M"' >> /boot/loader.conf
# echo 'vm.kmem_size_max="330M"' >> /boot/loader.conf
# echo 'vfs.zfs.arc_max="40M"' >> /boot/loader.conf
# echo 'vfs.zfs.vdev.cache.size="5M"' >> /boot/loader.conf
##
# echo 'loader_logo="beastie"' >> /boot/loader.conf

Также надо в rc.conf вписать строку для автомонтирования пулов
echo 'zfs_enable="YES"' >>/etc/rc.conf
Без этой строки автомонтирования нет как минимум в обычной системе, когда корень не на zfs.

также надо вписать пользователей, поставить им пароль, пароль руту (а то будет не войти потом), настроить временную зону...

Теперь надо сделать загрузку с pool. Главное - не делать zfs set mountpoint=/ pool - получим error: failed to initialize ZFS library

Я загрузился так:
# загружаемся с ZFS (loader prompt)
load zfs
set vfs.root.mountfrom=zfs:pool
boot
# добавляем в loader.conf(5) поддержку zfs и точку
# монтирования / (корня)
# //после загрузки.
echo zfs_load=YES >>/boot/loader.conf
echo vfs.root.mountfrom=\"zfs:pool\" >>/boot/loader.conf

При этом корректно прописались все пути в пуле. Хотя есть подозрение, что у меня все пути были legacy, а в некоторых доках при создании датасетов им прописывают mountpoint - тогда надо менять.

Есть вариант через
# export LD_LIBRARY_PATH=/mnt/pool/lib
# zfs umount -fa
# zfs set mountpoint=legacy pool
# zfs set mountpoint=/tmp pool/tmp
# zfs set mountpoint=/usr pool/usr
# zfs set mountpoint=/var pool/var
Сделал только 3 первые команды, забыв про /usr - система не загрузилась.

Теперь размечаем второй диск так же, ставим загрузчики.
hint: сделать копию разметки (без данных, надо будет тоже ставить загрузчик итд):
gpart backup /dev/ada0 | gpart restore /dev/ada1
!!! не перепутать диски!
warning: надо сразу проверить, что размеры дисков равны или начинать создание на более "мелком" диске. Иначе потом зеркало будет не создать без ужимания пула.
Видел вариант через cfdisk или fdisk с копированием структуры, но потерял.

Добавим второй (подготовленный) диск в зеркало
# zpool attach pool ad6p3 ad4p3
В данном случае - имя пула, диск в пуле (первый), наш второй диск.

zpool status покажет оба диска, новый будет ONLINE (resilvering)
Ждём окончания и можно работать. Если что - можно выполнить zpool scrub pool, но во фре это занимает весьма много времени. И видим ещё преимущество zfs -- resilvering у меня делался только для данных, это было порядка 50 гигов из 320. Это весьма быстрее, чем для целого диска.

Также соберём зеркало из своп-областей
gmirror label gm0-swap /dev/ad4p2 /dev/ad6p2
Или в варианте через UUID, что даже надёжнее.
Вписываем в fstab полученное зеркало, ребутимся, радуемся.

Использованные материалы (имеет смысл их хотя бы просмотреть)
http://nix-sa.blogspot.com/2011/04/freebsd-zfs-gpt.html
http://www.opennet.ru/tips/info/1844.shtml
http://wiki.opennet.ru/ZFS_%D0%B8_FreeBSD
http://kosmoflyko.blogspot.com/2010/11/freebsd-zfs.html
http://wiki.lissyara.su/wiki/%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D1%81_ZFS-mirror_%D0%BD%D0%B0_GPT_%D0%B2%D0%BE_FreeBSD

Просто полезная дока
http://xgu.ru/wiki/ZFS

четверг, 9 июня 2011 г.

ZFS

http://blog.levsha.me/search/label/ZFS

Есть полезная инфа. А главное -- Пляски с ZFS и Восстановление ZFS-пула с помощью подручных средств

С 28 версии появилась опция "Поддержка команды "zpool import -F", позволяющей перемотать поврежденный пул к состоянию, соответствующему более ранней группе транзакций;"
http://www.opennet.ru/opennews/art.shtml?num=27828

gpart: выравнивание для дисков с 4к секторами

В принципе, когда это нужно?
Сейчас всё больше дисков выходит с такими секторами, вроде тех же WD EARS. Не-выравнивание на скорость чтения мало влияет за счет prefetch и чтения "с запасом", но значительно влияет на скорость записи.
Также может пригодиться для ssd, там тоже это может дать прирост скорости. А если использовать TRIM, выровнять и выставить блоки в 128к, по идее в длительном периоде скорость станет еще выше. Но надо проверить.

win7 - штатно выравнивает разделы на 1мб.

freebsd - пока или извращаться с биосом, выставляя CHR дискам, или ждать freebsd 9 с поддежкой gpart -a 4k
линк 1 линк 2

Для zfs также есть интересный скрипт:
http://blog.levsha.me/2010/10/advanced-disk-format-on-freebsd.html

Linux - штатно (пока) выравнивания нет, в новых версиях то ли сделали, то ли скоро сделают. parted уже умеет выставлять размер (кроме CentOS 5.х).

"Помимо этого есть ещё мнение самого gparted, о том, что лучшее положение тома — кратно мегабайтам. Таким образом, итоговые требования звучат так: том должен начинаться и заканчиваться на величинах, кратных 4Мб."
линк

В Linux такие диски можно легко разбить на «ровные» разделы стандартной утилитой fdisk, достаточно запустить fdisk с ключом -c для отлючения «режима соместимости с DOS». Также можно использовать -u для отображения размеров в секторах вместо цилиндров, для наглядности. Процесс создания разделов обычный, но fdisk будет подбирать сектора кратные 8 как начальные для каждого раздела, и даже резервировать «нужные» 48 секторов между логическими разделами. Ну не чудо?
линк

Мнение самого WD:
http://wdc.custhelp.com/app/answers/detail/a_id/5655

The Linux partition editor: parted, has an alignment option to ensure that Advanced Format drives are correctly configured from version 2.1:

-a alignment-type, --align alignment-type
valid alignment types are:
none Aligns to 512 byte sector boundaries.
cylinder Align partitions to cylinders.
minimal Use minimum alignment: 4KB on AF drives
optimal Use optimum alignment: 1MB boundaries

Ещё интересная дока:
http://rlab.ru/doc/4k_hdd_for_linux.html
(когда используется MBR)

СКС: Маркировка кабелей

http://habrahabr.ru/blogs/sysadm/119609/

make: permission denied

Стал обновлять с 7.2 на 8.2... Словил ошибку на make installworld
make: permission denied
Долго ломал голову, откатил до 8.0.. Выдавало

...
cp -R ${PATH_LOCALE:-"/usr/share/locale"} /tmp/install.BEFb1OYh/locale
cd /usr/src; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=amd64 MACHINE=amd64 CPUTYPE= GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/tmp/install.BEFb1OYh LD_LIBRARY_PATH=/tmp/install.BEFb1OYh PATH_LOCALE=/tmp/install.BEFb1OYh/locale make -f Makefile.inc1 __MAKE_SHELL=/tmp/install.BEFb1OYh/sh reinstall; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=amd64 MACHINE=amd64 CPUTYPE= GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/tmp/install.BEFb1OYh LD_LIBRARY_PATH=/tmp/install.BEFb1OYh PATH_LOCALE=/tmp/install.BEFb1OYh/locale rm -rf /tmp/install.BEFb1OYh
make: Permission denied
*** Error code 126

Stop in /usr/src.
*** Error code 1

Шикарная ошибка, в индусском стиле.
Что смешнее -- truss ничего тоже не показал толком. Но в данном случае - /tmp/install.BEFb1OYh создался, но из-за опций /tmp вылезла данная ошибка.
Строка из fstab:

/dev/mirror/gm0s1d /tmp ufs rw,async,nosuid,noatime,noexec 2 2

Удалил nosuid, noexec -- заработало.

понедельник, 6 июня 2011 г.

Конвертация масок

http://life-in.tlms.ru/index.php

Запросим 1.1.1.1/29
Пример выдачи:

Address: 1.1.1.1 00000001.00000001.00000001.00000 001
Netmask: 255.255.255.248 = 29 11111111.11111111.11111111.11111 000
Wildcard: 0.0.0.7 00000000.00000000.00000000.00000 111
Network: 1.1.1.0 00000001.00000001.00000001.00000 000 (Class A)
Broadcast: 1.1.1.7 00000001.00000001.00000001.00000 111
HostMin: 1.1.1.1 00000001.00000001.00000001.00000 001
HostMax: 1.1.1.6 00000001.00000001.00000001.00000 110
Hosts/Net: 6

Минус gate, итого клиенту будет 5 айпи.

HP: CUDA и другая новая начинка для сверхмасштабируемых серверных комплексов

CUDA и другая новая начинка для сверхмасштабируемых серверных комплексов
http://habrahabr.ru/company/hp/blog/105998/

OpenCL

http://habrahabr.ru/tag/OpenCL/

OpenCL. Что это такое и зачем он нужен? (если есть CUDA)
http://habrahabr.ru/blogs/hi/72247/

OpenCL. Подробности технологии
http://habrahabr.ru/blogs/hi/72650/

OpenCL. Практика
http://habrahabr.ru/blogs/hi/73526/

OpenCL: Как заставить эту штуку работать
http://habrahabr.ru/blogs/hi/116579/

Попытался рассмотреть GPGPU для web-сферы... Пожалуй, может иметь смысл для переноса части расчетов mysql, но не для апача. А переписать мускуль под эту задачу -- надо с год, причём программеру "в теме".

Ещё.
OpenCL: универсальность и высокая производительность или не так все просто?
http://habrahabr.ru/blogs/hi/125398/

Использование GPGPU для сжатия данных (Часть I)
http://habrahabr.ru/blogs/hi/124210/

воскресенье, 5 июня 2011 г.

GNS3

Виртуализация Juniper JunOS в среде GNS3
http://habrahabr.ru/blogs/network_technologies/111172/

Установка Juniper JunOS 10 M/T series
http://habrahabr.ru/blogs/network_technologies/111974/

Вообще про GNS3
http://habrahabr.ru/tag/GNS3/

суббота, 4 июня 2011 г.

gentoo

Настраивал замену шлюза, и обнаружил, что штатно вообще нет vi(m)... Дожили.
Также не оказалось syslog, тоже доставил syslog-ng
Установка ядра - отдельная песня... Хотя долгие часы подборки ядра, возни с grub и его загрузки даром не прошли -- чтобы не бегать с винчои лишний раз, много читал и думал. А вот в single mode оно грузиться так и не захотело...

http://habrahabr.ru/blogs/linux/13095/
Hardened Gentoo: установка

пятница, 3 июня 2011 г.

ZFS Pool Version 29

http://hub.opensolaris.org/bin/view/Community+Group+zfs/29

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

UPD
http://www.mail-archive.com/freebsd-stable@freebsd.org/msg116307.html
Файловая система ZFSv28 портирована в ветку FreeBSD 8-STABLE

Ещё не 29, но уже остался 1 шажок.

bitrix: Инструкция по настройке кеширования

http://dev.1c-bitrix.ru/api_help/perfomance/perfmon_panel.php?print=Y

Много нюансов, включая разделяемый кэш, глючность APC, особенности работы с fast-cgi режимом...

четверг, 2 июня 2011 г.

10 гигабитный линк дома?

http://habrahabr.ru/blogs/hardware/120393/

Вдогонку.
Что дает серверам 10-гигабитный Ethernet?
http://habrahabr.ru/company/hp/blog/118324/

Про кабели:
Совместимость включает в себя пассивные кабели прямого подключения (passive direct attach). Пассивные они потому, что в разъем не встроен активный контур сигнального репитера. Кабели в этом случае имеют тип Twinax, несколько стандартных вариантов длины и снабжаются коннекторами SFP+ с двух сторон. Опционально пассивный коннектор в таких кабелях может иметь встроенный EEPROM для автоматического определения характеристик кабеля. Кабели Twinax являются недорогим решением для расстояний не более семи метров, в отличие от оптических кабелей, работающих на расстояниях от 80 до 300 метров. Использование Twinax подразумевает более тщательное планирование, потому что у интерфейсных карт или свитчей может просто не оказаться данных для автоматического определения типа кабеля и настройки скорости передачи данных.

twinax - макс 7м. Зато карта 10к (первый линк) + кабель 2-3к

Также по линкам - интересны комменты.

Как стать системным администратором — пособие для начинающих

Часть 1
Часть 2
Часть 3

среда, 1 июня 2011 г.

почему SATA диск "отжирает" два порта в SAS экспандере.

В случае, если Вы используете SAS бэкплейн и SATA диск, один порт пропадает вследствие особенностей реализации SAS коннектора ("SAS backplane receptacle connector") на бэкплейне. Этот коннектор имеет два физических SAS линка. При использовании SATA диска с таким бэкплейном, работает только один физический линк, а второй пропадает.

Использование SATA бэкплейна не создаёт таких проблем, но и не позволяет использовать SAS диски.

Для наглядности (см. стр. 12 "SAS plug and backplane receptacle connectors") - http://www.scsita.org/aboutscsi/sas/tutorials/SAS_Physical_layer.pdf

http://forum.ixbt.com/topic.cgi?id=66:7568#9