среда, 24 февраля 2010 г.

Перенос установленной Slackware на программный raid1-массив 2

 

Описание задачи

Условия:

  • Имеется диск с установленной операционной системой slackware — /dev/sda.
  • Имеется дополнительный, пустой диск /dev/sdb.

На основе /dev/sda и /dev/sdb создать raid-массив первого уровня /dev/md0. Затем перенести на /dev/md0 операционную систему и настроить ее загрузку. Т.к. один из дисков изначально занят данными, создание raid-массива будем проводить в три этапа:

  1. Создание неполного массива /dev/md0 только на основе /dev/sdb1.
  2. Перенос операционной системы с /dev/sda1 на неполный массив /dev/md0.
  3. Добавление диска /dev/sda1 к raid-массиву /dev/md0.

Дополнительные условия:

  • На рабочем диске существует два раздела — корневой и подкачка.
  • В качестве корневой файловой системы используется reiserfs.
  • Предполагается, что используется стандартное ядро для slackware версии 2.6.xx, т.е. минимальная версия — Slackware 12.

Перед началом необходимо убедиться, что в рабочей slackware установлена утилита mdadm для управления программными raid-массивами. При ее отстутствии нужно установить пакет mdadm.

 

Решение задачи

Шаг 1. Загрузка с внешнего носителя.

Загружаемся с SystemResсueCD или c Slax или чего-нибудь еще, чтобы получить полный доступ ко всем дискам и ни один из них не был бы текущим загрузочным.

Шаг 2. Создание таблицы разделов на новом диске.

Начальное состояние таблицы разделов на дисках:

# fdisk -l /dev/sda /dev/sdb
   Device  Boot  Start   End   Blocks   Id  System
/dev/sda1     *      1   973  7815591   83  Linux
/dev/sda2          974  1044   570307+  82  Linux swap / Solaris

Disk /dev/sdb doesn't contain a valid partition table

Сначала, с помощью команды:

cfdisk /dev/sdb

создаем следующие разделы на новом пустом диске:

  • /dev/sdb1 — Раздел под raid-массив. Отводим под него большую часть диска. Установить признак «загрузочный». Задать тип раздела «Linux raid autodetect» (код fd).
  • /dev/sdb2 — Раздел под подкачку. Отводим под него половину от необходимого размера подкачки. Задать тип раздела «Linux swap» (код 82).

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

Пример того, что получилось:

# fdisk -l /dev/sdb
   Device  Boot  Start   End   Blocks   Id  System
/dev/sdb1     *      1  1009  8104761   fd  Linux raid autodetect
/dev/sdb2         1010  1044   281137+  82  Linux swap / Solaris

Шаг 3. Создание неполного raid-массива.

Сначала, на всякий случай, очищаем возможные следы предыдущих raid-массивов:

mdadm --zero-superblock /dev/sdb1

Теперь, создаем неполный raid-массив, с одним отсутствующим диском:

# mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: array /dev/md0 started.

Просмотреть состояние raid-массива можно с помощью команды:

# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb1[1]
      8104640 blocks [2/1] [_U]

unused devices: <none>

Шаг 4. Копирование операционной системы.

Форматируем разделы:

mkfs.reiserfs /dev/md0
mkswap /dev/sdb2

Монтируем raid-массив:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Монтируем раздел с рабочей системой:

mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1

Копируем содержимое рабочей системы на raid-массив:

cp -aT /mnt/sda1 /mnt/md0

Теперь всё полезное содержимое диска /dev/sda скопировано на raid-массив. Отмонтируем раздел с рабочей системой:

umount /mnt/sda1

Шаг 5. Подготовка таблицы разделов на старом диске.

Копируем таблицу разделов с диска /dev/sdb на /dev/sda:

sfdisk -d /dev/sdb | sfdisk /dev/sda

Убеждаемся, что таблицы разделов на дисках /dev/sda и /dev/sdb стали идентичны:

# fdisk -l /dev/sda /dev/sdb
   Device  Boot  Start   End   Blocks   Id  System
/dev/sda1     *      1  1009  8104761   fd  Linux raid autodetect
/dev/sda2         1010  1044   281137+  82  Linux swap / Solaris

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1     *      1  1009  8104761   fd  Linux raid autodetect
/dev/sdb2         1010  1044   281137+  82  Linux swap / Solaris

