LVM - Anleitung für Anfänger

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man mit LVM (Logical Volume Management) unter Linux arbeitet. In einem gesonderten Kapitel wird außerdem beschrieben, wie man LVM zusammen mit RAID1 verwendet. Da LVM ein ziemlich abstraktes Thema ist, beinhaltet diese Anleitung ein Debian Etch VMware Image, das Du runter laden und starten kannst. Auf diesem Debian Etch System kannst Du alle Befehle laufen lassen, die ich hier ausführen werde und Deine Ergebnisse mit den meinen vergleichen. Mit dieser praktischen Vorgehensweise kannst Du Dich recht schnell mit LVM vertraut machen.

Ich übernehme jedoch keine Garantie, dass dies auch bei Dir funktionieren wird!

1 Vorbemerkung

Zwei Artikel, die micht zu dieser Anleitung inspiriert haben, sind:
Diese Artikel sind großartig aber schwer zu verstehen, wenn Du noch nie zuvor mit LVM gearbeitet hast. Daher habe ich dieses Debian Etch VMware Image erstellt, das Du runter laden und im VMware Server oder VMware Player (siehe http://www.howtoforge.com/import_vmware_images hier findest Du eine Anleitung) laufen lassen kannst.

Ich habe während dieses Tutorials alle Tools auf dem Debian Etch System installiert, die wir brauchen (indem ich Folgendes laufen lies

apt-get install lvm2 dmsetup mdadm reiserfsprogs xfsprogs

) darüber brauchst Du Dir also keine Sorgen machen.

Das Netzwerk des Debian Etch Systems ist via DHCP konfiguriert, Du musst Dir also nicht den Kopf wegen sich widersprechenden IP Adressen zerbrechen. Das Root Passwort ist howtoforge. Du kannst Dich mit diesem System auch mit einem SSH Klienten wie PuTTY verbinden. Um die IP Adresse des Debian Etch Systems herauszufinden, führe Folgendes aus

ifconfig

Das System hat sechs SCSI Festplatten /dev/sda - /dev/sdf. /dev/sda wird für das Debian Etch System verwendet, während wir /dev/sdb - /dev/sdf für LVM und RAID verwenden werden. /dev/sdb - /dev/sdf haben jeweils 80GB Speicherplatz. Am Anfang werden wir so tun, als ob jede nur 25GB freien Speicherplatz hat (demnach werden nur 25GB auf jeder verwendet). In dieser Anleitung werden wir unsere 25GB-Festplatten mit 80GB Festplatten "ersetzen", wir demonstrieren somit, wie man kleine Festplatten mit größeren in LVM ersetzen kann.

Die Anleitung http://www.linuxdevcenter.com/pub/a/linux/2006/04/27/managing-disk-space-with-lvm.html verwendet Festplatten von 250GB und 800GB, jedoch brauchen einige Befehle wie pvmove mit einer so großen Festplatte ziemlich lange, daher habe ich beschlossen, Festplatten mit der Größe von 25GB und 80GB zu verwenden (das reicht um zu verstehen, wie LVM funktioniert).

1.1 Zusammenfassung

Lade dieses Debian Etch VMware Image (~310MB) runter und starte es wie folgt. Melde Dich als Rootanwender mit dem Passwort howtoforge an.

2 LVM Layout

LVM sieht im Wesentlichen so aus:


Du hast eine oder mehrere Physical Volumes (/dev/sdb1 - /dev/sde1 in our example), auf diesen Physical Volumes kannst Du eine oder mehrere Volume Groups erstellen (z.B. fileserver) und in jeder Volume Group kannst Du ein oder mehrere Logical Volumes erstellen. Wenn Du mehrere Physical Volumes verwendest, kann jedes Logical Volume größer sein als eines der zugrunde liegenden Physical Volumes (jedoch darf die Summe der Logical Volumes nicht den gesamten Speicherplatz der Physical Volumes überschreiten).

Es ist ganz praktisch den Logical Volumes nicht den gesamten Speicherplatz zuzuweisen, sondern ein bisschen Kapazität offen zu lassen. Somit kannst Du später eines oder mehrere Logical Volumes vergrößern, falls Du musst.

In diesem Beispiel werden wir eine Volume Group namens fileserver erstellen, sowie die Logical Volumes /dev/fileserver/share, /dev/fileserver/backup und /dev/fileserver/media (die nur die Hälfte des Platzes verwenden werden, der von unseren Physical Volumes derzeit angeboten wird - so können wir später zu RAID1 wechseln (wie auch in dieser Anleitung beschrieben wird)).

3 Unser Erstes LVM Setup

Lass uns etwas über unsere Festplatten in Efahrung bringen:

fdisk -l

Die Ausgabe sieht wie folgt aus:

server1:~# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 18 144553+ 83 Linux
/dev/sda2 19 2450 19535040 83 Linux
/dev/sda4 2451 2610 1285200 82 Linux swap / Solaris

Disk /dev/sdb: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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


Disk /dev/sdc: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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


Disk /dev/sdd: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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


Disk /dev/sde: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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


Disk /dev/sdf: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Auf /dev/sdb - /dev/sdf sind noch keine Partitionen vorhanden. Wir werden die Partitionen /dev/sdb1, /dev/sdc1, /dev/sdd1 und /dev/sde1 erstellen und lassen /dev/sdf fürs erste unberühert. Wir tun so als ob unsere Festplatten nur 25GB freien Speicherplatz anstelle von 80GB haben, daher weisen wir 25GB den Festplatten /dev/sdb1, /dev/sdc1, /dev/sdd1 und /dev/sde1 zu:

fdisk /dev/sdb

server1:~# fdisk /dev/sdb

Die Zahl der Zylinder für diese Festplatte ist auf 10443 eingestellt.
Das ist völlig in Ordnung, jedoch ist dies größer als 1024 und könnte in bestimmten Setups folgende Probleme verursachen:
1) Probleme mit der Software, die beim Hochfahren des Rechners startet (z.B. alte Versionen von LILO)
2) Probleme mit dem Boot Loader und Partitionierungssoftware von anderen Betriebssystemen (z.B DOS FDISK, OS/2 FDISK)

Command (m for help): <-- m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): <-- n
Command action
e extended
p primary partition (1-4)
<-- p
Partition number (1-4): <-- 1
First cylinder (1-10443, default 1): <-- <ENTER>
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-10443, default 10443): <-- +25000M

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 / So 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): <-- 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Nun führen wir das Gleiche für die Festplatten /dev/sdc - /dev/sde aus:

fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde

Lass dann

fdisk -l


erneut laufen. Die Ausgabe sollte wie folgt aussehen:

server1:~# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 18 144553+ 83 Linux
/dev/sda2 19 2450 19535040 83 Linux
/dev/sda4 2451 2610 1285200 82 Linux swap / Solaris

Disk /dev/sdb: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 3040 24418768+ 8e Linux LVM

Disk /dev/sdc: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 3040 24418768+ 8e Linux LVM

