Udvid en LVM partition

Skrevet af: Patrick Kerwood

Ved en typisk Linux installation, får man muligheden for at oprette partitionerne som LVM. LVM står for “Logical Volume Manager” og har rigtig mange egenskaber. I dette indlæg vil jeg udvide en eksisterende LVM partition med en anden og på den måde gøre den større.

Der kan være flere årsager til at man ønsker at gøre en partition større. I mit tilfælde, har jeg en virtuel Debian server, jeg bruger til SPAM filter, hvor log filerne havde fyldt root partitionen op. Resultatet af dette var at Postfix ikke kunne videre sende mails.

For at lave en ny partition, kræver det at man har fri plads på harddisken. Jeg kører denne server i HyperV, som er Microsofts svar på VMware, så jeg kan nemt gøre den virtuelle harddisk større og dermed gøre plads til en partition mere.

OBS: Husk at tage backup af dit data, da der er risiko for at miste det, hvis du laver fejl. Hvis du bruger en hypervisor (HyperV, VMware eller lign.) kan du tage et snapshot af serveren inden du går igang. Dog skal du huske først at tage snapshottet efter du har udvidet harddisken.

Da denne metode bruger den eksistrende plads på harddisken, må du ikke i forvejen have 4 primary partitioner på disken, da det er max. Hvis du har det, skal du finde en anden løsning end den her.

LVM kan være noget forvirrende. Og selv om jeg er ved at lave denne guide, vrider jeg stadig min hjerne for helt at forstå det :). Hvis du har det på samme måde, vil jeg anbefale dig at læse, nedenstående link. Det er en kort tekst der hurtig forklare det basale.

Understading LVM. (Drop down)
LVM is handy when you want additional flexibility to grow or shrink your storage space safely without impacting filesystems negatively. It’s key to remember that LVM provides flexibility – not redundancy. The best way to understand LVM is to understand four terms: physical volumes, physical extents, volume groups and logical volumes.

Physical volumes are probably the easiest to understand for most users. The stuff you deal with all day, /dev/hda2, /dev/sd3 – these are physical volumes. They’re real hard drive partitions which are finitely defined. LVM comes along and chops those physical volumes up into little pieces called physical extents. Extents are simply just pieces of a regular system partition, and the size of the extent is determined by the OS.

So what happens with these extents? You can pool a group of extents together to form a volume group. From there, you can carve out chunks of the extents from the volume group to make logical volumes.

Confused? You should be! Let’s try an example:

You have two system partitions: /dev/sda2 and /dev/sda3. Let’s say that /dev/sda2 has 1,000 extents and /dev/sda3 has 2,000 extents. The first thing you’ll want to do is initialize the physical volumes, which basically tells LVM you want to chop them up into pieces so you can use them later:

# pvcreate /dev/sda2
# pvcreate /dev/sda3

Graphically, here’s what’s happened so far:

Now, LVM has split these physical volumes (partitions) into small pieces called extents. So, we should have 3,000 extents total once we create the physical volumes with LVM (1,000 for sda2 and 2,000 for sda3). Now, we need to take all of these extents and put them into a group, called the volume group:

vgcreate test /dev/sda2 /dev/sda3

Again, here’s what we’ve done:

So what’s happened so far? The physical volumes (partitions) are unchanged, but LVM has split them into extents, and we’ve now told LVM that we want to include the extents from both physical volumes in a volume group called test. The volume group test is basically a big bucket holding all of our extents from both physical volumes. To move on, you need to find out how many extents we have in our volume group now:

vgdisplay -v test

We should see that Total PE in the output shows 3,000, with a Free PE of 3,000 since we haven’t done anything with our extents yet. Now we can take all these extents in the volume group and lump them together into a 1,500 extent partition:

lvcreate -l 1500 -n FIRST test

What did we just do? We made a real linux volume called /dev/test/FIRST that has 1,500 extents. Toss a filesystem onto that new volume and you’re good to go:

mke2fs -j /dev/test/FIRST

So, this new logical volume contains 1,500 extents, which means we have 1,500 left over. Might as well make a second volume out of the remaining extents in our volume group:

lvcreate -l 1500 -n SECOND test
mke2fs -j /dev/test/SECOND

Now you have two equal sized logical volumes whereas you had one small one (sda2) and one large one (sda3) before. The two logical volumes use extents from both physical volumes that are both held within the same volume group. You end up with something like this:

Link til kilde

Check din partition

Kør nedenstående kommando for at få en liste over dine partitioner.
sudo fdisk -l

På overstående billede kan du se at den virtuelle HDD er 8589 MB stor.