Форматируем раздел подкачки:

mkswap /dev/sda2

Шаг 6. Добавление диска в неполный raid-массив.

Опять, очищаем возможные следы предыдущих raid-массивов:

mdadm --zero-superblock /dev/sda1

Добавляем раздел /dev/sda1 в неполный raid-массив /dev/md0:

# mdadm /dev/md0 -a /dev/sda1
mdadm: added /dev/sda1

Здесь запустится процесс синхронизации дисков raid-массива. Отслеживать его можно с помощью команды:

cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sda1[2] sdb1[1]
      8104640 blocks [2/1] [_U]
      [==>..................]  recovery = 13.7% (1118016/8104640) finish=2.5min speed=44720K/sec

unused devices: <none>

Шаг 7. Настройка скопированной системы.

Сохраняем конфигурацию raid-массива:

mdadm -D --scan >> /mnt/md0/etc/mdadm.conf

Редактируем в файле /mnt/md0/etc/fstab строчки монтирования корневого раздела и раздела подкачки:

/dev/md0   /     reiserfs  defaults        1 1
/dev/sda2  swap  swap      pri=1,defaults  0 0
/dev/sdb2  swap  swap      pri=1,defaults  0 0

Шаг 8. Настройка загрузки с raid-массива.

Редактируем /mnt/md0/etc/lilo.conf, заменяем строчку:

boot = /dev/sda1

на:

boot = /dev/md0

И добавляем строчку:

raid-extra-boot=mbr

Далее действуем в зависимости от типа стандартного ядра slackware.

Шаг 8.1. Используется huge ядро.

В /mnt/md0/etc/lilo.conf добавляем строки:

image = /boot/vmlinuz-huge-smp-2.6.27.7-smp
  root  = /dev/md0
  label = gener-raid
  read-only

Версия ядра может быть другой, в зависимости от используемой версии slackware.

Запускаем установку загрузчика lilo на оба диска в raid-массиве:

chroot /mnt/md0 /sbin/lilo

Шаг 8.2. Используется generic ядро.

Создаем файл /mnt/md0/etc/mkinitrd.conf, содержащий строки:

CLEAR_TREE="1"
OUTPUT_IMAGE="/boot/initrd-generic-2.6.27.7-smp-raid.gz"
KERNEL_VERSION="2.6.27.7-smp"
MODULE_LIST="reiserfs"
ROOTDEV="/dev/md0"
RAID="1"

Генерируем initrd-файл:

chroot /mnt/md0 /sbin/mkinitrd -F

В /mnt/md0/etc/lilo.conf добавляем строки:

image = /boot/vmlinuz-generic-smp-2.6.27.7-smp
  initrd = /boot/initrd-generic-2.6.27.7-smp-raid.gz
  root   = /dev/md0
  label  = gener-raid
  read-only

Запускаем установку загрузчика lilo на оба диска в raid-массиве:

chroot /mnt/md0 /sbin/lilo

Шаг 9. Проверка.

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

понедельник, 8 февраля 2010 г.

Перенос установленной Slackware на программный raid1-массив

 

Описание задачи

Условия:

  • Имеется два одинаковых по размеру, пустых диска /dev/sda и /dev/sdb соответственно.
  • Имеется третий диск, например /dev/sdc, с установленной операционной системой slackware.

На основе /dev/sda и /dev/sdb создать raid-массив первого уровня /dev/md0. Затем перенести на /dev/md0 операционную систему и настроить ее загрузку.

Дополнительные условия:

  • На рабочем диске существует два раздела — корневой и подкачка.
  • В качестве корневой файловой системы используется reiserfs.
  • Предполагается, что используется стандартное ядро для slackware версии 2.6.xx, т.е. минимальная версия — Slackware 12. Однако, если очень хочется, существует возможность установки ядра из стандартных пакетов от новых версий slackware на более старые версии этой операционной системы.

Перед началом необходимо убедиться, что в рабочей slackware установлена утилита mdadm для управления программными raid-массивами. При ее отстутствии нужно установить пакет mdadm, который включется в состав дистрибутива начиная с Slackware 10.

 

Решение задачи

