PLD-doc/queue/lvm.txt

qwiat cvs at pld-linux.org
Sat Dec 3 01:41:39 CET 2005


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 at 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 at 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 at smeagol ~]# pvcreate /dev/hdc2
+  Physical volume "/dev/hdc2" successfully created
+
+Zrobione! Teraz pora stworzyć VG - Volume Group.
+
+[root at 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 at smeagol ~]# lvcreate -L256 -nswap testowy-vg
+  Logical volume "swap" created
+[root at smeagol ~]# lvcreate -L2000 -nroot testowy-vg
+  Logical volume "root" created
+[root at 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 at 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 at smeagol ~]# mkswap /dev/testowy-vg/swap
+Setting up swapspace version 1, size = 268431 kB
+[root at 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 at 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 at smeagol ~]# mkdir /chroot
+[root at smeagol ~]# mount /dev/testowy-vg/root /chroot/
+[root at smeagol ~]# mkdir /chroot/boot
+[root at smeagol ~]# mkdir /chroot/home
+[root at smeagol ~]# mkdir /chroot/proc
+[root at smeagol ~]# mkdir /chroot/sys
+[root at smeagol ~]# mount /dev/testowy-vg/home /chroot/home/
+[root at smeagol ~]# mount /dev/hdc1 /chroot/boot/
+[root at smeagol ~]# mount /proc /chroot/proc -obind
+[root at smeagol ~]# mount /sys /chroot/sys -obind
+
+Do instalacji użyjemy poldka:
+
+[root at 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 at 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 at 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 at 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 at 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".



More information about the pld-cvs-commit mailing list