Disk /dev/sdd: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdd1 1 3040 24418768+ 8e Linux LVM

Disk /dev/sde: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sde1 1 3040 24418768+ 8e Linux LVM

Disk /dev/sdf: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Nun bereiten wir unsere neuen Partitionen für LVM vor:

pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1


server1:~# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sde1" successfully created

Lass uns nun aus Übungszwecken zum letzten Vorgan zurückkehren:

pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1


server1:~# pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Labels on physical volume "/dev/sdb1" successfully wiped
Labels on physical volume "/dev/sdc1" successfully wiped
Labels on physical volume "/dev/sdd1" successfully wiped
Labels on physical volume "/dev/sde1" successfully wiped

Lass

pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

erneut laufen again:

server1:~# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdd1" successfully created
Physical volume "/dev/sde1" successfully created

Lass nun Folgendes laufen

pvdisplay

um den derzeitigen Status unserer Physical Volumes herauszufinden:

server1:~# pvdisplay
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 23.29 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID G8lu2L-Hij1-NVde-sOKc-OoVI-fadg-Jd1vyU

--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 23.29 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 40GJyh-IbsI-pzhn-TDRq-PQ3l-3ut0-AVSE4B

--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 23.29 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 4mU63D-4s26-uL00-r0pO-Q0hP-mvQR-2YJN5B

--- NEW Physical volume ---
PV Name /dev/sde1
VG Name
PV Size 23.29 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 3upcZc-4eS2-h4r4-iBKK-gZJv-AYt3-EKdRK6

Lass uns nun unsere Volume Group fileserver erstellen und füge /dev/sdb1 - /dev/sde1 hinzu:

vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1


server1:~# vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Volume group "fileserver" successfully created

Lass uns nun den Status unserer Volume Groups herausfinden:

vgdisplay


server1:~# vgdisplay
--- Volume group ---
VG Name fileserver
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 4
Act PV 4
VG Size 93.14 GB
PE Size 4.00 MB
Total PE 23844
Alloc PE / Size 0 / 0
Free PE / Size 23844 / 93.14 GB
VG UUID 3Y1WVF-BLET-QkKs-Qnrs-SZxI-wrNO-dTqhFP

Ein weiterer Befehl um etwas über unsere Volume Groups in Erfahrung zu bringen:

vgscan


server1:~# vgscan
Reading all physical volumes. This may take a while...
Found volume group "fileserver" using metadata type lvm2

Lass uns nun aus Übungszwecken die Volume Group fileserver in data umbenennen:

vgrename fileserver data


server1:~# vgrename fileserver data
Volume group "fileserver" successfully renamed to "data"

Lass uns vgdisplay und vgscan erneut laufen lassen um festzustellen, ob die Volume Group umbenannt wurde:

vgdisplay


server1:~# vgdisplay
--- Volume group ---
VG Name data
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 4
Act PV 4
VG Size 93.14 GB
PE Size 4.00 MB
Total PE 23844
Alloc PE / Size 0 / 0
Free PE / Size 23844 / 93.14 GB
VG UUID 3Y1WVF-BLET-QkKs-Qnrs-SZxI-wrNO-dTqhFP

vgscan


server1:~# vgscan
Reading all physical volumes. This may take a while...
Found volume group "data" using metadata type lvm2

Lass uns nun unsere Volume Group data löschen:

vgremove data


server1:~# vgremove data
Volume group "data" successfully removed

vgdisplay

Keine Ausgabe dieses Mal:

server1:~# vgdisplay

vgscan


server1:~# vgscan
Reading all physical volumes. This may take a while...

Wir erstellen unsere Volume Group fileserver erneut:

vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1


server1:~# vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
Volume group "fileserver" successfully created

Als Nächstes erstellen wir unsere Logical Volumes share (40GB), backup (5GB) und media (1GB) in der Volume Group fileserver. Zusammen benötigen sie etwas weniger als 50% des verfügbaren Speicherplates (so können wir später RAID1 verwenden):

lvcreate --name share --size 40G fileserver


server1:~# lvcreate --name share --size 40G fileserver
Logical volume "share" created

lvcreate --name backup --size 5G fileserver


server1:~# lvcreate --name backup --size 5G fileserver
Logical volume "backup" created

lvcreate --name media --size 1G fileserver


server1:~# lvcreate --name media --size 1G fileserver
Logical volume "media" created

Wir verschaffen uns nun einen Überblick über unsere Logical Volumes:

lvdisplay


server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/fileserver/share
VG Name fileserver
LV UUID 280Mup-H9aa-sn0S-AXH3-04cP-V6p9-lfoGgJ
LV Write Access read/write
LV Status available
# open 0
LV Size 40.00 GB
Current LE 10240
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0

--- Logical volume ---
LV Name /dev/fileserver/backup
VG Name fileserver
LV UUID zZeuKg-Dazh-aZMC-Aa99-KUSt-J6ET-KRe0cD
LV Write Access read/write
LV Status available
# open 0
LV Size 5.00 GB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1

--- Logical volume ---
LV Name /dev/fileserver/media
VG Name fileserver
LV UUID usfvrv-BC92-3pFH-2NW0-2N3e-6ERQ-4Sj7YS
LV Write Access read/write
LV Status available
# open 0
LV Size 1.00 GB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2

lvscan


server1:~# lvscan
ACTIVE '/dev/fileserver/share' [40.00 GB] inherit
ACTIVE '/dev/fileserver/backup' [5.00 GB] inherit
ACTIVE '/dev/fileserver/media' [1.00 GB] inherit

Aus Übungszwecken bennen wir unser Logical Volume media in films um:

lvrename fileserver media films


server1:~# lvrename fileserver media films
Renamed "media" to "films" in volume group "fileserver"

lvdisplay


server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/fileserver/share
VG Name fileserver
LV UUID 280Mup-H9aa-sn0S-AXH3-04cP-V6p9-lfoGgJ
LV Write Access read/write
LV Status available
# open 0
LV Size 40.00 GB
Current LE 10240
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0

--- Logical volume ---
LV Name /dev/fileserver/backup
VG Name fileserver
LV UUID zZeuKg-Dazh-aZMC-Aa99-KUSt-J6ET-KRe0cD
LV Write Access read/write
LV Status available
# open 0
LV Size 5.00 GB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1

--- Logical volume ---
LV Name /dev/fileserver/films
VG Name fileserver
LV UUID usfvrv-BC92-3pFH-2NW0-2N3e-6ERQ-4Sj7YS
LV Write Access read/write
LV Status available
# open 0
LV Size 1.00 GB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2

lvscan


server1:~# lvscan
ACTIVE '/dev/fileserver/share' [40.00 GB] inherit
ACTIVE '/dev/fileserver/backup' [5.00 GB] inherit
ACTIVE '/dev/fileserver/films' [1.00 GB] inherit

Lass uns als Nächstes das Logical Volume films löschen:

lvremove /dev/fileserver/films


server1:~# lvremove /dev/fileserver/films
Do you really want to remove active logical volume "films"? [y/n]: <-- y
Logical volume "films" successfully removed

