W tym artykule postaram siÄ™ wam przybliżyć RAID (Redundant Array of Independent Drives) oraz LVM (Logical Volume Managment). Te dwie technologie mogÄ… w znaczÄ…cy sposób poprawić zarówno wydajność jak i elastyczność dostÄ™pu do pamiÄ™ci dyskowej.
Ogólnie mówiÄ…c RAID polega na połączeniu dwóch lub wiÄ™cej iloÅ›ci dysków w tzw. macierz, w celu osiÄ…gniÄ™cia dodatkowych możliwoÅ›ci i wiÄ™kszego bezpieczeÅ„stwa danych niż przy użyciu pojedynczych dysków.
| Tip: |
| W artykule tym bÄ™dÄ™ omawiaÅ‚ jedynie programowy RAID, który jest o wiele wolniejszy od sprzÄ™towego. Jednak dla tych z was, którzy nie posiadajÄ… kontrolera RAID lub pÅ‚yty gÅ‚ównej z wbudowanÄ… obsÅ‚ugÄ… RAID może to być prosty i tani sposób na przetestowanie możliwoÅ›ci tej technologii. |
Z kolei LVM jest metodÄ… dzielenia dysków na partycje, która jest o wiele bardziej elastyczna niż standardowy podziaÅ‚ na partycjÄ™. LVM pozwala na łączenie ze sobÄ… fizycznych partycji w tzw. wirtualne partycje oraz umożliwia zmianÄ™ ich wielkoÅ›ci bez koniecznoÅ›ci restartowania komputera.
RAID wprowadzenie
RAID jest ogólnÄ… nazwÄ… wielu rodzajów (poziomów) macierzy dyskowych. Poniżej omówiÄ™ najpopularniejsze z nich.
LINEAR RAID (APPEND)
Tworzy jednÄ… durzÄ… wirtualnÄ… partycjÄ™ z dwóch lub wiÄ™cej fizycznych partycji. Dane nie sÄ… przeplatane pomiÄ™dzy dyskami (interleaved) ani duplikowane. Ten poziom nie zapewnia typowych korzyÅ›ci RAID poza możliwoÅ›ciÄ… stworzenia partycji wiÄ™kszej od najwiÄ™kszego posiadanego dysku / partycji.
RAID-0 (STRIPPING)
Poziom 0 jest bardzo podobny do LINEAR RAID z tym, że dane zapisywane na dysku sÄ… przeplatane na wszystkie fizyczne partycje wchodzÄ…ce w skÅ‚ad macierzy (sposób zapisu danych przedstawiony jest na rysunku). Ponieważ dane zapisywane sÄ… jednoczeÅ›nie na dwóch lub wiÄ™kszej iloÅ›ci dysków to prÄ™dkość zapisu teoretycznie wzrasta N razy (gdzie N to ilość dysków wchodzÄ…cych w skÅ‚ad macierzy).
Zalety:
- wszystkie dyski widziane sÄ… jako jeden wielki dysk o powierzchni bÄ™dÄ…cej sumÄ… powierzchni dysków wchodzÄ…cych w skÅ‚ad macierzy.
- przyspieszenie zapisu i odczytu danych w porównaniu z pojedynczym dyskiem.
Wady:
- brak odpornoÅ›ci na awariÄ™ dysków. Wystarczy, że jeden dysk ulegnie awarii by stracić dane gromadzone na wszystkich dyskach.
RAID-0 bardzo dobrze sprawdza siÄ™ jako miejsce do przechowywania dużych plików multimedialnych, ponieważ zarówno transfer z dysku jak i zapis jest bardzo szybki.
RAID-1 (MIRRORING)
Ten poziom RAID tworzy dokÅ‚adnÄ… kopie danych na jednym lub wiÄ™kszej iloÅ›ci dodatkowych dysków (rys.). Poprawia to znaczÄ…co niezawodność, ponieważ gdy jeden z dysków ulegnie uszkodzeniu mamy kompletnÄ… kopie danych na pozostaÅ‚ych. JeÅ›li w skÅ‚ad macierzy wchodzi N dysków to awaria N-1 dysków nie powoduje utraty danych.
JeÅ›li korzystamy z implementacji jÄ…dra do stworzenia tego poziomu RAID ponosimy również straty na czasie zapisu, ponieważ system musi zapisać dane przynajmniej dwukrotnie.
Zalety:
- ZwiÄ™kszona niezawodność. W macierzy skÅ‚adajÄ…cej siÄ™ z 3 dysków jeÅ›li awarii ulegnÄ… dwa dyski to caÅ‚a macierz nadal dziaÅ‚a.
- W pewnych okolicznoÅ›ciach szybkość odczytu z RAID-1 może być porównywalna z odczytam RAID-0 (round-robin).
Wady:
- Zmniejszona szybkość zapisu.
- Pojemność mniejsza niż suma pojemnoÅ›ci dysków wchodzÄ…cych w skÅ‚ad macierzy. Znaczy to, że jeÅ›li mamy 3 dyski o pojemnoÅ›ci 1GB to po połączeniu ich w RAID-1 otrzymujemy macierz o pojemnoÅ›ci 1GB.
RAID-3
Działa na podobnej zasadzie jak RAID-0 z tym, że w macierzy istnieje dodatkowy dysk przechowujący sumy kontrolne (rys.).
Zalety:
- Odporność na awarie jednego dysku.
- Zwiększona szybkość odczytu.
Wady:
- Zmniejszona prędkość zapisu z powodu konieczności obliczania sum kontrolnych (eliminowana przy zastosowaniu sprzętowego kontrolera RAID-3).
- W przypadku awarii dysku dostęp do danych jest spowolniony z powodu obliczeń sum kontrolnych.
- Odbudowa macierzy po wymianie dysku jest operacjÄ… kosztownÄ… obliczeniowo i powoduje spowolnienie operacji odczytu i zapisu.
- Pojedynczy, dedykowany dysk na sumy kontrolne zazwyczaj jest wąskim gardłem w wydajności całej macierzy.
RAID-4
RAID-4 jest bardzo zbliżony do RAID-3, z tÄ… różnicÄ…, że dane sÄ… dzielone na wiÄ™ksze bloki (16,32, 64 lub 128 KB).
RAID-5
Ten rodzaj macierzy RAID próbuje połączyć zalety RAID-0 oraz RAID-1. RAID-5 zapisuje dane podobnie jak RAID-0 jednoczeÅ›nie na wszystkich dyskach należących do macierzy ale dodaje do nich również bloki z sumami kontrolnymi, które mogÄ… być użyte do odzyskania danych gdy nastÄ…pi awaria jednego z dysków. Różnica miÄ™dzy RAID-4 i RAID-5 polega na tym ze ten pierwszy zapisuje sumy kontrolne na dodatkowym dysku natomiast ten ostatni przechowuje sumy kontrolne na dyskach należących do macierzy dysków. RAID-5 podprawia transfer jak i niezawodność kosztem dodatkowego dysku.
Zalety:
- Odporność na awarię 1 dysku.
- ZwiÄ™kszona szybkość odczytu - porównywalna do macierzy RAID-0.
Wady:
- Zmniejszona szybkość zapisu z powodu konieczności kalkulowania sum kontrolnych (eliminowana poprzez zastosowanie sprzętowego kontrolera RAID-5).
- W przypadku awarii jednego z dysków dostÄ™p do danych jest spowolniony z powodu koniecznoÅ›ci obliczania sum kontrolnych.
- Odbudowa macierzy po wymianie dysku jest operacjÄ… kosztownÄ… obliczeniowo i powoduje spowolnienie operacji odczytu i zapisu.
RAID-5 jest dość niezawodny ale awaria dwóch dysków powoduje utracenie danych. RAID-6 dodaje jeszcze wiÄ™cej niezawodnoÅ›ci kosztem dodania kolejnego dysku z sumami kontrolnymi (potrzebne jest N+2 dysków by uzyskać pojemność N dysków).
RAID-6
RAID-6 jest bardziej niezawodnym odpowiednikiem RAID-5. Niezawodność poprawiono dodając kolejny dysk przechowujący sumy kontrolne.
Zalety:
- Odporność na awariÄ™ wielu dysków.
- Szybkość pracy większa niż szybkość pojedynczego dysku.
- Ekstremalnie wysokie bezpieczeństwo.
RAID-10
RAID-10 jest połączeniem RAID-1 i RAID-0 patrz rys.
RAID-01
RAID-01 jest połączeniem RAID-1 i RAID-0 patrz rys.
LVM wprowadzenie
LVM umożliwia nam bardziej elastyczne zarzÄ…dzanie partycjami a w szczególnoÅ›ci ich wielkoÅ›ciÄ…. UżywajÄ…c LVM jesteÅ›my w stanie zmieniać wielkość partycji na życzenie, bez koniecznoÅ›ci restartowania komputera. Przy niektórych systemach plików nie musimy nawet odłączać partycji by zmienić jej wielkość.
| Tip: |
Obecnie ext2fs oraz ext3fs muszÄ… być odłączone by zmienić ich rozmiar; pojemność ReiserFS może być zmieniana zarówno gdy partycja jest podłączona jak i odłączona; JFS i XFS muszÄ… być podłączone. |
Zasada dziaÅ‚ania LVM jest dość prosta do zrozumienia. Wszystkie partycje wchodzÄ…ce w skÅ‚ad naszego systemu nazywać bÄ™dziemy woluminami fizycznymi (ang. phisical volume). Na rysunku przedstawione sÄ… one jako sdc1 oraz sdd1. Jak nazwa wskazuje sÄ… to fizyczne jednostki podziaÅ‚u dysku. Partycje grupowane sÄ… przez LVM w tzw. grupy woluminów (ang. volume group). Grupy woluminów można porównać do wirtualnych dysków, którymi bÄ™dziemy operować z poziomu LVM. Na każdym z takich wirtualnych dysków tworzyć bÄ™dziemy tzw. woluminy logiczne (ang. logical volume) bÄ™dÄ…ce swego rodzaju wirtualnymi partycjami, które z kolei bÄ™dÄ… mogÅ‚y być powiÄ™kszane lub zmniejszane na życzenie. Na naszym przykÅ‚adowym rysunku stworzyliÅ›my tylko jednÄ… grupÄ™ woluminów ale równie dobrze mogliÅ›my stworzyć ich wiÄ™cej.

