пятница, 22 апреля 2011 г.

crossdomain.xml

Обнаружили в логах поиски файла crossdomain.xml
Оказалось, это от какого-то флэш-плеера.

Извеcтно что Flash Player может загружать данные из внешних источников. Это могут быть файлы XML находящиеся на сервере, данные получаемые от сценариев, shared библиотеки (swf-файлы). Но, по умолчанию, такое возможно если загружаемые файлы находятся в одном домене(на одном сайте) с загружающим их файлом (swf).
Что бы сделать shared-библиотеки, XML и другие данные доступными для SWF в других доменах, используйте файл с кросс-доменными правилами (cross-domain policy file). Файл с кросс-доменными правилами — XML файл, который дает возможность серверу «показать», что его данные и документы доступны для SWF файлов, находящихся в указанных в crossdomain.xml доменах. Любой SWF файл, который находится в домене, указанном в файле с правилами на сервере, будет иметь доступ к файлам и данным на этом сервере.
Когда Flash документ пытается получить доступ к файлу в другом домене, Flash Player автоматически загружает файл с правилами с этого домена. Если домен, в котором находится Flash документ, включен в файл с правилами, он получает доступ к данным.

отсюда

Получается, это кто может читать файлы с нас. Обычно можно разрешить *

Правила для разрешения всего:

<cross-domain-policy>
<allow-access-from domain="*" to-ports="80"/>
</cross-domain-policy>


Возможно, еще требуется xml-тэг
<?xml version=\"1.0\"?>
(вопрос про экранирование, надо ли)

Линки навскидку:
http://pulseneon.ru/archives/7
http://uppod.ru/talk_189

среда, 20 апреля 2011 г.

debian: dig: command not found

Штатно в дебиляне много чего нужного нет.

Доставляем утилиту dig, которая лежит в пакете dnsutils
apt-get update && apt-get install dnsutils

Впрочем, иногда достаточно команды host, она тоже умеет ключ -t (тип запроса), в несколько запусков получается вся информация как через dig

вторник, 19 апреля 2011 г.

Работаем с hardlinks

В отличии от символических ссылок (softlink), которые являются файлом с адресом оригинального файла, хард линки (hardlink) на файл это просто разные имена одного файла. (тут чуть понятнее)

Возьмём для примера CentOS, с настройкой сетевого интерфейса.
# ls -la /etc/sysconfig/networking/devices/
total 24
drwxr-xr-x 2 root root 4096 Nov 16 20:23 .
drwxr-xr-x 4 root root 4096 Nov 16 20:23 ..
-rw-r--r-- 3 root root 243 Jul 7 2010 ifcfg-eth0

Мы видим единственный файл, где после атрибутов идёт цифра 3 - это сколько имён у нашего файла.
Проверим - покажем inode-ы файлов (что-то вроде уникального номера файла для одной ФС)

# ls -lai /etc/sysconfig/networking/devices/
total 24
2032307 drwxr-xr-x 2 root root 4096 Nov 16 20:23 .
2032306 drwxr-xr-x 4 root root 4096 Nov 16 20:23 ..
2031627 -rw-r--r-- 3 root root 243 Jul 7 2010 ifcfg-eth0

Теперь проверим в других местах...

# ls -lai /etc/sysconfig/networking/profiles/default/ifcfg-eth0
2031627 -rw-r--r-- 3 root root 243 Jul 7 2010 /etc/sysconfig/networking/profiles/default/ifcfg-eth0

# ls -lai /etc/sysconfig/network-scripts/ifcfg-eth0
2031627 -rw-r--r-- 3 root root 243 Jul 7 2010 /etc/sysconfig/network-scripts/ifcfg-eth0

Первое число и есть наш номер inode, и мы видим, что он одинаковый.
Если нам надо создать хард-линк -- это делается командой ln
Если надо найти все файлы с данным inode -- это делается через find, ключ -inum или просто -samefile. Пример:
# find /etc/ -samefile /etc/sysconfig/networking/devices/ifcfg-eth0 -print
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/networking/profiles/default/ifcfg-eth0
/etc/sysconfig/networking/devices/ifcfg-eth0


И небольшое замечание: если у нас есть система, которая не хочет правильно работать с адресом (получать dhcp вместо статики или наоборот) - что-то не в порядке с указанными файлами. Надо проверить их и при необходимости пересоздать линк.

понедельник, 11 апреля 2011 г.

Gmail: Username is reserved for email list only

