Архів мітки: swap

Відновлення програмного RAID в Лінукс. Завершення.

Дані я не втратив, тому настрій в мене відмінний. Але треба відновити роботу системи так, щоб все було зручно і без несподіванок. А наразі в мене є такі претензії:

  • під час завантаження доводиться завжди редагувати Grub вказуючи вірний розділ root
  • не завантажується з меню Grub щойно-встановлена Windows XP
  • система працює без swap-розділу

Перші 2 проблеми пов’язані з Grub, тому час відредагувати меню завантажувача. Це файл /boot/grub/menu.lst.

В мене він такого змісту (тільки важливе):

# menu.lst - See: grub(8), info grub, update-grub(8)
...

title       Debian GNU/Linux, kernel 2.6.26-2-amd64
root        (hd0,1)
kernel      /vmlinuz-2.6.26-2-amd64 root=/dev/md2 ro quiet
initrd      /initrd.img-2.6.26-2-amd64

title       Debian GNU/Linux, kernel 2.6.26-2-amd64 (single-user mode)
root        (hd0,1)
kernel      /vmlinuz-2.6.26-2-amd64 root=/dev/md2 ro single
initrd      /initrd.img-2.6.26-2-amd64

# This is a divider, added to separate the menu items below from the
# Debian ones.
title        Other operating systems:
root

# This entry automatically added by the Debian installer for
# a non-linux OS on /dev/sda1
title        Microsoft Windows XP Professional RU
root        (hd0,0)
savedefault
makeactive
chainloader    +1

Гадаю root (hd0,1) треба замінити на root (hd0,2), адже саме розділ /dev/sda3 – в нас входить у RAID пристрій завантаження.

Для Windows XP параметри (hd0,0) виглядають правильними, тому проблем із завантаженням не має бути.