DodatkowÄ… zaletÄ… LVM jest możliwość skonfigurowania go w podobny sposób do RAID-0, czyli by zapisywane dane byÅ‚y przeplatane pomiÄ™dzy dyskami. PoprawiajÄ…c dziÄ™ki temu czas dostÄ™pu i zapisu danych jeÅ›li do grupy woluminów należą woluminy fizyczne znajdujÄ…ce siÄ™ na różnych dyskach.
Wolne miejsce w grupie woluminów pozostawiÅ‚em Å›wiadomie. Przyda siÄ™ ono w momencie gdy bÄ™dziemy chcieli powiÄ™kszyć rozmiar jednego z woluminów logicznych. Można oczywiÅ›cie przydzielić caÅ‚e wolne miejsce w grupie woluminów dla woluminów logicznych ale gdy bÄ™dziemy chcieli powiÄ™kszyć rozmiar jednego z nich to bÄ™dziemy musieli zmniejszyć rozmiar innego - a jest to o wiele bardziej skomplikowane niż powiÄ™kszanie woluminu.
Dobre rady
Zarówno LVM jak i RAID wymagajÄ… wsparcia jÄ…dra do poprawnego dziaÅ‚ania. Jak wiesz jÄ…dro Å‚adowane jest z dysku podczas startu. Dlatego powinieneÅ› siÄ™ dobrze zastanowić nad umieszczaniem ważnych, z punktu widzenia startu systemu, katalogów na LVM lub RAID o wyższych poziomach niż 1. Katalogi takie jak / (root), /boot, /etc, /root, /bin, /sbin, /mnt, /dev najlepiej trzymać poza nimi. Nie znaczy to, że nie da siÄ™ tego zrobić. W przypadku poziomów RAID wiÄ™kszych niż 1 zaÅ‚adowanie systemu z macierzy wymaga stworzenia ramdrive i może być dość skomplikowane. Umieszczenie wspomnianych katalogów na oddzielnej partycji może znaczÄ…co uÅ‚atwić dostÄ™p do wielu potrzebnych i przydatnych programów w razie jakiejkolwiek awarii.
Przygotowanie systemu
Jeżeli chodzi o Slackware to nie mamy zbyt dużo do przygotowania. Wszystkie pre-kompilowane jÄ…dra na Slackware CD prócz lowmem.i majÄ… wkompilowanÄ… obsÅ‚ugÄ™ RAID i LVM. JeÅ›li nie jesteÅ› pewny czy twoje jÄ…dro obsÅ‚uguje RAID i LVM, wystarczy, że sprawdzisz czy w katalogu /proc istniejÄ… pliki /proc/mdstat (RAID), /proc/lvm/global (LVM). JeÅ›li istniejÄ… to masz jÄ…dro obsÅ‚ugujÄ…ce te dwie technologie.
Wkompilowane w jÄ…dro sterowniki to jedynie poÅ‚owa sukcesu. Do obsÅ‚ugi i konfiguracji LVM oraz RAID bÄ™dziemy również potrzebować programów zawartych w poniższych pakietach:
# installpkg lvm-1.0.8-i486-1.tgz
# installpkg mdadm-2.1-i486-1.tgz
Teraz mamy wszystko, co potrzeba by przystąpić do konfiguracji.
Własne jądro
Jeśli zamierzasz kompilować własne jądro to przy konfiguracji musisz włączyć Multi-device support (RAID and LVM) -> RAID support (jądra 2.4) oraz wybrać interesujący cię poziom RAID. Radzę wkompilować jego obsługę w jądro a nie jako moduł. Dodatkowo należy zaznaczyć Logical volume manager (LVM) support (jadra 2.4).
Przykładowy system
W celu zaprezentowania w jaki sposób skonfigurować RAID oraz LVM przygotowaÅ‚em system testowy zawierajÄ…cy 4 dyski SCSI:
/dev/sda1 - dysk nr 0, 10GB, ReiserFS, system
/dev/sda2 - dysk nr 0, 70MB, ReiserFS, swap
/dev/sdb - dodatkowy dysk nr 1, 10GB
/dev/sdc - dodatkowy dysk nr 2, 10GB
/dev/sdd - dodatkowy dysk nr 3, 10GB
Dysk nr 0 zawiera system Slackware z jÄ…drem 2.4.31 i obsÅ‚ugÄ… SCSI - jÄ…dro scsi.s. PozostaÅ‚e dyski zostaÅ‚y dodane później i na razie nie zawierajÄ… żadnych partycji.
| Tip: |
JeÅ›li chodzi o RAID to nie ma znaczenia czy tworzymy macierz z caÅ‚ych dysków (np. /dev/sdd) czy z konkretnych partycji (np. /dev/sdd1). |
Do dzieła
Każdy projekt zaczynamy od oceny sytuacji i planowania. W naszym przypadku ocenÄ… sytuacji jest to, że posiadamy cztery dyski, każdy o pojemnoÅ›ci 10GB. Na jednym z nich mamy już zainstalowany system, pozostaÅ‚e sÄ… puste. Nasz projekt bÄ™dzie miaÅ‚ na celu stworzenie dwóch macierzy RAID a nastÄ™pnie umieszczenie na nich pewnych części katalogu gÅ‚ównego (/). Pokażę również jak skonfigurować start systemu z macierzy RAID-1. Nasz projekt podzielimy na kilka faz. Każda z faz pomyÅ›lana jest tak by nauczyć jak najwiÄ™cej zarówno o technologii RAID jaki i LVM. Przypominam, że jest to jedynie przykÅ‚ad a podejmowane przeze mnie decyzje o podziale na partycje, tworzeniu macierzy RAID, tworzeniu grup woluminów, oraz partycji logicznych oparte sÄ… przede wszystkim na tym by pokazać jak najwiÄ™cej możliwość tych technologii. Nie znaczy to, że przyjÄ™ty przeze mnie podziaÅ‚ jest zÅ‚y lub nieopÅ‚acalny.
Faza 1. Tworzymy RAID-1 na dyskach 2 i 3
Zaczniemy od stworzenia odpowiednich partycji:
# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 1305
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L
0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 1305 10482381 fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#
Tak samo postÄ™pujemy w przypadku /dev/sdd. JeÅ›li wszystko przebiegnie pomyÅ›lnie to mamy przygotowane partycje by połączyć je w macierz RAID. NaszÄ… pierwszÄ… macierzÄ… bÄ™dzie RAID-1. Tworzymy jÄ… z myslÄ… o umieszczeniu na niej ważnych danych, które muszÄ… przetrwać awarie jednego z dysków. Dla nas bÄ™dÄ… to /home, /var, /usr. Jest wiele szkóÅ‚ jakie katalogi powinno siÄ™ umieszczać na macierzy RAID. Wiele z nich jest sprzecznych. Moim zdaniem najlepiej wypracować sobie wÅ‚asne podejÅ›cie do tego problemu.
JesteÅ›my gotowi do skonfigurowania macierzy RAID-1. Wykorzystujemy do tego polecenie mdadm, które ma postać:
# mdadm [tryb] <nazwa_macierzy_raid> [opcje] <partycje_skaładowe>
Wydajemy polecenie:
# mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: array /dev/md1 started.
#
Znaczenie przełączników:
--create /dev/md1
informujemy że będziemy tworzyć macierz RAID o nazwie /dev/md1.
--level=raid1
bedzie to macierz RAID-1
--raid-devices=2
ilość aktywnych urzÄ…dzeÅ„ (dysków/partycji) wchodzÄ…cych w skÅ‚ad macierzy. Możemy dodać do macierzy dyski zapasowe (spare), które bÄ™dÄ… automatycznie dołączane do macierzy w przypadku awarii jednego z "gÅ‚ównych" dysków (partrz manual do mdadm: --spare-devices).
JeÅ›li tworzenie macierzy siÄ™ powiodÅ‚o to kolejnym krokiem bÄ™dzie stworzenie pliku konfiguracyjnego /etc/mdadm.conf wykorzystywanego przez sterownik md w jÄ…drze do aktywowania macierzy. JeÅ›li nie stworzymy tego pliku to md bÄ™dzie skanowaÅ‚ partycje zawarte w pliku /proc/partitions by stwierdzić, które z nich wchodzÄ… w skÅ‚ad RAID. Jednym sÅ‚owem nie jest on potrzebny, ale warto go mieć. Plik tworzymy przy pomocy polecenia:
# mdadm --detail --scan >> /etc/mdadm.conf
następnie dodajemy ręcznie linię:
DEVICE /dev/sdc /dev/sdd
lub krócej:
DEVICE /dev/sd[cd]
Informuje ona md jakie urządzenia wchodzą w skład macierzy. Poprawny plik w naszym przypadku powinien wyglądać mniej więcej tak:
DEVICE /dev/sd[cd]
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=a7990811:9d4d4f50:0524d61e:cc7ddae1
JedynÄ… różnicÄ… w waszym pliku powinien być numer UUID (Universally Unique IDentifier), który jest 128-bitowym numerem majÄ…cym gwarantowanÄ… unikalność w naszym oraz innych systemach. Jest on generowany losowo na podstawie posiadanego w systemie sprzÄ™tu oraz wartoÅ›ci zegara systemowego. UUID jest wykorzystywany przez wiele programów do unikalnego oznaczania urzÄ…dzeÅ„. Możemy sami wygenerować taki numer używajÄ…c polecenia uuidgen.
Status macierzy
Jeśli chodzi o sprawdzanie statusu macierzy to mamy kilka możliwości. Pierwszą z nich jest wyświetlenie pliku /proc/mdstat.
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md1 : active raid1 sdd1[1] sdc1[0]
10482304 blocks [2/2] [UU]
unused devices:
Jak widać plik zawiera wiele informacji na temat dziaÅ‚ajÄ…cych macierzy RAID. Zacznijmy od trzeciej linii, która informuje nas, że macierz /dev/md1 jest macierzÄ… RAID-1, jest aktywna i skÅ‚ada siÄ™ z dwóch partycji /dev/sdd1 oraz /dev/sdc1. Liczby w nawiasach kwadratowych po nazwach partycji informujÄ… jaka jest rola lub funkcja danej partycji w macierzy. Kolejna linijka informuje ile jest bloków w macierzy. NastÄ™pny jest nawias kwadratowy w postaci [#/#] - informuje nas, że do macierzy należą 2 dyski z czego 2 sÄ… dostÄ™pne. Nawias kwadratowy zaraz za nim informuje, że oba dyski sÄ… Up - czyli dziaÅ‚ajÄ…. W momencie gdy jeden z dysków jest odłączony (ang. missing) w miejscu U zobaczymy "_". JeÅ›li natomiast mamy dysk, który siÄ™ zepsuÅ‚ lub nie odpowiada z jakiegoÅ› powodu to po nawiasie kwadratowym mówiÄ…cym o roli danego dysku w macierzy zobaczymy "(F)" od ang. failed.
Status macierzy możemy uzyskać również za pomocÄ… komendy mdadm.
# mdadm -Q /dev/md1
/dev/md1: 9.100GiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail.
# mdadm -D /dev/md1
/dev/md1:
Version : 00.90.00
Creation Time : Tue Apr 4 00:26:44 2006
Raid Level : raid1
Array Size : 10482304 (10.00 GiB 10.73 GB)
Device Size : 10482304 (10.00 GiB 10.73 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Tue Apr 4 00:26:44 2006
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : a487e866:701d5e6b:2e3a44a3:aabc9fb1
Events : 0.2
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1
Oprócz dwóch pokazanych wyżej opcji istnieje również opcja -E ale przyjmuje jako argument nie nazwÄ™ macierzy tylko nazwÄ™ partycji skÅ‚adowych - np. /dev/sdd1.
Podsumowanie
JeÅ›li zrobiÅ‚eÅ› wszystko tak jak opisaÅ‚em powinieneÅ› mieć dziaÅ‚ajÄ…cÄ… macierz RAID-1 o nazwie /dev/md1. JeÅ›li nie planowalibyÅ›my użyć LVM to mógÅ‚byÅ› w tym momencie sformatować jÄ… przy pomocy mkfs i zacząć używać jak każdy inny dysk.
Konfigurujemy LVM
Jak pamiÄ™tasz LVM skÅ‚ada siÄ™ z trzech "warstw" - woluminów fizycznych, grup woluminów oraz woluminów logicznych. Każdy z tych skÅ‚adników musi być odpowiednio przygotowany do pracy z LVM. Naszym woluminem fizycznym bÄ™dzie macierz /dev/md1. Aby jÄ… przygotować wydajemy komendy:
# vgscan -v
vgscan -- removing "/etc/lvmtab" and "/etc/lvmtab.d"
vgscan -- creating empty "/etc/lvmtab" and "/etc/lvmtab.d"
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group
# pvcreate /dev/md1
pvcreate -- physical volume "/dev/md1" successfully created
PierwszÄ… z nich wydajemy tylko po to by stworzyć plik /etc/lvmtab oraz katalog /etc/lvmtab.d. GdybyÅ›my jej nie wydali polecenie pvcreate zwróciÅ‚oby błąd. Polecenie pvcreate można porównać do polecenia mkfs. Przygotowuje ono partycjÄ™ do późniejszego wykorzystania przez LVM. W źródÅ‚ach opisujÄ…cych LVM można przeczytać, że każda partycja wchodzÄ…ca w skÅ‚ad woluminu fizycznego powinna być typu 0x8E (Linux LVM). W przypadku partycji RAID jest to bezsensowne. Tym bardziej, że partycjom wchodzÄ…cym w skÅ‚ad RAID ustawiliÅ›my już rodzaj (ID) na 0xFD.
Ostatnia linia wyniuku dziaÅ‚ania polecenia vgscan zawiera ostrzerzenie, że ten program nie robi kopii zapasowej VGDA (Volume Group Descriptor Area). VGDA jest czymÅ› podobnym do tablicy partycji. VGDA umieszczone jest na poczÄ…tku każdego woluminu fizycznego wchodzÄ…cego w skÅ‚ad LVM i zawiera dane dotyczÄ…ce jego konfiguracji. Podczas startu systemu woluminy logiczne oraz grupy woluminów zostajÄ… aktywowane a VGDA Å‚adowany jest do pamiÄ™ci. VGDA pomaga w zidentyfikowaniu gdzie na woluminach fizycznych znajdujÄ… siÄ™ woluminy logiczne oraz w jaki sposób mapowane sÄ… bloki logiczne (LE) na bloki fizyczne (PE).
Grupy woluminów
Kolejnym krokiem jest stworzenie grupy woluminów przy pomocy komendy vgcreate:
# vgcreate -s 32M vg00 /dev/md1
vgcreate -- INFO: maximum logical volume size is 2 Terabyte
vgcreate -- doing automatic backup of volume group "vg00"
vgcreate -- volume group "vg00" successfully created and activated
Ostatnim parametrem powyższej komendy jest nasza macierz, przed ostatnim nazwa jakÄ… bÄ™dzie miaÅ‚a nasza grupa woluminów. Pierwszy parametr (-s 32M) to wielkość bloku fizycznego (ang. Phisical Extent Size w skrócie PE), którego znaczenia jeszcze nie wyjaÅ›niÅ‚em. Każdy wolumin fizyczny wchodzÄ…cy w skÅ‚ad grupy woluminów zostanie podzielony na bloki o podanym przez nas rozmiarze (PE). NastÄ™pnie każdy stworzony w tej grupie woluminów wolumin logiczny zostanie podzielony na takie same bloki. Wielkość bloku fizycznego musi być potÄ™gÄ… liczby 2 i może być z przedziaÅ‚u 8KB do 16GB. Weźmy pod uwagÄ™ taki przykÅ‚ad:
StworzyliÅ›my grupÄ™ woluminów o nazwie vg11 i ustawiliÅ›my PE równe 4MB. Do grupy należą dwie partycje /dev/hda1 i /dev/hdb1. Nazwijmy je kolejno PV1 i PV2. Każda z tych partycji podzielona zostanie na 4MB bloki ponieważ nasza grupa woluminów stworzona zostaÅ‚a z PE = 4MB. Przyjmijmy, że PV1 zawiera 50 PE a PV2 120 PE. JeÅ›li bÄ™dziemy teraz chcieli stworzyć wolumin logiczny w grupie woluminów vg11 bÄ™dzie on mógÅ‚ mieć rozmiar od 1 PE do 170 PE czyli w naszym przypadku od 4MB do 680MB. Bloki przyporzÄ…dkowane do woluminów logicznych nazywane sÄ… blokami logicznymi (ang. Logical Extent w skrócie LE). W czasie tworzenia woluminu logicznego definiowane jest mapowanie miÄ™dzy PE a LE. PrzykÅ‚adowo LE nr 1 może zostać przypisany do PE nr 120 na PV1.
Kolejnym krokiem po stworzeniu grupy woluminów bÄ™dzie podzielenie jej na woluminy logiczne. Nasza grupa woluminów skÅ‚ada siÄ™ z 380 bloków fizycznych po 32MB każdy. Daje nam to w sumie 9.94GB do podziaÅ‚u miÄ™dzy woluminy logiczne. Możemy to bardzo Å‚atwo sprawdzić wydajÄ…c komendÄ™:
# vgdisplay
--- Volume group ---
VG Name vg00
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 2 TB
Max PV 256
Cur PV 1
Act PV 1
VG Size 9.94 GB
PE Size 32 MB
Total PE 318
Alloc PE / Size 0 / 0
Free PE / Size 318 / 9.94 GB
VG UUID 9k4l4i-N02z-MUo7-fXe4-CQ9q-GANa-dV4Wc4
Wolne miejsce podzielimy nastÄ™pujÄ…co: partycja przeznaczona na /var 300MB, partycja /usr 3GB, partycja /home 2GB. ResztÄ™ miejsca pozostawimy nieprzydzielonÄ… by móc rozszerzać wspomniane dyski logiczne. Jak już wspomniaÅ‚em wczeÅ›niej o wiele Å‚atwiej jest rozszerzać partycje niż zmniejszać. RozdzielajÄ…c caÅ‚e dostÄ™pne miejsce miÄ™dzy woluminy logiczne zmusiÅ‚oby nas później do zmniejszania jednej partycji by powiÄ™kszyć drugÄ….
Woluminy logiczne
Woluminy logiczne tworzymy przy pomocy polecenia lvcreate:
# lvcreate -L300M -n varlv vg00
lvcreate -- rounding size up to physical extent boundary
lvcreate -- doing automatic backup of "vg00"
lvcreate -- logical volume "/dev/vg00/varlv" successfully created
W tym przypadku stworzyliÅ›my wolumin logiczny o nazwie varlv (-n varlv) i pojemnoÅ›ci 300MB (-L300M) w grupie woluminów vg00. Pojemność woluminów logicznych możemy podawać w kilobajtach (K), megabajtach (M), gigabajtach (G), terabajtach (T). Ostatnia linia powurzszego polecenia informuje nas, że wolumin logiczny zostaÅ‚ stworzony i możemy siÄ™ do niego odwoÅ‚ywać za pomocÄ… /dev/vg00/varlv.
CiekawÄ… opcjÄ… polecenia lvcreate, nie użytÄ… powyżej, jest -i (--stripes). Informuje ona LVM by stworzyć wolumin logiczny przeplatany na 2 lub wiÄ™cej dysków. Pozwala to stworzyć coÅ› na wzór RAID-0. Wraz z opcjÄ… -i możesz również użyć opcji -I by sprecyzować wielkość bloku do przeplatania. Rozmiar tego bloku musi być potÄ™gÄ… 2 miÄ™dzy 2 a 512 (np. 64, 256).
W podobny sposób tworzymy woluminy logiczne usrlv oraz homelv:
# lvcreate -L300M -n varlv vg00
# lvcreate -L3G -n usrlv vg00
Gdy mamy już stworzone woluminy logiczne możemy je traktować jak noramlne partycje. Pierwszym krokiem bÄ™dzie stworzenie na nich systemu plików.
# mkfs.reiserfs /dev/vg00/varlv
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
A pair of credits:
Continuing core development of ReiserFS is mostly paid for by Hans Reiser from
money made selling licenses in addition to the GPL to companies who don't want
it known that they use ReiserFS as a foundation for their proprietary product.
And my lawyer asked 'People pay you money for this?'. Yup. Life is good. If you
buy ReiserFS, you can focus on your value add rather than reinventing an entire
FS.
Alexander Lyamin keeps our hardware running, and was very generous to our
project in many little ways.
Guessing about desired format.. Kernel 2.4.31 is running.
Format 3.6 with standard journal
Count of blocks on the device: 81920
Number of blocks consumed by mkreiserfs formatting process: 8214
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: a577bf01-7f74-46ef-a94f-d39cc86daef8
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/vg00/varlv'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/vg00/varlv.
W ten sam sposób tworzymy systemy plików na woluminach homelv i usrlv.
Przenosimy katalogi
W tym momencie bÄ™dÄ™ was musiaÅ‚ troche zmartwić. Aby przenieść katalogi /var, /home oraz /usr bÄ™dziemy musiÄ™li zrestartować naszÄ… maszyne - a szkoda miałęm taki łądny uptime. Pytacie dlaczego? Otóż wyżej wymienione katalogi sÄ… dość intensywnie urzywane zaróweno przez system jaki i użytkowników i nie jesteÅ›my w stanie przenierść ich bez utraty danych. Wyobrażmy sobie takÄ… sytuacjÄ™: JesteÅ›my przy koÅ„cu kopiowania katalogu /var a miÄ™dzy czasie jeden z procesów systemowych zapisuje dane do już skopiowanego pliku w "oryginalnym" katalogu /var. Tracimy w tym momencie ważne informacje. To samo tyczy siÄ™ pozostaÅ‚ych katalogów.
Najlepszym wyjÅ›ciem z tej sytuacji jest zatrzymanie systemu oraz uruchomienie go z Slackware CD. NastÄ™pnie podpiÄ™cie naszego katlogu gÅ‚ównego oraz wczeÅ›niej przygotowanych woluminów logicznych i przekopiowanie interesujÄ…cych nas danych. Po czym skasowanie niepotrzebnych plików z katalogów /var, /home oraz /usr i odpowiednie zmoidyfikowanie pliku /etc/fstab. InstrukcjÄ™ krok po kroku jak to zroić przedstawiam poniżej.
Startujemy z CD-ROM dokÅ‚adnie w ten sam sposób jak przy instalacji (niezapomij o wybraniu odpowiedniego do twojego systemu obrazu jÄ…dra) z tÄ… rużnicÄ… ze po wybraniu klawiatóry oraz logowaniu jako root wydajemy nastÄ™pujÄ…ce komandy:
# mkdir /mnt/root
# mkdir /mnt/homelv
# mkdir /mnt/varlv
# mkdir /mnt/uselv
# mount /dev/sda1 /mnt/root
# cd /mnt/root
# chroot .
#