При попытке создать ящики (на своих доменах) abuse и postmaster сервер скажет "Username is reserved for email list only". Эти ящики используются Google Team для обработки спама и происшествий. Если есть желание получать себе копии -- можно создать группы abuse и postmaster и добавить туда нужные адреса.
Это раздел Groups (Группы)

Описание на офсайте:
http://www.google.com/support/a/bin/answer.py?answer=33389

пятница, 8 апреля 2011 г.

PHP и FPM

Некоторые говорят, что FPM пока несколько нестабилен. И просто не везде подходит.
Во freebsd можно выбирать, собирать с этим патчем или нет (даже на 5.3.6), тогда как в centos 5.6 включена версия с патчем, и как я понимаю, возможности его убрать штатно нет. Только пересобирать ручками.
Про дебиан не в курсе, но думаю, там тоже оно включено.
gentoo тоже в шоколаде.. )) спасибо USE флагам.

Вообще, он штатно включен с версии 5.3.3

среда, 6 апреля 2011 г.

arc_summary.pl

Есть утилита для ZFS, которая показывает статус ФС в понятном виде - arc_summary.pl
офсайт, с которого не совсем понятно, что загружать.
отсюда берется линк http://jhell.googlecode.com/files/arc_summary.pl

Есть последняя версия из HEAD тут: http://jhell.googlecode.com/svn/base/head/scripts/zfs/arc_summary/arc_summary.pl

Description: While ARC is an amazing achievement its memory consumption raises doubts and questions in many administrators and users who view memory as a precious commodity. The Kstat facility provides access to a variety of ARC counters, but interpretting these properly is complex and non-intuative in their raw form, without spending several hours in the arc.c code. The purpose of arc_summary.pl is to provide a historical analysis of the ZFS ARC, to answer such questions as:

ARC is consuming 80% of memory. Is the sacrifice worth it?
What are the various sizes and limits that make up ARC?
What does the cache churn look like?
How efficient is prefetch? Should I disable it?

Также есть интересная дока: http://www.cuddletech.com/blog/pivot/entry.php?id=979

Please note, this report is cumulative since boot. It should compliment the arcstats tool. arcstat can tell you want is happening, arc_summary can tell you what has been happening. Any serious ZFS deployment should have both of these bad boys around in your toolbag.

воскресенье, 3 апреля 2011 г.

SRS - что это такое

При установке exim из портов есть опция Sender Rewriting Scheme (SRS)
Для чего это нужно?

"В связи с некоторым распространением SPF (sender policy framework) возникает такая проблема: администратор домена отправителя пример godaddy.com прописывает в ДНС для своего домена текстовую запись, указывая с каких ip-адресов все остальные почтовые сервера имеют право получать письмо с обратным адресом этого домена. Так же этот администратор может рекомендовать запретить принимать письма с остальных ip-адресов. Теперь предположим, что на Ваш сервер пример mail.mydomain.ru пришло письмо с обратным адресом от такого домена пример info@godaddy.com И предположим, что у Вас стоит переадресация для получателя пример noc@mydomain.ru-->vasya@yandex.ru. Тогда Ваш почтовый сервер пересылает это письмо. Итак, что видит сервер того домена на который идет переадресация: с ip-адреса Вашего сервера приходит письмо с обратым адресом info@godaddy.com. Сервер делает запрос TXT записи для домена godaddy.com и получает ответ

"v=spf1 include:spf.secureserver.net -all"
Поскольку Ваш сервер mail.mydomain.com или его ip-адрес не вклчюен в spf.secureserver.net а следующая инструкция -all запрещает прием от всех остальных ip-адресов, сервер получателя отвергает такое письмо."
Отсюда
Это выдержка из начала, там больше.

Подробная официальная дока: http://www.libsrs2.org/srs/srs.pdf