Але слід перезапустити комп’ютер та пересвідчитись. Перезапуск пройшов на ура, тому перші два пункти виправлені. Та все ж зауважу, що у разі проблем з першим диском мені знову прийдеться правити у ручну меню Grub-завантажувача :( тому що розподіл розділів першого диску відрізняється від 3-х інший. Зараз бачу тільки один спосіб запобігти цьому – додати 3-й пункт меню Grub для завантаження Лінукс з резервних дисків (2-го, 3-го чи 4-го). Виглядати у файлі grub/menu.lst він буде приблизно так:

title       Rescue (if RAID master boot disk failed)
root        (hd0,0)
kernel      /vmlinuz-2.6.26-2-amd64 root=/dev/md2 ro single
initrd      /initrd.img-2.6.26-2-amd64

Переходимо до роботи зі свопом (swap розділ).

Якщо пам’ятаєте, розділ RAID-0 повністю зруйновано, але це не страшно, адже він використовувався як область підкачки (swap). Треба відтворити його та задіяти у системі. За нього відповідає RAID пристрій /dev/md0. Ось які відомості є у системи при цей RAID:

# mdadm --detail /dev/md1
/dev/md1:
Version : 00.90
Creation Time : Sun Jan 31 16:13:45 2010
Raid Level : raid0
Raid Devices : 2
Total Devices : 1
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Sun Jan 31 16:13:45 2010
State : active, degraded, Not Started
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
UUID : c77a68cb:56309d8e:84c426df:55d8644d (local to host c2d)
Events : 0.1

Number   Major   Minor   RaidDevice State
0       0        0        0      removed
1       8       21        1      active sync   /dev/sdb5

Було б непогано створити його не з 2-х розділів, а з 4-х. Тоді теоретично швидкість роботи зі swap підвищилась би у 4 рази.

Спроба збільшити кількість активних пристроїв закінчилась невдачею:

# mdadm --grow /dev/md1 -n 4
mdadm: raid0 array /dev/md1 cannot be reshaped.

Мабуть треба створити цей пристрій з нуля. В нього слід додати пристрої /dev/sdb5 (він єдиний там), /dev/sda6, /dev/sdc5 та /dev/sdd5.

Видаляємо /dev/sdb5 зі старого масиву:

# mdadm /dev/md1 -f /dev/sb5
# mdadm /dev/md1 -r /dev/sb5

Але ці команди закінчуються невдачею. Пристрій зайнятий.

Не слід забувати, що справу маємо з RAID-0, тобто режимом, в якому дискові пристрою чергуються, а тому він не призначений для “гарячої” заміни пристроїв. Система програмного RAID Лінукса  наче чекає, коли ми “знайдемо” та додамо справжній робочий розділ. При додаванні порожніх розділів, система їх приймає – але помічає як “запасні” (spare).

Для того, щоб мати змогу створити з нуля RAID-0, треба смусити систему забути про розділи які до нього колись входили. Для цього слід стерти на цих розділах так звані “супер-блоки”. Для цього можна використати команду:

# mdadm /dev/md1 --zero-superblock /dev/sdb5

Але коли RAID масив хоча б частково ініціалізовано, вона (команда) закінчується помилкою, бо пристрій зайнято. Тобто треба або зупинити роботу демона підтримки програмного RAID у Лінукс (mdadm), або завантажити комп’ютер з “живого” DVD. Другий спосіб простіший, тому я перегрузив комп’ютер з DVD та у консолі виконав такі команди (супер-блоки дисків sdc5, sdd5 та sda6 прийшлось також обнуляти, тому що я їх помилково додав у “запас” підчас спроб оживити цей RAID):

# mdadm --zero-superblock /dev/sdb5
# mdadm --zero-superblock /dev/sdc5
# mdadm --zero-superblock /dev/sdd5
# mdadm --zero-superblock /dev/sda6

Потім, перегрузивши комп’ютер, я виявив, що список RAID-пристроїв скоротився (/dev/md1 – зник!). Це добрий знак:

md3 : active raid5 sda8[0] sdc7[2] sdb7[1]
md2 : active raid1 sdd6[0] sdc6[2](S) sdb6[3](S) sda7[1]
md0 : active raid1 sdd1[0] sdc1[2](S) sdb1[3](S) sda3[1]

Спробуємо створити знову RAID-0. Але цього разу не з 2-х, а вже одразу з 4-х пристроїв. Резервні диски використовувати не будемо, бо як показав практичний досвід, на рівні RAID-0 від них ніякої користі.

# mdadm --create /dev/md1 --raid-devices=4 --level=raid0 /dev/sda6
 /dev/sdb5 /dev/sdc5 /dev/sdd5
mdadm: array /dev/md1 started.

# cat /proc/mdstat
...
md1 : active raid0 sdd5[3] sdc5[2] sdb5[1] sda6[0]
 7839232 blocks 64k chunks

Наче все добре, але тепер /dev/md1 слід спробувати задіяти як розід підкачки. За інформаціює з файлу /etc/fstab він і так використовується як swap:

# cat /etc/fstab
# /etc/fstab: static file system information.
# <file system> <mount point>   <type>  <options>    <dump>  <pass>
/dev/md1        none            swap    sw           0       0

Та він не задіяний:

$ free -m
        total       used       free     shared    buffers     cached
Mem:     3968       1590       2377          0        216        469
-/+ buffers/cache:        903       3064
Swap:            0          0          0

Так не виходить:

# swapon -a
swapon: /dev/md1: Invalid argument

Мабуть це тому, що на пристрої /dev/md1 не створено відповідну файлову систему. Але команда mkswap /dev/md1 теж повернула негативну відповідь. Чому – незнаю. Може для правильної роботи нового пристрою RAID слід повністю перезапустити його демон, або просто рестартанути комп’ютер. Але наступного разу, коли я завантажив Лінукс, ця команда спрацювала значно краще:

# mkswap /dev/md1
Setting up swapspace version 1, size = 8027369 kB
no label, UUID=0c1e26c3-8f75-4ab9-b08d-874694d33138

# swapon -a

# free -m
             total     used     free    shared   buffers    cached
Mem:          3968     3936       31         0       544      1027
-/+ buffers/cache:     2364     1603
Swap:         7655        0     7655

Заради чистого сумління треба ще раз перезавантажити Лінукс і на власні очі пересвідчитись, що помилки ініціалізації своп-розділу на програмному RAID-0 під час завантаження щезли.

Є ще одна задача, про яку часто забувають: це оновлення конфігураційного файлу /etc/mdadm/mdadm.conf. Зараз він містить точно не правдиві відомості про наш RAID-0 swap-розділ:

# definitions of existing MD arrays
ARRAY /dev/md1 level=raid0 num-devices=2
 UUID=c77a68cb:56309d8e:84c426df:55d8644d
...

А ми пам’ятаємо, що в нас він з 4-х пристроїв. Для того, щоб оновити цей файл достатньо виконати команду:

# mdadm --detail --scan
ARRAY /dev/md1 level=raid0 num-devices=4 metadata=00.90
 UUID=80b00a54:db3afd7e:999f1de2:f9c3448a
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=00.90 spares=2
 UUID=0707ba7a:8a57b581:999f1de2:f9c3448a
ARRAY /dev/md2 level=raid1 num-devices=2 metadata=00.90 spares=2
 UUID=8bc941a1:d84faa98:008d3785:384a6334
ARRAY /dev/md3 level=raid5 num-devices=3 metadata=00.90 spares=1
 UUID=f82eca2a:4dadcb8a:84c426df:55d8644d

І відповідно виводу на екран відредагувати файл /etc/mdadm/mdadm.conf