Wir erstellen das Logical Volume media erneut:

lvcreate --name media --size 1G fileserver


server1:~# lvcreate --name media --size 1G fileserver
Logical volume "media" created

Lass uns nun media von 1GB auf 1.5GB vergrößern:

lvextend -L1.5G /dev/fileserver/media


server1:~# lvextend -L1.5G /dev/fileserver/media
Extending logical volume media to 1.50 GB
Logical volume media successfully resized

Lass es uns wieder auf 1GB verkleinern:

lvreduce -L1G /dev/fileserver/media


server1:~# lvreduce -L1G /dev/fileserver/media
WARNING: Reducing active logical volume to 1.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce media? [y/n]: <-- y
Reducing logical volume media to 1.00 GB
Logical volume media successfully resized

Bis jetzt haben wir drei Logical Volumes, aber noch keine Dateisysteme und ohne Dateisysteme können wir nichts in ihnen speichern. Daher erstellen wir ein ext3 Dateisystem in share, ein xfs Dateisystem in backup und ein reiserfs Dateisystem in media:

mkfs.ext3 /dev/fileserver/share


server1:~# mkfs.ext3 /dev/fileserver/share
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
5242880 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
320 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Dieses Dateisystem wird aller 23 Mounts oder 180 Tagen automatisch überprüft, je nach dem, was zuerst eintritt. Verwende tune2fs -c oder -i um dies zu ändern.

mkfs.xfs /dev/fileserver/backup


server1:~# mkfs.xfs /dev/fileserver/backup
meta-data=/dev/fileserver/backup isize=256 agcount=8, agsize=163840 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=2560, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0

mkfs.reiserfs /dev/fileserver/media


server1:~# mkfs.reiserfs /dev/fileserver/media
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Alexander Lyamin keeps our hardware running, and was very generous to our
project in many little ways.

Chris Mason wrote the journaling code for V3, which was enormously more useful
to users than just waiting until we could create a wandering log filesystem as
Hans would have unwisely done without him.
Jeff Mahoney optimized the bitmap scanning code for V3, and performed the big
endian cleanups.

Guessing about desired format.. Kernel 2.6.17-2-486 is running.
Format 3.6 with standard journal
Count of blocks on the device: 262144
Number of blocks consumed by mkreiserfs formatting process: 8219
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: 2bebf750-6e05-47b2-99b6-916fa7ea5398
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/fileserver/media'!
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/fileserver/media.


Nun können wir unsere Logical Volumes einhängen. Ich möchte share in /var/share, backup in /var/backup und media in /var/media einhängen, dafür müssen wir zuerst diese Verzeichnisse erstellen:

mkdir /var/media /var/backup /var/share

Nun können wir unsere Logical Volumes einhängen:

mount /dev/fileserver/share /var/share
mount /dev/fileserver/backup /var/backup
mount /dev/fileserver/media /var/media

Lass Folgendes laufen

df -h

Du solltest Deine Logical Volumes in der Ausgabe angezeigt sehen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 88K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media

Glückwunsch, Du hast gerade Dein erstes LVM System eingerichtet! Nun kannst Du wie gewöhnlich auf /var/share, /var/backup und /var/media schreiben und lesen.

Wir haben unsere Logical Volumes manuell eingehängt, aber natürlich möchten wir, dass sie automatisch eingehängt werden, wenn das System startet. Daher ändern wir /etc/fstab:

mv /etc/fstab /etc/fstab_orig
cat /dev/null > /etc/fstab

vi /etc/fstab

Setze Folgendes ein:
# /etc/fstab: static file system information.
# # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda2 / ext3 defaults,errors=remount-ro 0 1 /dev/sda1 /boot ext3 defaults 0 2 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 /dev/fileserver/share /var/share ext3 rw,noatime 0 0 /dev/fileserver/backup /var/backup xfs rw,noatime 0 0 /dev/fileserver/media /var/media reiserfs rw,noatime 0 0
Wenn Du es mit unserem Backup der Originaldatei, /etc/fstab_orig, vergleichst, wirst Du feststellen, dass wir folgende Zeilen hinzugefügt haben:

/dev/fileserver/share /var/share ext3 rw,noatime 0 0
/dev/fileserver/backup /var/backup xfs rw,noatime 0 0
/dev/fileserver/media /var/media reiserfs rw,noatime 0 0

Nun starten wir das System neu:

shutdown -r now

Nachdem das System gestartet ist, lass Folgendes erneut laufen.

df -h

Unsere Logical Volumes sollten immer noch in der Ausgabe zu sehen sein:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 88K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media

4 Ändere Die Größe Der Logical Volumes Und Ihrer Dateisysteme

In diesem Kapitel lernen wir, wie wir die Größe unseres Logical Volumes share, das ein ext3 Dateisystem hat, ändern können. (Wie man die Größe der Logical Volumes mit xfs und reiserfs Dateisystemen ändert, erkläre ich an späterer Stelle.)

Zunächst müssen wir es aushängen:

umount /var/share

share sollte in der Ausgabe nicht mehr aufgelistet sein

df -h


server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 88K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media

Lass uns nun share von 40GB auf 50GB vergrößern:

lvextend -L50G /dev/fileserver/share


server1:~# lvextend -L50G /dev/fileserver/share
Extending logical volume share to 50.00 GB
Logical volume share successfully resized

Bis jetzt haben wir nur share vergrößert, aber nicht das ext3 Dateisystem auf share. Das führen wir jetzt durch:

e2fsck -f /dev/fileserver/share