(что такое SPF, уже было у меня

О настройке SRS в exim: http://wiki.exim.org/SRS

среда, 30 марта 2011 г.

Ставим Net::OpenID

Оказалось, штатно нет OpenID библиотек для перла. Нашлось оно в RPMForge
"RPMforge является результатом сотрудничества Dag-а,Dries-а, и других создателей пакетов. Он обеспечивает более 4000 пакетов для CentOS, в том числе MPlayer, XMMS-mp3 и другие популярные медиа программы." отсюда

Ставим RPMForge
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

Для CentOS5
rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.`uname -i`.rpm
Почему-то так не прошло, ругалось на непонятную ошибку. Делаем тогда примерно по офдоке:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.`uname -i`.rpm; rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm && rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm

Для CentOS6 заменяем el5 на el6

После этого появляется пакет
perl-Net-OpenID-Server.noarch
Впрочем, надо ещё Net::OpenID::Consumer, который в rpmforge есть только под 6 центось.

Вообще, он есть тут: http://packages.sw.be/perl-Net-OpenID-Consumer/
Но при попытке скачать получаем not found...

вторник, 29 марта 2011 г.

NFS: учимся монтировать

[черновик]
Большая дока
http://www.time-travellers.org/shane/papers/NFS_considered_harmful.html

Основной файл с тем, что экспортируем - /etc/exports
А вот то, что там пишется, в centos и freebsd отличается.
Пример задачи: монтируем /mnt, с возможностью монтировать любую папку оттуда, на запись
Есть ещё проблема - 3 и 4 версии весьма отличаются, демонами, параметрами итд.

FreeBSD:
/mnt -maproot=0 -alldirs

CentOS:
/mnt 192.168.2.0/24(rw,no_root_squash)

Про solaris: http://solarisblog.ru/networks/osnovy-nfs-v-os-solaris
Варианты монтирования клиентом:
вручную через mount -t nfs
через fstab
через automount

Оптимизация
rsize - "буфер чтения", число байт для чтения файла от сервера. На стадии установления соединения выясняется максимальный размер этого буфера. Чем больше, тем быстрее работа NFS, но в случае сбоя и больше времени на восстановление. На плохом канале большой буфер может сделать соединение нерабочим. В локалке можно выставить 32768

wsize - "буфер записи". См выше.

Выставляется в лине и фре по разному.
linux: rsize=16384,wsize=16384
freebsd: -w=32768,-r=32768
Более того, вывод будет отличаться:
linux: (rw,rsize=16384,wsize=16384,addr=192.168.2.15)
freebsd: (nfs, asynchronous, noatime)
Опции немного разные, но главное - в лине прописаны эти буферы, а во фре -- нет.

Монтирование на клиенте.
1) fstab
Стандартная строка выгляжит так:
server:/url /local/url nfs defaults 0 0

Дополнительные ключи
Размеры буфера чтения и записи.
freebsd: (rw|ro),(tcp|udp),(intr|nointr),(hard|soft),noatime,(nfsv3|nfsv4),(bg|fg),-w=32768,-r=32768,timeo=300

Есть (не)маленький шанс поймать в messages ошибки
kernel: lockd: server nfs-server not responding, timed out
last message repeated 15 times
В частности, у меня была такая ошибка при линковке линя к фря-серверу. Думаю, надо тюнить систему, но не совсем понятно, куда. Или это просто баг?
В общем, использование tcp даже в локалке обязательно. Сильно повышает стабильность. А на гигабите udp может быть и опасен.

понедельник, 28 марта 2011 г.

Редирект с http на https

Через .htaccess

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

отсюда
В комментах тоже много интересного.
ещё
и даже такое...

На PHP
function redirectToHTTPS() {
if($_SERVER['HTTPS']!=="on") {
$redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location:$redirect");
}
}

Nginx
Прописываем в нужный server код:
location / {
rewrite ^/(.*) https://$host/$1 permanent;
}
Это не проверял. В теории должно работать. (вариант: https://$host$1 permanent).
!!! Для новых версий предпочтительно использовать новую конструкцию:
return 301 https://freebsd.ru$request_uri;

Вообще, для nginx правильнее определить отдельный конфиг для таких редиректов (опция server_name максимально соответствует нужному домену, прописан listen под нужный порт, и весь конфиг - сам server_name и return 301, этот вариант самый быстрый)

perl
$q = new CGI;
print $q->redirect(“http://www.new-url.com/”);

Линки
http://nginx.org/en/docs/http/converting_rewrite_rules.html
http://wiki.nginx.org/IfIsEvil
http://devaka.ru/articles/redirect-301

четверг, 24 марта 2011 г.

среда, 23 марта 2011 г.

Ещё о репликации

Есть сервер, надо поднять ему slave.
Раньше была команда load data from master, но потом её объявили deprecated. Сейчас 2 метода:
1) rsync/csync2/etc
2) dump - restore

Оба сервера должны быть предварительно подготовлены -- создан юзер для репликации, прописаны server-id, bin-log итд.
На слейве - прописаны базы/таблицы для репликации.
Если сихронизировать через rsync, базы на слейве надо предварительно создать, причём крайне желательно, чтобы такие параметры как язык совпадал. Движок (engine) совпадать должен обязательно! И так не получится перенести innodb. Для dump можно указать ключ
Пользователи и права переносятся руками.

