PLD-doc/queue/lvm.txt
qwiat
cvs w pld-linux.org
Sob, 3 Gru 2005, 01:41:39 CET
Author: qwiat
Date: Sat Dec 3 01:41:36 2005
New Revision: 6582
Added:
PLD-doc/queue/lvm.txt
Log:
- opis LVM
Added: PLD-doc/queue/lvm.txt
==============================================================================
--- (empty file)
+++ PLD-doc/queue/lvm.txt Sat Dec 3 01:41:36 2005
@@ -0,0 +1,311 @@
+PLD+LVM mini HOWTO
+
+[...]
+
+Zaczynamy
+Na początku podpinamy nowy, czyściutki dysk twardy - to chyba oczywiste :-). Jeśli takiego nie mamy - szukamy takiego, gdyż zabaw na aktualnym dysku nie polecam (palec się omsknie i dużo danych "w plecy"). Do testów służył leciwy, aczkolwiek w zupełności wystarczający Quantum:
+
+hdc: QUANTUM FIREBALL CX13.0A, ATA DISK drive
+hdc: max request size: 128KiB
+hdc: 25429824 sectors (13020 MB) w/418KiB Cache, CHS=25228/16/63, UDMA(66)
+hdc: cache flushes not supported
+
+Partycjonujemy
+Pierwsze primo. O ile się nie mylę musimy jak niegdyś, za dawnych czasów przygotować sobie partycję pod /boot. Kiedyś powodem tego były przekraczające pewien rozmiar dyski twarde (do tej pory fdisk o tym raportuje - punkt 1) w poniżym cytacie), dziś - bootloader nie potrafi ruszyć bezpośrednio z LVM. Musi najpierw wystartować, załadować z initrd obsługę LVM i innych rzeczy, dopiero na końcu "odpalić" system z /, który siedzi w LVM. [Jeśli nie jest to prawda, bądź jest jakaś inna możliwość rozwiązania tego problemu - proszę o kontakt]. Po drugie primo: myślę, że 20MB na okołokernelowe drobiazgi w zupełności wystarczy - strata miejsca znikoma, tym bardziej, że /boot sformatujemy z opcją wyłączającą limity dla roota. Strata więc z posiadania nie-LVM partycji znikoma. Trzecie i chyba za razem ostatnie primo ;-) - gdy przyjdzie dołożyć do naszego LVM nowy dysk - nie będziemy musieli go nawet fdiskiem dotykać ale o tym będzie można poczytać w następnej części :-).
+
+Odpalamy więc fdisk /dev/nasz_dysk i:
+
+The number of cylinders for this disk is set to 25228.
+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-25228, default 1):
+Using default value 1
+Last cylinder or +size or +sizeM or +sizeK (1-25228, default 25228): +20M
+
+Command (m for help): a
+Partition number (1-4): 1
+
+Resztę dysku przeznaczymy w całości na LVM:
+
+Command (m for help): n
+Command action
+ e extended
+ p primary partition (1-4)
+p
+Partition number (1-4): 2
+First cylinder (41-25228, default 41):
+Using default value 41
+Last cylinder or +size or +sizeM or +sizeK (41-25228, default 25228):
+Using default value 25228
+
+Command (m for help): t
+Partition number (1-4): 2
+Hex code (type L to list codes): 8e
+Changed system type of partition 2 to 8e (Linux LVM)
+
+I kończymy pierwszy etap:
+
+Command (m for help): w
+The partition table has been altered!
+
+Calling ioctl() to re-read partition table.
+Syncing disks.
+[root w smeagol ~]# fdisk -l /dev/hdc
+
+Disk /dev/hdc: 13.0 GB, 13020069888 bytes
+16 heads, 63 sectors/track, 25228 cylinders
+Units = cylinders of 1008 * 512 = 516096 bytes
+
+ Device Boot Start End Blocks Id System
+/dev/hdc1 * 1 40 20128+ 83 Linux
+/dev/hdc2 41 25228 12694752 8e Linux LVM
+
+Formatujemy /boot
+Partycja przygotowana, teraz pora na dalszą część zabawy, czyli sformatowanie /dev/hdc1 naszej partycji /boot testowego dysku. Jako, że to jest malutka partycja, dodatkowo taka, po której pisać może tylko użytkownik /root - wywalimy domyslne ograniczenia dla tego filesystemu (iles tam % zarezerwowane - tutaj nie ma to większego znaczenia, problemy - straty - mogą się pojawiać w przypadku naprawdę dużych partycji).
+
+[root w smeagol ~]# mkfs.ext2 -m0 /dev/hdc1
+mke2fs 1.37 (21-Mar-2005)
+Etykieta systemu plików=
+Typ OS: Linux
+Rozmiar bloku=1024 (log=0)
+Rozmiar fragmentu=1024 (log=0)
+5040 i-węzłów, 20128 bloków
+0 bloków (0.00%) zarezerwowanych dla superużytkownika
+Pierwszy blok danych=1
+3 grup bloków
+8192 bloków w grupie, 8192 fragmentów w grupie
+1680 i-węzłów w grupie
+Kopie zapasowe superbloku zapisane w blokach:
+ 8193
+
+Zapis tablicy i-węzłów: zakończono
+Zapis superbloków i podsumowania systemu plików: wykonano
+
+Ten system plików będzie automatycznie sprawdzany co każde 33 montowań
+lub co 180 dni, zależnie co nastąpi pierwsze. Można to zmienić poprzez
+tune2fs -c lub -i.
+
+Pierwsze kroki z LVM
+Z /boot i całą resztą poradziliśmy sobie myślę bezproblemowo :-). Teraz pora na zajęcie sie LVM. LVM jak sama nazwa wskazuje to Logical Volume Manager. W skrócie, bez wgłębiania się - od tego momentu nie będziemy używać fdisk, nie będziemy operować na urządzeniach typu /dev/hdx itp. Mamy za to coś takiego:
+
+hda -\
+hdc1 -| PV
+hdd -|
+ |
+LV1 - VG - LVx
+ / \
+ LV2 LV3
+
+Jak by nie patrzyć są to pewne trzy struktury.
+
+Pierwszy poziom - PV - jest to najniższe, sprzętowe (z tąd to określenie - PV - Physical Volume) ogniwo tej całej struktury. Częścią tego może stanowić dowolny dysk twardy (w całości), jego partycja (kilka partycji), RAID czy to softwareowy czy też sprzętowy.
+
+Następny poziom - LV - logical volume? Spytał by ktoś cóż to takiego? Ano nic prostszego - odpowiednik partycji LVM.
+
+Wszystko to zaś trzyma w kupie VG (Volume Group) - dzięki temu mamy wszystko w całości, daje się ładnie i zgrabnie administrować. O szczegółach może później, żeby bałaganu nie narobić :-).
+
+Na początku pisałem, że dysk musi być czysty. Oczywiście nie zaszkodziło by to, ale jest i na to sposób (szybkie wyczyszczenie dysku - jak z fabryki, brak tablicy partycji, itp.). Należało by to zrobić również w przypadku, gdybyśmy chcieli LVM mieć na całej zawartości dysku (przykładowo całe /dev/hdb), a on, paskuda jeden ;-) stwierdził, że nie może, bo jest tablica partycji. Jest oczywiście na to proste, aczkolwiek bardzo drastyczne rozwiązanie:
+
+dd if=/dev/zero of=/dev/nasz_dysk bs=1k count=1
+blockdev --rereadpt /dev/nasz_dysk
+
+Opisywać powyższego nie ma co (w razie czego man dd i man blockdev pomogą). No może poza tym, że należy koniecznie upewnić się, że jesteśmy pewni, że bawimy się na pewno tym dyskiem, o który nam chodzi ;-).
+
+PV, VG, LV, ok, ale jak?
+No to teraz zabawa z LVM dopiero się zaczyna :-). Najpirew inicjalizujemy urządzenia PV.
+
+[root w smeagol ~]# pvcreate /dev/hdc2
+ Physical volume "/dev/hdc2" successfully created
+
+Zrobione! Teraz pora stworzyć VG - Volume Group.
+
+[root w smeagol ~]# vgcreate testowy-vg /dev/hdc2
+ Volume group "testowy-vg" successfully created
+
+W powyższym tworzymy wolumen o nazwie testowy-vg. O i już widzimy pewną różnicę. Nie mamy już do czynienia z plikami /dev/hdx czy podobnymi, ale z logicznym określeniem miejsca przechowywania plików, że tak to ujmę. (W powyższym przykładzie podaliśmy jako parametr dysk /dev/hdc2. Jeśli podamy kolejne - nasz VG - Volume Group zwiększy się.)
+
+Teraz pora na LV - logiczne wolumeny. Mówiąc "po staremu" - partycje. Na początek proponuję 256M na swap, 2GB na / i 4 GB na home. Tutaj już widzimy, że suma tych partycji to raptem około połowa tego, co mogli byśmy uzyskać - dysk się marnuje. O tym również w następnej części.
+
+[root w smeagol ~]# lvcreate -L256 -nswap testowy-vg
+ Logical volume "swap" created
+[root w smeagol ~]# lvcreate -L2000 -nroot testowy-vg
+ Logical volume "root" created
+[root w smeagol ~]# lvcreate -L4000 -nhome testowy-vg
+ Logical volume "home" created
+
+Tada! Proste, prawda?
+
+Jak toto zamontowac?
+Z pakietami lvm2-* przychodzi kilka bardzo przydatnych narzędzi. Poniżej przedstawiam wynik działania jednego z nich. Założyliśmy trzy LV. Możemy się czegoś o nich dowiedzieć komendą lvdisplay:
+
+[root w smeagol ~]# lvdisplay
+--- Logical volume ---
+LV Name /dev/testowy-vg/swap
+VG Name testowy-vg
+LV UUID Ou9Hk4-KPTn-h1c0-Ywss-VFSb-rAnk-Pkn2xj
+LV Write Access read/write
+LV Status available
+# open 0
+LV Size 256,00 MB
+Current LE 64
+Segments 1
+Allocation inherit
+Read ahead sectors 0
+Block device 254:0
+
+--- Logical volume ---
+LV Name /dev/testowy-vg/root
+VG Name testowy-vg
+LV UUID dh5fJb-VRwx-GJkL-PdAW-J2V5-J3Ze-lTCAxu
+LV Write Access read/write
+LV Status available
+# open 0
+LV Size 1,95 GB
+Current LE 500
+Segments 1
+Allocation inherit
+Read ahead sectors 0
+Block device 254:1
+
+--- Logical volume ---
+LV Name /dev/testowy-vg/home
+VG Name testowy-vg
+LV UUID 2tbdip-WhQB-REFZ-kdKM-uAOy-M2LX-c3Cf41
+LV Write Access read/write
+LV Status available
+# open 0
+LV Size 3,91 GB
+Current LE 1000
+Segments 1
+Allocation inherit
+Read ahead sectors 0
+Block device 254:2
+
+Pierwsze, co rzuca się w oczy to:
+
+LV Name /dev/testowy-vg/swap
+VG Name testowy-vg
+
+Oraz to:
+
+LV UUID Ou9Hk4-KPTn-h1c0-Ywss-VFSb-rAnk-Pkn2xj
+
+Pierwsza linia to nic innego jak nazwa wolumenu, który mu nadaliśmy, druga zaś opisuje, w którym VG ona się znajduje. Jednocześnie to /dev/testowy-vg/swap jest urządzeniem, które możemy podmontować.
+
+Dla niewiernych mały dowodzik:
+
+[root w smeagol ~]# mkswap /dev/testowy-vg/swap
+Setting up swapspace version 1, size = 268431 kB
+[root w smeagol ~]# swapon /dev/testowy-vg/swap
+
+Jak widać działa :-).
+
+Prawda, że milusie ;-) ? Nigdy więcej zastanawiania się... "Gdzie to było? Na hdc5 czy może hdb2?". Pytanie co to za koszmarne krzaki po LV UUID? Ano jak się okazuje prosta sprawa. Unikalny identyfikator wolumenu. Dzięki temu możemy sobie pozamieniać dyski miejscami (pomijając chyba ten z którego startujemy) i LVM dzięki tym "krzakom" "poskłada się do kupy".
+
+No to teraz zobaczmy, co znajduje się nowopowstałym /dev/testowy-vg:
+
+[root w smeagol ~]# ls /dev/testowy-vg/
+home root swap
+
+Tak, tak... To nasze gotowe do używania LVM-partycje :-). Teraz proponuję we własnym zakresie sformatować pozostałe, po czym przejść do następnego punktu. Ja do tych testów wybrałem reiserfs.
+
+Instalujemy PLD
+Będzie to dość popularna instalacja - za pomocą chroota.1)
+
+Poniżej kilka kroków do wykonania:
+
+[root w smeagol ~]# mkdir /chroot
+[root w smeagol ~]# mount /dev/testowy-vg/root /chroot/
+[root w smeagol ~]# mkdir /chroot/boot
+[root w smeagol ~]# mkdir /chroot/home
+[root w smeagol ~]# mkdir /chroot/proc
+[root w smeagol ~]# mkdir /chroot/sys
+[root w smeagol ~]# mount /dev/testowy-vg/home /chroot/home/
+[root w smeagol ~]# mount /dev/hdc1 /chroot/boot/
+[root w smeagol ~]# mount /proc /chroot/proc -obind
+[root w smeagol ~]# mount /sys /chroot/sys -obind
+
+Do instalacji użyjemy poldka:
+
+[root w smeagol ~]# poldek -nac -nac-ready --mkdir --root=/chroot -i poldek bash vim lvm2-*
+
+Linia może ciut długa, ale zapewniam - nie robi nic strasznego. Na początku ustawiamy, że chcemy korzystać ze źródeł ac oraz ac-ready, mkdir oznacza, że w naszym chroocie utworzona zostanie baza danych rpm, -root - chyba wiadomo - w tamtym miejscu instalować będziemy naszą dystrybucję. Na koniec pozostaje -i lista pakietów. Lista pakietów to ni mniej ni więcej tylko to, co to określenie znaczy ;-). Zainstalowane zostaną wraz z zależnościami wszystkie podane tam pakiety. Teraz w zależności od posiadanego łącza możemy iść zrobić sobie kawę, lub w przypadku sdi jak ja - na spacer albo zdrzemnąc się ;-).
+
+Skończył? Dobrze. Następny krok to zachrootowanie się do naszego nowego systemu. Najpierw jednak przekopiujemy nasz plik /etc/resolv.conf do /chroot/etc/resolv.conf. Gdybyśmy tego nie zrobili - system, w tym i poldek nie potrafił by rozwiązywać nazw na numery IP. Skoro to już mamy - pora się chrootować.
+
+[root w smeagol ~]# chroot /chroot/ /bin/bash
+
+Edytujemy plik /etc/poldek.conf, odkomentowujemy źródło ac-ready, ustawiamy wedle woli adresy (bywa, że dużo bardziej opłaca ściągać pakiety z mirrorów), zapisujemy. Następnie musimy doinstalować jeszcze kilka pakietów. Ot choćby kernel, lilo, reiserfsprogs itp. Zazwyczaj braki wychodzą w tzw. "praniu". Nim pakiety zaczną się ściągać będzieli musieli poczekać, aż ściągną sie indeksy poldka (opcja -upa).
+
+[root w smeagol /]# poldek --upa -nac -nac-ready
+
+Jak już skończy ściągać zaczynamy instalować brakujące pakiety. Kompletną listę pakietów przykładowego systemu znaleźć można tutaj (wyjście z rpm -qa|sort). Następnym etapem będzie wygenerowanie pliku modprobe.conf,
+
+[root w smeagol ~]# generate-modprobe.conf >/etc/modprobe.conf
+
+oraz stworzenie initrd, końcowa konfiguracja - plik /etc/fstab i bootloadera - w tym przypadku lilo. Nasz przykładowy plik /etc/fstab powinien wyglądać mniej więcej tak:
+
+/dev/testowy-vg/swap swap swap defaults 0 0
+/dev/testowy-vg/root / reiserfs defaults 1 1
+/dev/testowy-vg/home /home reiserfs defaults 1 1
+/dev/hdc1 /boot ext2 defaults 1 1
+
+none /proc proc defaults,noauto,gid=17 0 0
+none /sys sysfs defaults,noauto,gid=17 0 0
+none /proc/bus/usb usbfs defaults,noauto 0 0
+none /dev devfs defaults,noauto 0 0
+none /dev/pts devpts gid=5,mode=620 0 0
+#none /dev/shm tmpfs mode=1777,nosuid,nodev,noexec 0 0
+
+/dev/fd0 /media/floppy auto user,noauto 0 0
+/dev/cdrom /media/cdrom auto users,noauto 0 0
+
+# Examples for mount vfat and ntfs patritions using fsctrl group
+#/dev/hdXX /mnt/ntfs ntfs user,noauto,umask=002,uid=0,gid=28,iocharset=iso8859-2 0 0
+#/dev/hdXX /mnt/vfat vfat user,noauto,umask=002,uid=0,gid=28,iocharset=iso8859-2,codepage=852,exec,showexec 0 0
+
+Następnym etapem jest wygenerowanie initrd. Najpierw jednak musimy odpowiednio przygotować konfigurację geninitrd. Edytujemy plik /etc/sysconfig/geninitrd, znajdujemy, oraz poprawiamy poniższą linię:
+
+PREMODS="dm-mod"
+
+Nie zaszkodzi również dodać następującą linijkę:
+
+LVMTOOLSVERSION=2
+
+zapisujemy i następnie generujemy initrd:
+
+[root w smeagol ~]# geninitrd --with-insmod-static /boot/initrd-lvm `uname -r`
+
+Następnym krokiem jest przygotowanie lilo.conf. Mój przykładowy wygląda tak:
+
+default=pld_lvm
+timeout=20
+boot=/dev/hdc
+prompt
+menu-title="PLD Linux Distribution"
+menu-scheme = "wk:kc:ck:Ck"
+read-only
+lba32
+
+image=/boot/vmlinuz
+ root=/dev/testowy-vg/root
+ label=pld_lvm
+ initrd=/boot/initrd-lvm
+
+Uruchamiamy lilo, jeśli wszystko pójdzie jak należy restartujemy komputer. Uruchamiamy system z /dev/hdc (secondary master) i... powinno ruszyć... już na LVM :-). Oczywiście gdy skończymy naukę narzędzi i możliwości LVM zechcemy pewnie się na niego przesiąść (a nie jak ja teraz - trzymać go "na boku"). Należało by więc w takim przypadku opisany tutaj system "przepiąć" na odpowiednią tasiemkę, uruchomić płytkę lub dysk ratunkowy, zachrootować się gdzie trzeba. Pozmieniać odpowiednio /etc/fstab, /etc/lilo.conf, uruchomić lilo i cieszyć się z przesiadki :-).
+
+W tej części tyle. Ewentualne zmiany dotyczyć będą błędów, lub innych ważnych rzeczy (inne sposoby na wykonanie czegoś, byćmoże jakieś szersze wyjaśnienia itp.).
+
+$Author: snurf $, $Revision: 1.41 $, $Date: 2005/08/04 09:07:10 $
+
+1) Cytując za podręcznikiem systemowym man: Normalnie nazwy plików szukane są od głównego katalogu (korzenia) struktury katalogów, tj. "/". chroot zmienia katalog główny na zadany katalog (musi on istnieć) a następnie uruchamia polecenie z opcjonalnie podanymi argumentami. W skrócie rzecz ujmując polecenie chroot umożliwia uruchomienie "systemu w systemie".
Więcej informacji o liście dyskusyjnej pld-doc