Шаг 1. Загрузка с внешнего носителя.

Загружаемся с SystemResсueCD или c Slax или чего-нибудь еще, чтобы получить полный доступ ко всем дискам и ни один из них не был бы текущим загрузочным.

Шаг 2. Создание таблицы разделов.

Сначала, с помощью команды:

cfdisk /dev/sda

создаем следующие разделы на первом пустом диске:

  • /dev/sda1 — Раздел под raid-массив. Отводим под него большую часть диска. Установить признак «загрузочный». Задать тип раздела «Linux raid autodetect» (код fd).
  • /dev/sda2 — Раздел под подкачку. Отводим под него половину от необходимого размера подкачки. Задать тип раздела «Linux swap» (код 82).

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

Пример того, что получилось:

# fdisk -l /dev/sda
   Device  Boot   Start     End      Blocks  Id  System
/dev/sda1  *          1  115498  927737653+  fd  Linux raid autodetect
/dev/sda2        115499  116471    7815622+  82  Linux swap

Затем копируем таблицу разделов с первого диска на второй:

sfdisk -d /dev/sda | sfdisk /dev/sdb

Убеждаемся, что таблицы разделов на дисках /dev/sda и /dev/sdb идентичны:

# fdisk -l /dev/sda /dev/sdb
   Device  Boot   Start     End      Blocks  Id  System
/dev/sda1  *          1  115498  927737653+  fd  Linux raid autodetect
/dev/sda2        115499  116471    7815622+  82  Linux swap

   Device  Boot   Start     End      Blocks  Id  System
/dev/sdb1  *          1  115498  927737653+  fd  Linux raid autodetect
/dev/sdb2        115499  116471    7815622+  82  Linux swap

Шаг 3. Создание raid-массива.

Сначала, на всякий случай, очищаем из разделов возможные следы предыдущих raid-массивов:

mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sdb1

Теперь, собственно, создаем raid-массив:

mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1

Здесь запустится процесс синхронизации двух дисков, входящих в массив, который можно отслеживать с помощью команды:

cat /proc/mdstat

Этот процесс никак не ограничивает работу с уже созданным массивом. Т.е. блочное устройство /dev/md0 уже доступно и с ним можно работать. Можно даже перезагружать компьютер. Но, конечно, в полноценную работу raid-массив встанет самостоятельно, когда синхронизация будет завершена.

Шаг 4. Копирование операционной системы.

Форматируем разделы:

mkfs.reiserfs /dev/md0
mkswap /dev/sda2
mkswap /dev/sdb2

Монтируем raid-массив:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Монтируем раздел с рабочей системой:

mkdir /mnt/sdc1
mount /dev/sdc1 /mnt/sdc1

Копируем содержимое рабочей системы на raid-массив:

cp -aT /mnt/sdc1 /mnt/md0

Шаг 5. Настройка скопированной системы.

Сохраняем конфигурацию raid-массива:

mdadm -D --scan >> /mnt/md0/etc/mdadm.conf

Редактируем в файле /mnt/md0/etc/fstab строчки монтирования корневого раздела и раздела подкачки:

/dev/md0   /     reiserfs  defaults        1 1
/dev/sda2  swap  swap      pri=1,defaults  0 0
/dev/sdb2  swap  swap      pri=1,defaults  0 0

Шаг 6. Настройка загрузки с raid-массива.

Редактируем /mnt/md0/etc/lilo.conf, заменяем строчку:

boot = /dev/XXXN

на:

boot = /dev/md0

И добавляем строчку:

raid-extra-boot=mbr

Далее действуем в зависимости от типа стандартного ядра slackware.

Шаг 6.1. Используется huge ядро.

В /mnt/md0/etc/lilo.conf добавляем строки:

image = /boot/vmlinuz-huge-smp-2.6.27.7-smp
  root  = /dev/md0
  label = gener-raid
  read-only

Версия ядра может быть другой, в зависимости от используемой версии slackware.

Запускаем установку загрузчика lilo на оба диска в raid-массиве:

chroot /mnt/md0 /sbin/lilo

Шаг 6.2. Используется generic ядро.

Создаем файл /mnt/md0/etc/mkinitrd.conf, содержащий строки:

CLEAR_TREE="1"
OUTPUT_IMAGE="/boot/initrd-generic-2.6.27.7-smp-raid.gz"
KERNEL_VERSION="2.6.27.7-smp"
MODULE_LIST="reiserfs"
ROOTDEV="/dev/md0"
RAID="1"

Генерируем initrd-файл:

chroot /mnt/md0 /sbin/mkinitrd -F

В /mnt/md0/etc/lilo.conf добавляем строки:

image = /boot/vmlinuz-generic-smp-2.6.27.7-smp
  initrd = /boot/initrd-generic-2.6.27.7-smp-raid.gz
  root   = /dev/md0
  label  = gener-raid
  read-only

Запускаем установку загрузчика lilo на оба диска в raid-массиве:

chroot /mnt/md0 /sbin/lilo

Шаг 7. Проверка.

Выключаем компьютер. Отсоединяем теперь уже не нужный диск /dev/sdc. Включаем компьютер и убеждаемся что загрузка операционной системы происходит нормально с любого диска из raid-массива.

понедельник, 1 февраля 2010 г.

Мониторинг жестких дисков с помощью технологии S.M.A.R.T. в Windows

 

Данная статья является продолжением предыдущей статьи в моем блоге «Мониторинг жестких дисков с помощью технологии S.M.A.R.T. в Linux».

 

Установка

Скачайте и установите следующее программное обеспечение (все бесплатно, все opensource):

smartmontools
Собственно сам пакет программ для мониторинга данных smart. Включает в себя консольную утилиту smartctl и системную службу smartd.

GSmartControl
Гуевый фронтенд к утилите smartctl. Позволит быстро определить, поддерживают ли ваши жесткие диски smart, а также просмотреть smart-данные.

blat
Утилита для отправки почтовых сообщений в windows из командной строки с некрасивым названием :) . Необходима, если вы хотите получать уведомления об ошибках по электронной почте. Для установки необходимо поместить файл blat.exe из скачанного zip-архива в директорию, куда был установлен smartd.exe (по умолчанию C:\Program Files\smartmontools\bin\).

 

Проверка доступности данных через GSmartControl

Запускаем только что установленную программу GSmartControl. Если в главном окне программы видим установленные в системе жесткие диски, а также установленную галочку «Enable SMART» значит все хорошо:

При двойном клике на диске открывается окно с несколькими вкладками. Первая вкладка — общая информация о диске:

Вторая вкладка — список smart-атрибутов и их значений:

 

Настройка почтовой утилиты blat

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

Шаг 1. Прописываем в реестр параметры вашего smtp сервера и почтового адреса:

> C:
> cd "C:\Program Files\smartmontools\bin"
> blat.exe -install smtp.mycompany.ru mycomp@mycompany.ru

Шаг 2. Проверяем что доставка почты заработала:

> echo test | blat.exe -to admin@mycompany.ru

 

Настройка и запуск службы мониторинга smartd

Полностью аналогично linux-версии, настройка демона smartd осуществляется через редактирование файла smartd.conf (по умолчанию C:\Program Files\smartmontools\bin\smartd.conf). Даже названия дисков указываются в linux-формате: /dev/sda и т.п.

Шаг 1. Найти и закомментировать строчку:

DEVICESCAN

Шаг 2. Для каждого устройства добавить строчку, вида:

/dev/sda -a -s (S/../../(1|2|3|4|5|6)/01|L/../../7/01 -R 194 -m admin@mycompany.ru -M diminishing

Шаг 3. Устанавливаем демон мониторинга smartd как службу:

> C:
> cd "C:\Program Files\smartmontools\bin"
> smartd.exe install

Шаг 4. Запускаем оснастку управления службами services.msc:

Шаг 5. Находим локальную службу «SmartD Service» и запускаем ее. При перезагрузке она будет запускаться автоматически.

Информация о запуске и работе службы «SmartD Service» попадает в системный «Event Log», посмотреть ее можно через оснастку «Event Viewer» (запускать eventvwr.msc). Следует искать события в локальном журнале «Application» с полем источника равным «smartd».

Все, smart-мониторинг жестких дисков в windows заработал. При возникновении проблем сообщения будут попадать с системный журнал windows. А также сообщения будут приходить по почте на электронный адрес системного администратора, если это было настроено.