Любые такие операции выполняются с flush tables with read lock, show master status

По идее, можно остановить мастер, выполнить файловую синхронизацию.. но как в этом случае узнать позицию в логе? А без неё не запустить репликацию, так что получили п.1

1) сихронизируем (пока без остановки - главное, перегнать основной объем);
flush, show, делаем синхронизацию, снова show чтобы проверить, что ничего не убежало, снимаем лок (unlock tables), меняем мастера.

Но тут обнаружилась проблема: первая синхронизация шла со скоростью порядка 10мбит/с (канал такой, но проектам хватает), а вот вторая...
sent 2751559 bytes received 2278456 bytes 3617.41 bytes/sec
3кб/с! Заняло это минут 20, что вызвало 500 ошибку. А изменений было относительно немного... Вывод - этот метод непригоден для нагруженных проектов, с часто изменяемыми данными. Да и просто большими базами. Но хорошо работает на копировании с slave-сервера, подробнее есть ниже (с остановкой sql_thread и переносом файлов). И только для myisam; innodb в режиме разделения по файлам.

2) dump
могут пригодиться ключи
--master-data - обязательный ключ. Включает в себя CHANGE MASTER TO - устанавливает позицию в логе итд. Можно дописать =1 или 2: при 1 CHANGE MASTER TO сменит мастера и позицию, при 2 CHANGE MASTER TO закомментирован и несёт скорее информативный характер.
--delete-master-logs - имеет смысл только если слейв 1 или для бэкапов.
--single-transaction - в 1 поток, это несколько быстрее, но ставит глобальный лок на некоторое время. Имеет смысл только с транзакционными движками типа InnoDB
--create-db - создать базу
--opt - ключ, который включает в себя массу других, наиболее часто применямых. Рекомендуемо. Впрочем, если верить ману, он включен по умолчанию.


Важный момент: если надо перенести больше 1 базы - позиция должна быть неизменной или для каждой заливки надо делать flush, dump, restore, иначе данные могут оказаться разными на разных серверах.

В man mysqldump описан ещё вариант создания слейва, если уже есть хотя бы один, искать описание --master-data
Приведу тут пересказ:
1. Остановить SQL поток на слейве
mysql> STOP SLAVE SQL_THREAD;
mysql> SHOW SLAVE STATUS;
Нужны поля Relay_Master_Log_File и Exec_Master_Log_Pos
2. Дампим данные
shell> mysqldump --master-data=2 --all-databases > dumpfile

3. запускаем слейв
mysql> START SLAVE;

4. На новом слейве загружаем дамп
shell> mysql < dumpfile 5. На новом слейве меняем мастера mysql> CHANGE MASTER TO
-> MASTER_LOG_FILE = 'file_name', MASTER_LOG_POS = file_pos;
Может потребоваться также задать такие значения как MASTER_HOST

Ещё момент - при использовании ZFS можно сделать lock, дождаться его (как?), сделать snapshot, получить master_pos, unlock. И теперь можно перекидывать данные или сам снапшот на другой сервер (если делаем полную копию)

12.5.2.1. CHANGE MASTER TO Syntax
CHANGE MASTER TO option [, option] ...

option:
MASTER_HOST = 'host_name'
| MASTER_USER = 'user_name'
| MASTER_PASSWORD = 'password'
| MASTER_PORT = port_num
| MASTER_CONNECT_RETRY = interval
| MASTER_LOG_FILE = 'master_log_name'
| MASTER_LOG_POS = master_log_pos
| RELAY_LOG_FILE = 'relay_log_name'
| RELAY_LOG_POS = relay_log_pos
| MASTER_SSL = {0|1}
| MASTER_SSL_CA = 'ca_file_name'
| MASTER_SSL_CAPATH = 'ca_directory_name'
| MASTER_SSL_CERT = 'cert_file_name'
| MASTER_SSL_KEY = 'key_file_name'
| MASTER_SSL_CIPHER = 'cipher_list'
http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html

--размышления--

