Skip to content


Программный RAID в Linux

RAID will also not help you preserve your data if the server holding the RAID itself is lost in one way or the other (theft, flooding, earthquake, Martian invasion etc.)
(из Software-RAID-HOWTO)

Есть программный RAID-массив уровня 1. Однажды сервер прислал письмо, что с RAID-ом проблемы:

Date: Mon, 14 Jun 2010 11:18:44 +0300
From: mdadm monitoring <[email protected]>
To: [email protected]
Subject: DegradedArray event on /dev/md1:some.server.org

This is an automatically generated mail message from mdadm running on some.server.org
A DegradedArray event had been detected on md device /dev/md1.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid1] [raid6] [raid5] [raid4] [raid0]
md1 : active raid1 sdb1[0]
156288256 blocks [2/1] [U_]
md0 : active raid1 sdc3[1] sda3[0]
4192896 blocks [2/2] [UU]
unused devices: <none>

Здесь видно, что у массива md1 отвалился один из двух компонентов (знак подчеркивания вместо буквы U в /proc/mdstat). Через fdisk -l вычисляем имя второго компонента массива и видим, что на устройстве /dev/sdd вообще отсутствуют разделы:

[root@~]# fdisk -l /dev/sdd
Диск /dev/sdd: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
На диске /dev/sdd отсутствует верная таблица разделов

Для сравнения смотрим на второй диск массива:

[root@~]# fdisk -l /dev/sdb
Диск /dev/sdb: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр   Начало    Конец      Блоки  Id  Система
/dev/sdb1  *        1    19457  156288321  fd  Автоопределение Linux raid

Следовательно, нужно содать на sdd раздел типа "fd" (linux raid autodetect) и добавить этот раздел в массив.

[root@~]# fdisk /dev/sdd
Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-19457, по умолчанию 1):
Используется значение по умолчанию 1
Последний цилиндр или +size или +sizeM или +sizeK (по умолчанию 19457):
Используется значение по умолчанию 19457
Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)
Команда (m для справки): w
Таблица разделов была изменена!
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
 
[root@ ~]# fdisk -l /dev/sdd
Диск /dev/sdd: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр   Начало    Конец      Блоки  Id  Система
/dev/sdd1           1    19457  156288321  fd  Автоопределение Linux raid
 
[root@~]# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: re-added /dev/sdd1

Далее смотрим в /proc/mdstat и видим, что массив начал синхронизацию:

Personalities : [raid1] [raid6] [raid5] [raid4] [raid0]
md1 : active raid1 sdd1[2] sdb1[0]
  1562882 blocks [2/1] [U_]
  [===========>...] recovery = 76% (1194268/1562882) finish=4.3min speed=42M/sec

А если один из компонентов массива переходит в статус "Failed", то обычно помогает его ручное удаление из массива, а затем – добавление заново. Например:

[root@~]# grep md1 /proc/mdstat -A 1
md1 : active raid1 sdb1[1] sdd1[2](F)
      14659200 blocks [2/1] [_U]
 
[root@~]# mdadm --manage /dev/md1 --remove /dev/sdd1
[root@~]# mdadm --manage /dev/md1 --add /dev/sdd1

Чтобы управлять скоростью синхронизации, есть в ядре 2 параметра:

$ cat /proc/sys/dev/raid/speed_limit_min
1000
$ cat /proc/sys/dev/raid/speed_limit_max
200000

Это значения по умолчанию (в Кбайт/сек). Если нужно ускорить процесс, то делаем примерно так:

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

Posted in *nix, Howto.

Tagged with , .


Ограничение количества получателей в exim

Поскольку спамеры заинтересованы в отправке почты максимальному количеству получателей, они часто в одной SMTP-сессии передают множество команд "RCPT TO". Так как нормальный юзер такое будет делать очень редко (если вообще будет), то очень полезно ограничить количество получателей для одного письма для минимизации распространения спама через почтовый сервер. Для этого в exim предусмотерна опция recipients_max, числовое значение которой и устанавливает максимально допустимое число получателей одного письма. Если exim работает чисто как relay и не принимает почту для локальных доменов, то просто установки в exim.conf

recipients_max = 10

должно быть достаточно (число 10 взято для примера). В противном же случае, когда exim помимо relay-инга еще и является primary mx для некоторых доменов, использование recipients_max может вызвать проблемы, поскольку количество получателей для входящей почты также будет лимитироваться. Представим ситуацию, когда на сервере пару тысяч пользователей (обычное дело для провайдеров и freemail-сервисов) и 12 из них подписалось на одну и ту же полезную рассылку. При приведённой выше конфигурации почтовый сервер рассылки сможет доставить письмо только 10-ти из этих пользователей, а оставшиеся 2 пойдут пинать админа со словами "почему у меня не работает почта". И вот чтобы всё было по фен-шую, нужно лимитировать количество получателей только для исходящих писем (когда сервер используется как relay). Для этого в блок списков контроля доступа, который соответствует acl_smtp_rcpt, нужно добавить следующее (так, чтобы новые правила были примерно 4-ым и 5-ым сверху если считать для exim.conf, который идет по-умолчанию):

defer condition = RELAY_RCPT_LIMIT_ENABLE
  message = Too many recipients
  condition = ${if >={$recipients_count}{RELAY_RCPT_LIMIT_NUM} {yes}{no}}
  hosts = +relay_from_hosts
  !authenticated = *
 