server1:~# e2fsck -f /dev/fileserver/share
e2fsck 1.40-WIP (14-Nov-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/fileserver/share: 11/5242880 files (9.1% non-contiguous), 209588/10485760 blocks

Notiere Dir die Gesamtanzahl von Blocks (10485760), wir brauchen sie wenn wir share später verkleinern.

resize2fs /dev/fileserver/share


server1:~# resize2fs /dev/fileserver/share
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/fileserver/share to 13107200 (4k) blocks.
The filesystem on /dev/fileserver/share is now 13107200 blocks long.

Lass uns share einhängen:

mount /dev/fileserver/share /var/share

und in der Ausgabe

df -h

sollte share nun 50GB anstelle von 40 aufweisen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 88K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media
/dev/mapper/fileserver-share
50G 180M 47G 1% /var/share

Das Verkleinern eines Logical Volumes erfolgt in umgekehrter Reihenfolge: Zuerst müssen wir das Dateisystem verkleinern bevor wir die Größe des Logical Volumes verkleinern. Lass uns nun share erneut auf 40GB verkleinern:

umount /var/share

df -h


server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 88K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media

e2fsck -f /dev/fileserver/share


server1:~# e2fsck -f /dev/fileserver/share
e2fsck 1.40-WIP (14-Nov-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/fileserver/share: 11/6553600 files (9.1% non-contiguous), 251733/13107200 blocks

Wenn wir die Größe eines ext3 Dateisystems ändern (anstatt des verfügbaren Speicherplatzes) nimmt resize2fs die Anzahl der Blocks als Argument (Du kannst die neue Größe auch in MB definieren, etc. Siehe

man resize2fs

um mehr zu erfahren). Von unserer vorherigen Vorgehensweise wissen wir, dass 40GB 10485760 Blocks entspricht, also lassen wir dies laufen

resize2fs /dev/fileserver/share 10485760


server1:~# resize2fs /dev/fileserver/share 10485760
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/fileserver/share to 10485760 (4k) blocks.
The filesystem on /dev/fileserver/share is now 10485760 blocks long.

Wir haben das Dateisystem verkleinert, nun müssen wir auch das Logical Volume verkleinern:

lvreduce -L40G /dev/fileserver/share


server1:~# lvreduce -L40G /dev/fileserver/share
WARNING: Reducing active logical volume to 40.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce share? [y/n]: <-- y
Reducing logical volume share to 40.00 GB
Logical volume share successfully resized

Die Warnung, dass Daten eventuell zerstört sind, können wir ignorieren, da wir das Dateisystem vorher verkleinert haben.

Lass uns nun share wieder einhängen:

mount /dev/fileserver/share /var/share


Die Ausgabe von

df -h

sollte nun so aussehen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 88K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share

5 Eine Festplatte Hinzufügen Und Eine Andere Entfernen

Bis jetzt haben wir /dev/sdf noch nicht verwendet. Wir erstellen nun die Partition /dev/sdf1 (25GB) und fügen sie unserer Volume Group fileserver hinzu.

fdisk /dev/sdf


server1:~# fdisk /dev/sdf
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.

Die Zahl der Zylinder für diese Festplatte ist auf 10443 eingestellt.
Das ist völlig in Ordnung, jedoch ist dies größer als 1024 und könnte in bestimmten Setups folgende Probleme verursachen:
1) Probleme mit der Software, die beim Hochfahren des Rechners startet (z.B. alte Versionen von LILO)
2) Probleme mit dem Boot Loader und Partitionierungssoftware von anderen Betriebssystemen (z.B DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): <-- m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): <-- n
Command action
e extended
p primary partition (1-4)
<-- p
Partition number (1-4): <-- 1
First cylinder (1-10443, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-10443, default 10443): <-- +25000M

Command (m for help): <-- t
Selected partition 1
Hex code (type L to list codes): <-- 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Wir bereiten nun /dev/sdf1 für LVM vor:

pvcreate /dev/sdf1


server1:~# pvcreate /dev/sdf1
Physical volume "/dev/sdf1" successfully created

Füge /dev/sdf1 unserer fileserver Volume Group hinzu:

vgextend fileserver /dev/sdf1

Lass Folgendes laufen

vgdisplay

VG Size sollte nun größer sein als vorher:

server1:~# vgdisplay
--- Volume group ---
VG Name fileserver
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 12
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 5
Act PV 5
VG Size 116.43 GB
PE Size 4.00 MB
Total PE 29805
Alloc PE / Size 11776 / 46.00 GB
Free PE / Size 18029 / 70.43 GB
VG UUID iWr1Vk-7h7J-hLRL-SHbx-3p87-Rq47-L1GyEO

Das war's. /dev/sdf1 wurde der fileserver Volume Group hinzugefügt.

Lass uns nun /dev/sdb1 entfernen. Vorher müssen wir allerdings alle Daten nach /dev/sdf1 kopieren:

pvmove /dev/sdb1 /dev/sdf1

Das kann ein paar Minuten dauern:

server1:~# pvmove /dev/sdb1 /dev/sdf1
/dev/sdb1: Moved: 1.9%
/dev/sdb1: Moved: 3.8%
/dev/sdb1: Moved: 5.8%
/dev/sdb1: Moved: 7.8%
/dev/sdb1: Moved: 9.7%
/dev/sdb1: Moved: 11.6%
/dev/sdb1: Moved: 13.6%
/dev/sdb1: Moved: 15.6%
/dev/sdb1: Moved: 17.5%
/dev/sdb1: Moved: 19.4%
/dev/sdb1: Moved: 21.4%
[...]
/dev/sdb1: Moved: 85.7%
/dev/sdb1: Moved: 87.7%
/dev/sdb1: Moved: 89.7%
/dev/sdb1: Moved: 91.7%
/dev/sdb1: Moved: 93.6%
/dev/sdb1: Moved: 95.5%
/dev/sdb1: Moved: 97.5%
/dev/sdb1: Moved: 99.4%
/dev/sdb1: Moved: 100.0%

Als Nächstes entfernen wir /dev/sdb1 aus der fileserver Volume Group:

vgreduce fileserver /dev/sdb1


server1:~# vgreduce fileserver /dev/sdb1
Removed "/dev/sdb1" from volume group "fileserver"

vgdisplay


server1:~# vgdisplay
--- Volume group ---
VG Name fileserver
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 16
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 4
Act PV 4
VG Size 93.14 GB
PE Size 4.00 MB
Total PE 23844
Alloc PE / Size 11776 / 46.00 GB
Free PE / Size 12068 / 47.14 GB
VG UUID iWr1Vk-7h7J-hLRL-SHbx-3p87-Rq47-L1GyEO

Dann lassen wir Folgendes laufen

pvremove /dev/sdb1

/dev/sdb1 sollte nun nicht mehr als Physical Volume aufgelistet sein:

pvdisplay


server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/sdc1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 1682
Allocated PE 4279
PV UUID 40GJyh-IbsI-pzhn-TDRq-PQ3l-3ut0-AVSE4B

--- Physical volume ---
PV Name /dev/sdd1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 4681
Allocated PE 1280
PV UUID 4mU63D-4s26-uL00-r0pO-Q0hP-mvQR-2YJN5B

--- Physical volume ---
PV Name /dev/sde1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 5705
Allocated PE 256
PV UUID 3upcZc-4eS2-h4r4-iBKK-gZJv-AYt3-EKdRK6

--- Physical volume ---
PV Name /dev/sdf1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID 1xgo2I-SBjj-0MAz-lmDu-OLZ1-3NdO-mLkS20

Nun könntest Du /dev/sdb aus dem System entfernen (wenn dies ein richtiges System und keine virtuelle Maschine wäre).

6 Kehre Zum Ursprünglichen Status Des Systems Zurück

In diesem Kapitel machen wir die Änderungen der vorherigen Kapitel rückgängig um zum ursprünglichen Status des Systems zurückzukehren. Dies ist für Übungszwecke gedacht, damit Du lernst, wie Du ein LVM Setup aufheben kannst.

Zunächst müssen wir unsere Logical Volumes aushängen:

umount /var/share
umount /var/backup
umount /var/media

df -h


server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 665M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 92K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
Then we delete each of them:

lvremove /dev/fileserver/share


server1:~# lvremove /dev/fileserver/share
Do you really want to remove active logical volume "share"? [y/n]: <-- y
Logical volume "share" successfully removed

lvremove /dev/fileserver/backup