Kør nedenstående kommando for at få en liste over dine mounted partitioner. I denne guide vil jeg bruge /home partitionen som eksempel.

df -h

Da det er min home partition jeg vil udvide, er det /dev/mapper/debian-home jeg skal have fat i senere. Størrelsen på den er 5.0 GB, og jeg vil udvide den med 3GB.

Jeg lukker nu serveren ned og udvider den virtuelle disk, med 3GB, i min VM manager.

På nedenstående billede kan du se at den virtuelle disk nu er uddvidet til 11.8GB

Opret partitionen

Brug fdisk til at oprette partitionen.
sudo fdisk /dev/sda

Først vælg n for “New Partition”.
WARNING:
DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n

Vælg p for Primary.
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): p

Som du kan se på nedenstående billede, har disken sda tre andre partitioner, sda1, sda2 og sda5. Derfor giver vi denne partition nummer 3.
Partition number (1-4, default 3): 3

I kode snippet længere nede, foreslår fdisk at starte partitionen på sector 499712, som er lige efter sda1. Men der er ikke plads nok. Du skal derfor vælge den sidste frie sector, efter den partition der slutter med den højeste sector.

Som du kan se på overstående billede, ender sda2/sda5 på sector 16775167, og vi starter derfor den nye partition på 16775168.
First sector (499712-23068671, default 499712): 16775168 Læs mere om partitions tabellen her. (Drop down)

On Linux traditional DOS-partitions will show up this way:

Partitions from 1 to 4 are primary partitions
Partitions above 5 are logical partitions.

In the DOS-partitioning-scheme (this is not Linux-specific) if you want to use logical partitions you have to define a pointer within one of the primary partitions for these. At this pointer the BIOS will find further information.

This pointer (sda2) shows in fdisk as id 5 “Extended” – it extends the partitioning-scheme to more than the default 4 partitions normally possible.

Now your system consists of two partitions:

One primary, bootable partition: sda1 and one logical partition: sda5 .

Link til kilde

Tryk her efter for at acceptere den slut sector fdisk foreslår.
Last sector, +sectors or +size{K,M,G} (16775168-23068671, default 23068671): <ENTER>

System ID’et skal laves om. Vælg t for at ændre system ID’et for partitionen og 3 for sda3. Hvis du har valgt et andet nummer, vælger du selvfølgelig det.

Command (m for help): t
Partition number (1-5): 3

Vælg herefter 8e, som er Hex koden for Linux LVM.
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Til sidst vælg w for at Write, for at skrive det hele til disken.
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

 
Med en sudo fdisk -l, vil du nu kunne se at der er kommet en LVM partition mere.

Genstart af serveren er nu påkrævet for at fortsætte med guiden.

Udvid den Logisk Volume

Først bruger vi pvcreate til at klargøre den fysiske volume, som den logiske volume manager skal bruge senere.

kerwood@debian:~$ sudo pvcreate /dev/sda3
  Writing physical volume data to disk "/dev/sda3"
  Physical volume "/dev/sda3" successfully created

Find Volume gruppe navnet med vgdisplay. Nedenstående kommando viser en del mere info, men jeg har blot taget linjen med navnet, som er “debian”.
kerwood@debian:~$ sudo vgdisplay
  --- Volume group ---
  VG Name               debian
...

Nu tilføjer vi den fysiske volume, /dev/sda3, til volume gruppen debian, med vgextend kommandoen.
kerwood@debian:~$ sudo vgextend debian /dev/sda3
  Volume group "debian" successfully extended

Nu skal den logiske volume, /home, udvides til den fysiske volume, sda3. Med lvdisplay kan du se info på dine logiske volumes. Kommandoen vil vise alle LV’s og mere info end jeg viser nedenunder.

kerwood@debian:~$ sudo lvdisplay
  --- Logical volume ---
  LV Path               /dev/debian/home
...

Indsæt stien på den LV der skal udvides. I mit tilfælde er det /dev/debian/home. Udvid LV’en med lvextend.

kerwood@debian:~$ sudo lvextend /dev/debian/home /dev/sda3
  Extending logical volume home to 8.06 GiB
  Logical volume home successfully resized

Så er vi faktisk færdig med at udvide den logiske volume. Så mangler vi bare at resize filsystemet.
kerwood@debian:~$ sudo resize2fs /dev/debian/home
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/debian/home is mounted on /home; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/debian/home to 2113536 (4k) blocks.
The filesystem on /dev/debian/home is now 2113536 blocks long.

Det var det… Kør df -h igen for at se størrelsen på /home partitionen.

Som du kan se er den nu 8.0 GB.


3 feb 2014   | Alle

Leave a Reply