defer condition = RELAY_RCPT_LIMIT_ENABLE
  message = Too many recipients
  condition = ${if >={$recipients_count}{RELAY_RCPT_LIMIT_NUM} {yes}{no}}
  !hosts = +relay_from_hosts
  authenticated = *

Ну и перед блоком "begin acl" определить две опции:

# Флаг, включающий или выключающий ограничения числа получателей
RELAY_RCPT_LIMIT_ENABLE = yes
# Максимально допустимое число получателей в одном письме
RELAY_RCPT_LIMIT_NUM = 10

Первое условие будет срабатывать для хостов, которым разрешёно использовать почтовый сервер как relay, но которые не прошли аутентификацию. А второе – для хостов, которые прошли аутентификацию, но которым запрещен relay-инг без неё. А вот хосты, которые не могут использовать сервер как relay и которые НЕ прошли аутентификацию проверять не надо, поскольку они доставляют входящую почту на домены, для которых наш exim является primary MX. Четвёртый вариант (хосты, прошедшие аутентификацию и которым разрешён relay) также ограничивать смысла нет, так как обычно эти два множества не пересекаются.

Posted in *nix, Howto.


FAR и украинские буквы

Диалоговое окно установки шрифтаЕсть у FAR manager, которым я пользуюсь с незапамятных времён, одна неприятная особенность – он не корректно отображает украинскую букву "і" в именах файлов. Проблема вызвана отсутствием этого символа и шрифтах по-умолчанию от Microsoft. Но, оказывается, есть простое решение проблемы. Чтобы FAR нормально показывал буквы украинского алфавита, достаточно установить True-Type шрифт Lucida Console в свойствах окна FAR-а:

До:

После:

Проверялось на версии 2.0 build 1279 x86. На форуме поддержки FAR-а говорят также, что данную проблему можно исправить с помощью conemu.

Posted in Howto, Windows.


Про американцев

Реально зарегистрированный разговор между испанцами и американцами на частоте "Экстремальные ситуации в море" навигационного канала 106 в проливе Финистерра (Галиция). 16 Октября 1997 г.

Испанцы: (помехи на заднем фоне) ... говорит А-853, пожалуйста, поверните на 15 градусов на юг, во избежание столкновения с нами. Вы движетесь прямо на нас, расстояние 25 морских миль.

Американцы: (помехи на заднем фоне) ...советуем вам повернуть на 15 градусов на север, чтобы избежать столкновения с нами.

Испанцы: Ответ отрицательный. Повторяем, поверните на 15 градусов на юг во избежание столкновения.

Американцы (другой голос): С вами говорит капитан корабля Соединенных Штатов Америки. Поверните на 15 градусов на север во избежание столкновения.

Испанцы: Мы не считаем ваше предложение ни возможным, ни адекватным, советуем вам повернуть на 15 градусов на юг, чтобы не врезаться в нас.

Американцы (на повышенных тонах): С ВАМИ ГОВОРИТ КАПИТАН РИЧАРД ДЖЕЙМС ХОВАРД, КОМАНДУЮЩИЙ АВИАНОСЦА USS LINCOLN, ВОЕННО-МОРСКОГО ФЛОТА СОЕДИНЕННЫХ ШТАТОВ АМЕРИКИ, ВТОРОГО ПО ВЕЛИЧИНЕ ВОЕННОГО КОРАБЛЯ АМЕРИКАНСКОГО ФЛОТА. НАС СОПРОВОЖДАЮТ 2 КРЕЙСЕРА, 6 ИСТРЕБИТЕЛЕЙ, 4 ПОДВОДНЫЕ ЛОДКИ И МНОГОЧИСЛЕННЫЕ КОРАБЛИ ПОДДЕРЖКИ. Я ВАМ НЕ "СОВЕТУЮ", Я "ПРИКАЗЫВАЮ" ИЗМЕНИТЬ ВАШ КУРС НА 15 ГРАДУСОВ НА СЕВЕР. В ПРОТИВНОМ СЛУЧАЕ МЫ БУДЕМ ВЫНУЖДЕНЫ ПРИНЯТЬ НЕОБХОДИМЫЕ МЕРЫ ДЛЯ ОБЕСПЕЧЕНИЯ БЕЗОПАСНОСТИ НАШЕГО КОРАБЛЯ. ПОЖАЛУЙСТА, НЕМЕДЛЕННО УБЕРИТЕСЬ С НАШЕГО КУРСА!!!!

Испанцы: С вами говорит Хуан Мануэль Салас Алкантара. Нас 2 человек. Нас сопровождают пес, ужин, 2 бутылки пива и канарейка, которая сейчас спит. Нас поддерживают радиостанция "Cadena Dial de La Coruna" и канал 106 "Экстремальные ситуации в море". Мы не собираемся никуда сворачивать, учитывая, что мы находимся на суше и являемся маяком А-853 пролива Финистерра Галицийского побережья Испании. Мы не имеем ни малейшего понятия, какое место по величине мы занимаем среди испанских маяков. Можете принять все е[ ...ые меры, какие вы считаете необходимыми и сделать все что угодно для обеспечения безопасности вашего е..го корабля, который разобьется вдребезги об скалы. Поэтому еще раз настоятельно рекомендуем вам сделать наиболее осмысленную вещь: изменить ваш курс на 15 градусов на юг во избежания столкновения.

Posted in Fun.