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)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:
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
df -h
Da det er min home partition jeg vil udvide, er det
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
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
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)
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 .
Tryk her efter System ID’et skal laves om. Vælg t for at ændre system ID’et for partitionen og 3 for Vælg herefter 8e, som er Hex koden for Linux LVM. Til sidst vælg w for at Write, for at skrive det hele til disken. Genstart af serveren er nu påkrævet for at fortsætte med guiden. Først bruger vi Find Volume gruppe navnet med Nu tilføjer vi den fysiske volume, Nu skal den logiske volume, Indsæt stien på den LV der skal udvides. I mit tilfælde er det Så er vi faktisk færdig med at udvide den logiske volume. Så mangler vi bare at resize filsystemet. Det var det… Kør Som du kan se er den nu 8.0 GB.
Last sector, +sectors or +size{K,M,G} (16775168-23068671, default 23068671): <ENTER>
Command (m for help): t
Partition number (1-5): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)
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
Udvid den Logisk Volume
kerwood@debian:~$ sudo pvcreate /dev/sda3
Writing physical volume data to disk "/dev/sda3"
Physical volume "/dev/sda3" successfully created
kerwood@debian:~$ sudo vgdisplay
--- Volume group ---
VG Name debian
...
kerwood@debian:~$ sudo vgextend debian /dev/sda3
Volume group "debian" successfully extendedkerwood@debian:~$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/debian/home
...kerwood@debian:~$ sudo lvextend /dev/debian/home /dev/sda3
Extending logical volume home to 8.06 GiB
Logical volume home successfully resized
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.