server1:~# lvremove /dev/fileserver/backup
Do you really want to remove active logical volume "backup"? [y/n]: <-- y
Logical volume "backup" successfully removed

lvremove /dev/fileserver/media


server1:~# lvremove /dev/fileserver/media
Do you really want to remove active logical volume "media"? [y/n]: <-- y
Logical volume "media" successfully removed

Als Nächstes entfernen wir die Volume Group fileserver:

vgremove fileserver


server1:~# vgremove fileserver
Volume group "fileserver" successfully removed

Letztendlich führen wir Folgendes aus:

pvremove /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1


server1:~# pvremove /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
Labels on physical volume "/dev/sdc1" successfully wiped
Labels on physical volume "/dev/sdd1" successfully wiped
Labels on physical volume "/dev/sde1" successfully wiped
Labels on physical volume "/dev/sdf1" successfully wiped

vgdisplay


server1:~# vgdisplay
No volume groups found

pvdisplay

sollte gar nichts anzeigen:

server1:~# pvdisplay

Nun müssen wir unsere Änderungen in /etc/fstab rückgängig machen um zu verhindern, dass das System versucht, nicht vorhandene Geräte einzuhängen. Erfreulicherweise haben wir ein Backup der ursprünglichen Datei erstellt, das wir nun zurückkopieren können:

mv /etc/fstab_orig /etc/fstab

Starte das System neu:

shutdown -r now

Danach sollte die Ausgabe von

df -h

wie folgt aussehen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 666M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 92K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot

Der ursprüngliche Status des Systems ist nun wieder hergestellt (außer dass die Partitionen /dev/sdb1 - /dev/sdf1 immer noch existieren - Du könntest sie mit fdisk entfernen, wir führen dies allerdings jetzt nicht aus - wie auch die Verzeichnisse /var/share, /var/backup und /var/media die wir auch nicht löschen).

7 LVM Auf RAID1

In diesem Kapitel richten wir LVM erneut ein und verschieben es in ein RAID1 array um eine Hochverfügbarkeit zu garantieren. Am Ende sollte es wie folgt aussehen:


Das bedeutet wir erstellen das RAID array /dev/md0 von den Partitionen /dev/sdb1 + /dev/sdc1 und das RAID array /dev/md1 von den Partitionen /dev/sdd1 + /dev/sde1. /dev/md0 und /dev/md1 sind dann unsere Physical Volumes für LVM.

Bevor wir dazu kommen, richten wir LVM wie zuvor ein:

pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
lvcreate --name share --size 40G fileserver
lvcreate --name backup --size 5G fileserver
lvcreate --name media --size 1G fileserver

mkfs.ext3 /dev/fileserver/share
mkfs.xfs /dev/fileserver/backup
mkfs.reiserfs /dev/fileserver/media

Dann hängen wir unsere Logical Volumes ein:

mount /dev/fileserver/share /var/share
mount /dev/fileserver/backup /var/backup
mount /dev/fileserver/media /var/media

Die Ausgabe von

df -h

sollte nun so aussehen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 666M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 92K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.0G 33M 992M 4% /var/media

Nun müssen wir die Inhalte von /dev/sdc1 und /dev/sde1 (/dev/sdc1 ist die zweite Partition unserer zukünftigen /dev/md0, /dev/sde1 die zweite Partition unserer zukünftigen /dev/md1) zu den verbleibenden Partitionen verschieben, da wir sie danach aus LVM entfernen und mit der Eingabe von fd (Linux RAID autodetect) formatiern und sie nach /dev/md0 bzw. /dev/md1 verschieben.

modprobe dm-mirror
pvmove /dev/sdc1

vgreduce fileserver /dev/sdc1
pvremove /dev/sdc1

pvdisplay


server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID USDJyG-VDM2-r406-OjQo-h3eb-c9Mp-4nvnvu

--- Physical volume ---
PV Name /dev/sdd1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 4681
Allocated PE 1280
PV UUID qdEB5d-389d-O5UA-Kbwv-mn1y-74FY-4zublN

--- Physical volume ---
PV Name /dev/sde1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 1426
Allocated PE 4535
PV UUID 4vL1e0-sr2M-awGd-qDJm-ZrC9-wuxW-2lEqp2

pvmove /dev/sde1


vgreduce fileserver /dev/sde1
pvremove /dev/sde1

pvdisplay


server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID USDJyG-VDM2-r406-OjQo-h3eb-c9Mp-4nvnvu

--- Physical volume ---
PV Name /dev/sdd1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 146
Allocated PE 5815
PV UUID qdEB5d-389d-O5UA-Kbwv-mn1y-74FY-4zublN

Nun formatieren wir /dev/sdc1 indem wir fd tippen (Linux RAID autodetect):

fdisk /dev/sdc

server1:~# fdisk /dev/sdc


Die Zahl der Zylinder für diese Festplatte ist auf 10443 eingestellt.
Das ist völlig in Ordnung, jedoch ist dies größer als 1024 und könnte in bestimmten Setups folgende Probleme verursachen:
1) Probleme mit der Software, die beim Hochfahren des Rechners startet (z.B. alte Versionen von LILO)
2) Probleme mit dem Boot Loader und Partitionierungssoftware von anderen Betriebssystemen (z.B DOS FDISK, OS/2 FDISK)

Command (m for help): <-- m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

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 / So 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): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


Verfahre nun mit /dev/sde1 genauso:

fdisk /dev/sde

Die Ausgabe von

fdisk -l

sollte nun wie folgt aussehen:

server1:~# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 18 144553+ 83 Linux
/dev/sda2 19 2450 19535040 83 Linux
/dev/sda4 2451 2610 1285200 82 Linux swap / Solaris

Disk /dev/sdb: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 3040 24418768+ 8e Linux LVM

Disk /dev/sdc: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 3040 24418768+ fd Linux raid autodetect

Disk /dev/sdd: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdd1 1 3040 24418768+ 8e Linux LVM

Disk /dev/sde: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sde1 1 3040 24418768+ fd Linux raid autodetect

Disk /dev/sdf: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdf1 1 3040 24418768+ 8e Linux LVM

Als Nächstes fügen wir /dev/sdc1 zu /dev/md0 und /dev/sde1 zu /dev/md1 hinzu. Da die zweiten Systeme (/dev/sdb1 und /dev/sdd1) noch nicht fertig sind, müssen wir missing in den folgenden Befehlen definieren:

mdadm --create /dev/md0 --auto=yes -l 1 -n 2 /dev/sdc1 missing


server1:~# mdadm --create /dev/md0 --auto=yes -l 1 -n 2 /dev/sdc1 missing
mdadm: array /dev/md0 started.

mdadm --create /dev/md1 --auto=yes -l 1 -n 2 /dev/sde1 missing


server1:~# mdadm --create /dev/md1 --auto=yes -l 1 -n 2 /dev/sde1 missing
mdadm: array /dev/md1 started.

Danach bereiten wir /dev/md0 und /dev/md1 für LVM vor:

pvcreate /dev/md0 /dev/md1


server1:~# pvcreate /dev/md0 /dev/md1
Physical volume "/dev/md0" successfully created
Physical volume "/dev/md1" successfully created

und erweitern unsere fileserver Volume Group:

vgextend fileserver /dev/md0 /dev/md1


server1:~# vgextend fileserver /dev/md0 /dev/md1
Volume group "fileserver" successfully extended

Die Ausgaben von

pvdisplay

und

vgdisplay

sollten wie folgt aussehen:

server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID USDJyG-VDM2-r406-OjQo-h3eb-c9Mp-4nvnvu

--- Physical volume ---
PV Name /dev/sdd1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 146
Allocated PE 5815
PV UUID qdEB5d-389d-O5UA-Kbwv-mn1y-74FY-4zublN

--- Physical volume ---
PV Name /dev/md0
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 5961
Allocated PE 0
PV UUID 7JHUXF-1R2p-OjbJ-X1OT-uaeg-gWRx-H6zx3P

--- Physical volume ---
PV Name /dev/md1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 5961
Allocated PE 0
PV UUID pwQ5AJ-RwVK-EebA-0Z13-d27d-2IdP-HqT5RW

server1:~# vgdisplay
--- Volume group ---
VG Name fileserver
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 14
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 4
Act PV 4
VG Size 93.14 GB
PE Size 4.00 MB
Total PE 23844
Alloc PE / Size 11776 / 46.00 GB
Free PE / Size 12068 / 47.14 GB
VG UUID dQDEHT-kNHf-UjRm-rmJ3-OUYx-9G1t-aVskI1

Nun verschieben wir die Inhalte von /dev/sdb1 nach /dev/md0 und die Inhalte von /dev/sdd1 nach /dev/md1, dann entfernen wir /dev/sdb1 und /dev/sdd1 aus LVM:

pvmove /dev/sdb1 /dev/md0

pvmove /dev/sdd1 /dev/md1


vgreduce fileserver /dev/sdb1 /dev/sdd1
pvremove /dev/sdb1 /dev/sdd1

Nun sollten nur /dev/md0 und /dev/md1 als Physical Volumes übrig sein:

pvdisplay


server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md0
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID 7JHUXF-1R2p-OjbJ-X1OT-uaeg-gWRx-H6zx3P

--- Physical volume ---
PV Name /dev/md1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 146
Allocated PE 5815
PV UUID pwQ5AJ-RwVK-EebA-0Z13-d27d-2IdP-HqT5RW

Nun formatieren wir /dev/sdb1 mit fd (Linux RAID autodetect):

fdisk /dev/sdb

server1:~# fdisk /dev/sdb


Die Zahl der Zylinder für diese Festplatte ist auf 32635 eingestellt.
Das ist völlig in Ordnung, jedoch ist dies größer als 1024 und könnte in bestimmten Setups folgende Probleme verursachen:
1) Probleme mit der Software, die beim Hochfahren des Rechners startet (z.B. alte Versionen von LILO)
2) Probleme mit dem Boot Loader und Partitionierungssoftware von anderen Betriebssystemen (z.B DOS FDISK, OS/2 FDISK)

Command (m for help): <-- m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): <-- t
Selected partition 1
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


Verfahre genauso mit /dev/sdd1:

fdisk /dev/sdd

Füge als Nächstes /dev/sdb1 zu /dev/md0 und /dev/sdd1 zu /dev/md1 hinzu:

mdadm --manage /dev/md0 --add /dev/sdb1


server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1

mdadm --manage /dev/md1 --add /dev/sdd1


server1:~# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: added /dev/sdd1

Nun werden die zwei RAID arrays synchronisiert. Das kann etwas dauern. Mit

cat /proc/mdstat

kannst Du überprüfen, wann der Prozess abgeschlossen sein wird. Die Ausgabe des noch nicht beendeten Prozesses sieht wie folgt aus:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md1 : active raid1 sdd1[2] sde1[0]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 6.4% (1586560/24418688) finish=1.9min speed=198320K/sec

md0 : active raid1 sdb1[2] sdc1[0]
24418688 blocks [2/1] [U_]
[==>..................] recovery = 10.5% (2587264/24418688) finish=2.8min speed=129363K/sec

unused devices: <none>

So sieht es aus, wenn der Prozess abgeschlossen ist:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md1 : active raid1 sdd1[1] sde1[0]
24418688 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sdc1[0]
24418688 blocks [2/2] [UU]

unused devices: <none>

Wenn Du Dir PV Size in der Ausgabe von

pvdisplay

ansiehst, siehst Du, dass 2 * 23.29GB = 46.58GB verfügbar sind, jedoch werden nur 40GB (share) + 5GB (backup) + 1GB (media) = 46GB verwendet, was bedeutet, dass wir eine unserer Logical Geräte um etwa 0,5GB erweitern könnten. Ich habe bereits gezeigt, wie man ein ext3 Logical Volume (share) erweitert, also werden wir nun die Größe von media, das reiserfs verwendet, ändern. reiserfs Dateisysteme können ohne Aushängen geändert werden:

lvextend -L1.5G /dev/fileserver/media


server1:~# lvextend -L1.5G /dev/fileserver/media
Extending logical volume media to 1.50 GB
Logical volume media successfully resized

resize_reiserfs /dev/fileserver/media


server1:~# resize_reiserfs /dev/fileserver/media
resize_reiserfs 3.6.19 (2003 www.namesys.com)

resize_reiserfs: On-line resizing finished successfully.

Die Ausgabe von

df -h

sieht wie folgt aus:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 666M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 92K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.5G 33M 1.5G 3% /var/media

Wenn wir möchten, dass unsere Logical Volumes beim Hochfahren automatisch eingehängt werden, müssen wir /etc/fstab erneut ändern (wie in Kapitel 3):

mv /etc/fstab /etc/fstab_orig
cat /dev/null > /etc/fstab

vi /etc/fstab

Setze Folgendes ein:
# /etc/fstab: static file system information.
# # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/sda2 / ext3 defaults,errors=remount-ro 0 1 /dev/sda1 /boot ext3 defaults 0 2 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 /dev/fileserver/share /var/share ext3 rw,noatime 0 0 /dev/fileserver/backup /var/backup xfs rw,noatime 0 0 /dev/fileserver/media /var/media reiserfs rw,noatime 0 0
Wenn Du es mit dem Backup unserer ursprünglichen Datei, /etc/fstab_orig, vergleichst, wirst Du feststellen, dass wir folgende Zeile hinzugefügt haben:

/dev/fileserver/share /var/share ext3 rw,noatime 0 0
/dev/fileserver/backup /var/backup xfs rw,noatime 0 0
/dev/fileserver/media /var/media reiserfs rw,noatime 0 0
Now we reboot the system:

shutdown -r now

Nachdem das System wieder gestartet ist, lass Folgendes erneut laufen

df -h