Вот есть у нас сервер, к примеру с десятком баз, реплицируется допустим 8. Как переносить базы на другой сервер, с минимальным простоем? Если делать к примеру mysqldump на каждую базу, то master-data будет показывать на разные записи. Что будет происходить при загрузке этих дампов? Как обеспечить тогда синхронность данных? Делать после каждой заливки slave start,...,slave stop и следующую заливать? Залить просто все, потом на slave start оно само выровняет? Сомневаюсь.
Обидно, что нет команды resync например, чтобы сервер сам проверил все записи и нужные слил. Важно, чтобы еще с innodb работало. С инной даже проще - делаем транзакцию (и получаем целостный набор данных), и сохраняем в переменные текущую лог-позицию. После синхронизации завершаем транзакцию и выставляем лог. Причем для оперативности можно relay-log с текущей позиции сразу вести, и по окончанию перелива быстро прогнать его.

вторник, 22 марта 2011 г.

Цинизм в IT: Феерически о Node.js

Цинизм в IT: Феерически о Node.js: "Это серверный однопоточный джаваскрипт-движок на событиях (libev), состоящий из гугловского якобы высокопроизводительного JIT-компилятора V8 и библиотеки асинхронного ввода-вывода к нему...."

понедельник, 21 марта 2011 г.

Centos и 2Tb WD

Купил диск EARS-серии, который "4k sectors". Хороший вариант для бэкапов - тихий, холодный, ёмкий. Заодно пора переходить на GPT в связи с лимитами MBR.
На самом деле, это имеет смысл и для SSD делать -- у них тоже сектор может быть больше.

Вставляем диск, его определило как /dev/sdf

У нас 2 проблемы: Размер сектора должен быть кратен 4кбайтам и надо выравнивать разделы. Винда выравнивает на 1мб, fdisk тоже в последних версиях.
fdisk: Version 0.6.6 introduces a Windows-style 2048-sector (1MB) alignment for all unpartitioned disks and attempts to infer the alignment used in the past on disks with existing partitions.
Также могут быть проблемы с загрузкой с диска, где сектор=4к.

Размечать диск можно несколькими способами:
1) через fdisk, указав размер цилиндров-голов так, чтобы получилась кратность 8
fdisk -H 224 -S 56
2) новые версии fdisk, которые имеют ключи -u -c. Это пакет util-linux-ng, в центоси он util-linux, причем нужна версия 2.18+, тогда как в системе 2.13. Более свежей не нашел, гугль не помог.
3) parted. Поддержка секторов >512 байт появилась только в конце 2010 года, в 2.х ветке. Опять же, в центоси он есть в 6.0, а в 5.5 нету нигде, включая всякие remi-test, epel-testing, c5-testing итд.
4) при форматировании задать размер блока в 4к. Но начало раздела надо выровнять!
mke2fs -j -b 4096 -i 4096 /dev/sdx

# parted /dev/sdf
GNU Parted 1.8.1
Using /dev/sdf
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print
Error: Unable to open /dev/sdf - unrecognised disk label.

(parted) help mklabel
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)

LABEL-TYPE is one of: aix, amiga, bsd, dvh, gpt, mac, msdos, sun, loop
Итак, мы видим варианты меток, нам нужен GPT

Но...

(parted) mklabel gpt
(parted) print

Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sdf: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Сектора в 4к пока не сделать.

Если попытаться запустить fdisk -l -v, получим
WARNING: GPT (GUID Partition Table) detected on '/dev/sdf'! The util fdisk doesn't support GPT. Use GNU Parted.

Итак.
fdisk -H 224 -S 56 /dev/sdf
u
n, p, 1, 2048,
w
Disk /dev/sdf: 2000.3 GB, 2000398934016 bytes
224 heads, 56 sectors/track, 311465 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes

Device Boot Start End Blocks Id System
/dev/sdf1 2048 3907029167 1953513560 83 Linux

mke2fs -j -b 4096 -i 4096 /dev/sdf1

Пока сойдёт, но потом всё-таки хочу сделать GPT с норм блоками.

То есть тоже старая версия...
В общем, или облом, или переходим на ветку 6.0. А пока можно через цилиндры при создании разделов делать.
А пока можно почитать Linux Not Fully Prepared for 4096-Byte Sector Hard Drives, Linux on 4KB-sector disks: Practical advice, офсайт
Практическая проверка подобного диска от тошибы

пятница, 18 марта 2011 г.

возня с mdadm

Понадобилось сделать несколько рейдов. В линуксе выбор небольшой: если нет аппаратного рейда, или dm-mapper для fake-raid, или mdadm. LVM тут не поможет никак, а нормальных фс типа zfs тут только btrfs, который пока еще бьет данные и в продакшене недопустим.
Попробуем mdadm как наиболее универсальное. Создадим для начала зеркало на 1 диске, указав второй как отсутствующий - missing
# mdadm --create --level=1 --metadata=1.0 sdb missing
mdadm: sdb does not exist and is not a 'standard' name so it cannot be created

