Niedawno miałem problem z nieodpowiednim doborem rozmiaru partycji /boot – ktoś stworzył szablon maszyny wirtualnej o zbyt małej przestrzeni na tę partycję. Problem w tym, że na liście partycji /boot był pierwszy i nie dało się go w żaden sposób przesunąć. Na dodatek nie chciałem robić bałaganu zmniejszając pozostałe partycje i umieszczać /boot na samym końcu…Więc jeśli kiedyś mieliście podobny problem i dodatkowo korzystacie z LVM-a to ten wpis może wam pomóc. Przede wszystkim potrzebna będzie dodatkowa przestrzeń dyskowa. Może to być dodatkowa partycja lub dysk. Ważne, żeby jego pojemność była równa lub większa od wykorzystywanej powierzchni istniejącej Volume Group. Dla uproszczenia opisu założę, że mamy dodatkowe urządzenie – /dev/sdb oraz korzystamy ze standardowego nazewnictwa wolumenów i partycjonowania w RedHacie: /dev/sda1 jako /boot oraz /dev/sda2 jako wolumen fizyczny dla pierwszej grupy VolGroup00 oraz swap na wolumenie logicznym.

Najpierw zróbmy kopię tego co jest w /boot:

cd /boot
tar cf /tmp/boot.tar .
umount /boot


Teraz należy przygotować nowy dysk pod LVM-a:


fdisk /dev/sdb
n
p
1
dwa razy enter (załóżmy, że przydzielimy cały dysk na wolumen)
t
8e
w

Powyższe literki powodują: n -nowa partycja, p – partycja podstawowa, 1 – numer partycji, t – typ partycji: 8e to numer dla LVM, w – zapisanie zmian.

Teraz należy stworzyć nowy wolumen i grupę:

pvcreate /dev/sdb1
vgextend VolGroup00 /dev/sdb1
pvmove /dev/sda2


Ostatnia komenda trochę potrwa (w zależności od ilości danych na LVM-ie). W ogólności wszystkie Physical Extent są przenoszone na nowy wolumen logiczny online. Możemy normalnie pracować i nie powinniśmy utracić danych w trakcie operacji. Po zakończeniu przenoszenia możemy usunąć stary wolumen:

vgreduce VolGroup00 /dev/sda2
pvremove /dev/sda2


Powyższe polecenia odłączają wolumen fizyczny od grupy oraz usuwają go – dysk /dev/sda nie jest już używany. Możemy zatem zacząć modyfikować układ partycji.

fdisk /dev/sda
d
1
d
n
p
1
enter
+500M
t
1
83
n
p
2
dwa razy enter
t
8e
w
partprobe


Powyższe komendy spowodują usunięcie obydwu partycji, stworzenie nowej podstawowej o wielkości 500MB oraz drugiej zajmującej cały dostępny obszar dysku przeznaczonej na LVM. Partprobe służy do odczytania zaktualizowanego układu partycji. Teraz pozostaje nam założyć system plików i odtworzyć /boot oraz LVM.

mkfs.ext2 /dev/sda1
pvcreate /dev/sda2
vgextend VolGroup00 /dev/sda2
pvmove /dev/sdb1

Znowu trochę potrwa przenoszenie danych między wolumenami fizycznymi. Jak przenoszenie się skończy możemy kontynuować:

vgreduce VolGroup00 /dev/sdb1
pvremove /dev/sdb1
mount /dev/sda1 /boot
tar xf /tmp/boot.tar -C /boot
grub-install /dev/sda

W ten oto sposób rozszerzyliśmy partycję /boot bez wyłączania maszyny i utraty danych :)