Es sollte immer noch unsere Logical Volumes in der Ausgabe anzeigen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 666M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 100K 10M 1% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share
/dev/mapper/fileserver-backup
5.0G 144K 5.0G 1% /var/backup
/dev/mapper/fileserver-media
1.5G 33M 1.5G 3% /var/media

Nun ist unser LVM auf RAID1 Setup abgeschlossen.

8 Ersetzen Der Festplatten Mit Größeren Festplatten

Momentan verwenden wir vier Festplatten je von der Größe 25GB (zumindest tun wir so). Lass uns nun davon ausgehen, dass dies nicht mehr ausreicht und wir brauchen in unserem RAID Setup mehr Speicherplatz. Daher ersetzen wir unsere 25GB Festplatten mit 80GB Festplatten (tatsächlich verwenden wir immer noch die derzeitigen Festplatten, jedoch schöpfen wir nun ihre volle Kapazität aus - normalerweise würdest Du Deine alten, kleinen Festplatten mit neuen, größeren Festplatten esetzen).

Das Prozedere lautet wie folgt: Zuerst entfernen wir /dev/sdb und /dev/sdd aus den RAID arrays, ersetzen sie mit größeren Festplatten, setzen sie wieder in die RAID arrays ein und dann führen wir das Gleiche mit /dev/sdc und /dev/sde durch.

Zunächst markieren wir /dev/sdb1 als fehlgeschlagen:

mdadm --manage /dev/md0 --fail /dev/sdb1


server1:~# mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

Die Ausgabe von

cat /proc/mdstat

sieht nun wie folgt aus:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sdc1[0] sdb1[2](F)
24418688 blocks [2/1] [U_]

md1 : active raid1 sde1[0] sdd1[1]
24418688 blocks [2/2] [UU]

unused devices: <none>

Dann entfernen wir /dev/sdb1 aus dem RAID array /dev/md0:

mdadm --manage /dev/md0 --remove /dev/sdb1


server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1

cat /proc/mdstat


server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sdc1[0]
24418688 blocks [2/1] [U_]

md1 : active raid1 sde1[0] sdd1[1]
24418688 blocks [2/2] [UU]

unused devices: <none>

Nun verfahren wir genauso mit /dev/sdd1:

mdadm --manage /dev/md1 --fail /dev/sdd1


server1:~# mdadm --manage /dev/md1 --fail /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md1

cat /proc/mdstat


server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sdc1[0]
24418688 blocks [2/1] [U_]

md1 : active raid1 sde1[0] sdd1[2](F)
24418688 blocks [2/1] [U_]

unused devices: <none>

mdadm --manage /dev/md1 --remove /dev/sdd1


server1:~# mdadm --manage /dev/md1 --remove /dev/sdd1
mdadm: hot removed /dev/sdd1

cat /proc/mdstat


server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sdc1[0]
24418688 blocks [2/1] [U_]

md1 : active raid1 sde1[0]
24418688 blocks [2/1] [U_]

unused devices: <none>

Normalerweise würdest Du das System jetzt runter fahren, die 25GB /dev/sdb und /dev/sdd entnehmen und sie mit 80GB Festplatten ersetzen. Wie ich bereits erwähnt habe, müssen wir dies nicht tun, da jede Festplatte bereits eine Kapazität von 80GB hat.

Als Nächstes müssen wir /dev/sdb und /dev/sdd formatieren. Wir müssen eine /dev/sdb1 bzw. /dev/sdd1 Partition erstellen, fd tippen (Linux RAID autodetect), Größe 25GB (die gleichen Einstellungen wie auf den alten Festplatten) und eine /dev/sdb2 bzw. /dev/sdd2 Partition erstellen, fd tippen, die den Rest der Festplatten ausschöpfen. Da /dev/sdb1 und /dev/sdd1 immer noch auf unseren Festplatten präsent sind, müssen wir in diesem speziellen Beispiel nur /dev/sdb2 und /dev/sdd2 erstellen.

fdisk /dev/sdb

server1:~# fdisk /dev/sdb


Die Zahl der Zylinder für diese Festplatte ist auf 10443 eingestellt.
Das ist völlig in Ordnung, jedoch ist dies größer als 1024 und könnte in bestimmten Setups folgende Probleme verursachen:
1) Probleme mit der Software, die beim Hochfahren des Rechners startet (z.B. alte Versionen von LILO)
2) Probleme mit dem Boot Loader und Partitionierungssoftware von anderen Betriebssystemen (z.B DOS FDISK, OS/2 FDISK)

Command (m for help): <-- p


Disk /dev/sdb: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 3040 24418768+ fd Linux raid autodetect

Command (m for help): <-- n
Command action
e extended
p primary partition (1-4)
<-- p
Partition number (1-4): <-- 2
First cylinder (3041-10443, default 3041): <-- <ENTER>
Using default value 3041
Last cylinder or +size or +sizeM or +sizeK (3041-10443, default 10443): <-- <ENTER>
Using default value 10443

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Führe das Gleiche für /dev/sdd aus:

fdisk /dev/sdd

Die Ausgabe von

fdisk -l

sieht wie folgt aus:

server1:~# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 18 144553+ 83 Linux
/dev/sda2 19 2450 19535040 83 Linux
/dev/sda4 2451 2610 1285200 82 Linux swap / Solaris

Disk /dev/sdb: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 3040 24418768+ fd Linux raid autodetect
/dev/sdb2 3041 10443 59464597+ fd Linux raid autodetect

Disk /dev/sdc: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 3040 24418768+ fd Linux raid autodetect

Disk /dev/sdd: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdd1 1 3040 24418768+ fd Linux raid autodetect
/dev/sdd2 3041 10443 59464597+ fd Linux raid autodetect

Disk /dev/sde: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sde1 1 3040 24418768+ fd Linux raid autodetect

Disk /dev/sdf: 85.8 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdf1 1 3040 24418768+ 8e Linux LVM

Disk /dev/md1: 25.0 GB, 25004736512 bytes
2 heads, 4 sectors/track, 6104672 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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


Disk /dev/md0: 25.0 GB, 25004736512 bytes
2 heads, 4 sectors/track, 6104672 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

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

Nun fügen wir erneut /dev/sdb1 zu /dev/md0 und /dev/sdd1 zu /dev/md1 hinzu:

mdadm --manage /dev/md0 --add /dev/sdb1


server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1

mdadm --manage /dev/md1 --add /dev/sdd1


server1:~# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: re-added /dev/sdd1

Nun werden die Inhalter beider RAID arrays synchronisiert. Wir müssen abwarten, bis dies abgeschlossen ist, bevor wir weiter machen können. Den Status der Synchronisation können wir mit Folgendem überprüfen

cat /proc/mdstat

Während der Synchronisation sieht die Ausgabe wie folgt aus:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sdb1[1] sdc1[0]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec

md1 : active raid1 sdd1[1] sde1[0]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec

unused devices: <none>

So sieht sie aus wenn die Synchronisation abgeschlossen ist:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sdb1[1] sdc1[0]
24418688 blocks [2/2] [UU]