# mdadm --create --level=1 --metadata=1.0 /dev/sdb missing
mdadm: no raid-devices specified.

# mdadm --create --level=1 --metadata=1.0 -n 2 /dev/sdb missing
mdadm: You haven't given enough devices (real or missing) to create this array

Сообщения об ошибке просто поражают точностью (подробно - дальше) и смыслом.

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

# mdadm --create test --level=1 --metadata=1.0 -n 2 /dev/sdb missing
mdadm: test does not exist and is not a 'standard' name so it cannot be created

После дальнейшего гугленья оказалось, что имя _обязано_ быть md*

# mdadm --create md2 --level=1 -n 2 --metadata=1.0 sdb missing
mdadm: md2 does not exist and is not a 'standard' name so it cannot be created

Это имя должно показывать в /dev...

# mdadm --create /dev/md5 --level=1 -n 2 --metadata=1.0 sdb missing
mdadm: Cannot open sdb: No such file or directory
mdadm: create aborted

Опа. Ну ладно, тут тоже хотим полный путь. (сообщения об ошибке гениальные, ага. Писано гуру для гуру)

И сделаю заодно ещё вещь: поскольку имена тут кривые, в мане всё-таки нашлась опция для указания своего имени --name=, причём допустимо только для метадаты 1.0+ версий (штатно 0.9).


# mdadm --create /dev/md5 --level=1 --metadata=1.0 -n 2 --name="1T" /dev/sdb missing
mdadm: /dev/sdb is too small: 0K
mdadm: create aborted

Ему мало диска в 1 терабайт... Шикарно.
Хотя тут может и косяк железа - после передёргивания диска оно заработало.

Мониторить надо через /proc/mdstat - ещё один сюрприз. Впрочем, есть
# mdadm --detail /dev/md5

Добавить второй диск потом можно через
#mdadm /dev/md5 --add /dev/sdd

После создания массива можно (и нужно?) скинуть информацию о массивах в конфиг
# mdadm --detail --scan >> /etc/mdadm.conf
Можно еще первой строкой вписать
DEVICE /dev/hd* /dev/sd*
(отсюда)

Просмотр состояния:
#mdadm --detail /dev/md5
#cat /proc/mdstat
В стате есть информация о перестройке массива, например процент выполнения, состояние дисков, ожидаемое время перестроения, скорость.

Можно настроить алерты.
# mdadm --monitor --scan --mail=you@domain.com delay=3600 --daemonise /dev/md0 /dev/md1
Этот момент нашел в гугле - долгое чтение мана про это просветления не дало, тут
К слову, статья большая и применима ко многим системам, только начало пропустить.

Несколько замечаний.
Многие советуют создавать раздел не на весь диск, а создав раздел и уже поверх него. Для дисков только с данными смысл есть, а вот для системных не так очевидно - установив новый загрузчик или изменив старый, надо для каждого из дисков выполнить обновление. В случае целого диска - рейд сам отзеркалит данные.
Если используется рейд, отличный от 1, надо убедиться, что в ядре есть драйвер для нужного уровня рейда, иначе получим "кусок тут, кусок там", системе непонятно, как грузиться, и больше она не загрузится. Особенно актуально для 5-6 уровней. Или /boot в начале каждого диска.. с ручной синхронизацией загрузчиков, в том числе после замены диска.
1.0+ метаинформация: 1.0 - в конце диска, 1.1 - в начале, 1.2 - начало+4к. Видимо, для совместимости с загрузчиком.
Ели надо перенести куда-то массив - у вас проблемы. Просто вынуть диски тут, вставить там - можно получить что угодно вплоть до потери данных. Хоть и есть mdadm --scan
Заменить диск, судя по всему, тоже задача нетривиальная, по ссылке выше - требуется использовать fdisk и править разделы. Это не аппаратный массив с "вынул старый - вставил новый", и не gmirror c gmirror forget;gmirror insert ...

Совсем непонятно, как сделать рейд из одиночного диска без его форматирования, причем чтобы метаинформация сохранялась.

UPD: Перенос Centos Linux 5 с одного диска на Soft Raid

Моя ошибка была в том, что я начал с манов, а надо было начинать отсюда:
Вики (рус) - там тоже есть инфа по работе с массивом.