md1 : active raid1 sdd1[1] sde1[0]
24418688 blocks [2/2] [UU]

unused devices: <none>

Nun führen wir den gleichen Prozess erneut aus, dieses Mal ersetzen wir /dev/sdc und /dev/sde:

mdadm --manage /dev/md0 --fail /dev/sdc1
mdadm --manage /dev/md0 --remove /dev/sdc1
mdadm --manage /dev/md1 --fail /dev/sde1
mdadm --manage /dev/md1 --remove /dev/sde1

fdisk /dev/sdc
fdisk /dev/sde

mdadm --manage /dev/md0 --add /dev/sdc1
mdadm --manage /dev/md1 --add /dev/sde1

cat /proc/mdstat

Warte bis die Synchronisation abgeschlossen ist.

Als Nächstes erstellen wir die RAID arrays /dev/md2 von /dev/sdb2 und /dev/sdc2 sowie /dev/md3 von /dev/sdd2 und /dev/sde2.

mdadm --create /dev/md2 --auto=yes -l 1 -n 2 /dev/sdb2 /dev/sdc2


server1:~# mdadm --create /dev/md2 --auto=yes -l 1 -n 2 /dev/sdb2 /dev/sdc2
mdadm: array /dev/md2 started.

mdadm --create /dev/md3 --auto=yes -l 1 -n 2 /dev/sdd2 /dev/sde2


server1:~# mdadm --create /dev/md3 --auto=yes -l 1 -n 2 /dev/sdd2 /dev/sde2
mdadm: array /dev/md3 started.

Bevor wir weiter machen, müssen die neuen RAID arrays synchronisiert werden, also solltest Du Folgendes überprüfen

cat /proc/mdstat


server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md3 : active raid1 sde2[1] sdd2[0]
59464512 blocks [2/2] [UU]
[=>...................] resync = 5.1% (3044224/59464512) finish=5.5min speed=169123K/sec

md2 : active raid1 sdc2[1] sdb2[0]
59464512 blocks [2/2] [UU]
[=>...................] resync = 5.5% (3312512/59464512) finish=9.3min speed=100379K/sec

md0 : active raid1 sdc1[0] sdb1[1]
24418688 blocks [2/2] [UU]

md1 : active raid1 sde1[0] sdd1[1]
24418688 blocks [2/2] [UU]

unused devices: <none>

Nachdem die Synchronisation abgeschlossen ist, bereiten wir /dev/md2 und /dev/md3 für LVM vor:

pvcreate /dev/md2 /dev/md3


server1:~# pvcreate /dev/md2 /dev/md3
Physical volume "/dev/md2" successfully created
Physical volume "/dev/md3" successfully created

und fügen /dev/md2 und /dev/md3 unserer fileserver Volume Group hinzu:

vgextend fileserver /dev/md2 /dev/md3


server1:~# vgextend fileserver /dev/md2 /dev/md3
Volume group "fileserver" successfully extended

Lass uns nun unsere *display Befehel laufen lassen:

pvdisplay


server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md0
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 5961
Free PE 0
Allocated PE 5961
PV UUID 7JHUXF-1R2p-OjbJ-X1OT-uaeg-gWRx-H6zx3P

--- Physical volume ---
PV Name /dev/md1
VG Name fileserver
PV Size 23.29 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 5961
Free PE 18
Allocated PE 5943
PV UUID pwQ5AJ-RwVK-EebA-0Z13-d27d-2IdP-HqT5RW

--- Physical volume ---
PV Name /dev/md2
VG Name fileserver
PV Size 56.71 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 14517
Free PE 14517
Allocated PE 0
PV UUID 300kTo-evxm-rfmf-90LA-4YOJ-2LG5-t4JHnf

--- Physical volume ---
PV Name /dev/md3
VG Name fileserver
PV Size 56.71 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 14517
Free PE 14517
Allocated PE 0
PV UUID LXFSW6-7LQX-ZGGU-dV95-jQgg-TK44-U5JOjO

vgdisplay


server1:~# vgdisplay
--- Volume group ---
VG Name fileserver
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 26
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 4
Act PV 4
VG Size 159.98 GB
PE Size 4.00 MB
Total PE 40956
Alloc PE / Size 11904 / 46.50 GB
Free PE / Size 29052 / 113.48 GB
VG UUID dQDEHT-kNHf-UjRm-rmJ3-OUYx-9G1t-aVskI1

lvdisplay


server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/fileserver/share
VG Name fileserver
LV UUID bcn3Oi-vW3p-WoyX-QlF2-xEtz-uz7Z-4DllYN
LV Write Access read/write
LV Status available
# open 1
LV Size 40.00 GB
Current LE 10240
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0

--- Logical volume ---
LV Name /dev/fileserver/backup
VG Name fileserver
LV UUID vfKVnU-gFXB-C6hE-1L4g-il6U-78EE-N8Sni8
LV Write Access read/write
LV Status available
# open 1
LV Size 5.00 GB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1

--- Logical volume ---
LV Name /dev/fileserver/media
VG Name fileserver
LV UUID H1gagh-wTwH-Og0S-cJNQ-BgX1-zGlM-LwLVzE
LV Write Access read/write
LV Status available
# open 2
LV Size 1.50 GB
Current LE 384
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:2

Wenn Deine Ausgaben ähnlich aussehen, hast Du Deine kleinen Festplatten erfolgreich mit den größeren ersetzt.

Da wir nun einen größeren Speicherplatz haben (2* 23.29GB + 2 * 56.71GB = 160GB), könnten wir unsere Logical Volumes vergrößern. Bis jetzt weißt Du wie man ext3 und reiserfs Partitionen vergrößert, also lass uns jetzt unsere backup Logical Volume, die xfs verwendet, vergrößern:

lvextend -L10G /dev/fileserver/backup


server1:~# lvextend -L10G /dev/fileserver/backup
Extending logical volume backup to 10.00 GB
Logical volume backup successfully resized

Um das xfs Dateisystem zu vergrößern, lassen wir dies laufen

xfs_growfs /dev/fileserver/backup


server1:~# xfs_growfs /dev/fileserver/backup
meta-data=/dev/fileserver/backup isize=256 agcount=8, agsize=163840 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal bsize=4096 blocks=2560, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0
data blocks changed from 1310720 to 2621440

Die Ausgabe von

df -h

sollte nun wie golgt aussehen:

server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 666M 17G 4% /
tmpfs 78M 0 78M 0% /lib/init/rw
udev 10M 116K 9.9M 2% /dev
tmpfs 78M 0 78M 0% /dev/shm
/dev/sda1 137M 17M 114M 13% /boot
/dev/mapper/fileserver-share
40G 177M 38G 1% /var/share
/dev/mapper/fileserver-backup
10G 272K 10G 1% /var/backup
/dev/mapper/fileserver-media
1.5G 33M 1.5G 3% /var/media

Das war's! Wenn Du es bis hierhin geschafft hast, solltest Du mit LVM und LVM auf RAID vertraut sein.

9 Links