Mój pracodawca umożliwia korzystanie z otwartych rozwiązań. Dostarcza też niezbędne oprogramowanie, ba!, dla popularniejszych dystrybucji są nawet repozytoria pakietów i podręczniki. Postanowiłem to przetestować i zmniejszyłem partycję z Windowsem do ~80G (cały dysk ma ~320G), aby resztę przeznaczyć na Debiana. Ze względów bezpieczeństwa (służbowy laptop) musiałem użyć LUKS-a, oczywistym wobec tego stał się dla mnie wybór LVM-a. Podział partycji prezentował się tak:
/dev/sda1 -- Windows XP, NTFS, ~80G
/dev/sda2 -- /boot, ext2, ~512M
/dev/sda5 -- szyfrowany LUKS-em LVM
|--/root, ext4, ~10G
|--swap, ~4G
|--/home, ext4, ~226G
Działało i wszystko było dobrze, tyle tylko, że w końcu postanowiłem przenieść się całkiem na Linuksa i używać Windowsa (kiedy/jeśli będzie potrzebny) w wirtualnej maszynie (pracodawca udostępnia gotowy obraz KVM). Rzecz w tym, że mogę mieć tylko jedną licencję. Zresztą, nawet pomijając to, ostatnie zmiany w polityce bezpieczeństwa firmy dopuszczają tylko dwie możliwości1 — żadna z nich nie zakłada i nie umożliwia dual-boota.
Postanowiłem wobec tego usunąć partycję z Windowsem, a ~80G zwolnionego miejsca przeznaczyć na poszerzenie roota do ~20G i wpasowania reszty na /home.
Pamiętaj, że wszelkie kombinacje z partycjami grożą utratą wszystkich danych. Przed wprowadzaniem i zapisywaniem jakichkolwiek zmian na dysku — zrób kopię bezpieczeństwa. Albo przynajmniej nie płacz, kiedy coś ci się posypie ;]
Jeśli partycja windowsowa nie jest zamontowana (jeśli jest,to trzeba ją najpierw odmontować), można przystąpić do rzezi:
sudo fdisk -cu /dev/sda
(fdisk): p (wypisanie tablicy partycji)
Dysk /dev/sda: 320.1 GB, bajtów: 320072933376
głowic: 255, sektorów/ścieżkę: 63, cylindrów: 38913, w sumie sektorów: 625142448Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x64656469
Urządzenie Rozruch Początek Koniec Bloków ID System
/dev/sda1 * 63 165427919 82713928+ 7 HPFS/NTFS
/dev/sda2 165429248 166404095 487424 83 Linux
/dev/sda3 166406142 625141759 229367809 5 Rozszerzona
/dev/sda5 166406144 625141759 229367808 83 Linux
Jak widać, w moim przypadku do skasowania jest partycja nr 1. No to do dzieła:
(fdisk): d (usunięcie partycji)
(fdisk): 1 (numer partycji do usunięcia)
(fdisk): p (wypisanie nowej tablicy partycji)
Dysk /dev/sda: 320.1 GB, bajtów: 320072933376głowic: 255, sektorów/ścieżkę: 63, cylindrów: 38913, w sumie sektorów: 625142448
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x64656469
Urządzenie Rozruch Początek Koniec Bloków ID System
/dev/sda2 165429248 166404095 487424 83 Linux
/dev/sda3 166406142 625141759 229367809 5 Rozszerzona
/dev/sda5 166406144 625141759 229367808 83 Linux
Jeśli wszystkie zmiany są dokładnie takie, jakich oczekiwano2:
(fdisk): w (zapis tablicy partycji na dysk i zakończenie)
Teraz należy zrestartować system (np. shutdown -r now).
Po restarcie trzeba zagospodarować nowo zwolnione miejsce. Aby móc je przyłączyć później do istniejącej volume grupy, trzeba będzie nadać tej partycji typ Linux LVM:
sudo fdisk -cu /dev/sda
(fdisk): n (dodanie nowej partycji)
(fdisk): 1 (umiejscowienie partycji)
(fdisk): 2048 (domyślnie)
(fdisk): 165429247 (domyślnie)
(fdisk): p (wypisanie nowej tablicy partycji)
Dysk /dev/sda: 320.1 GB, bajtów: 320072933376
głowic: 255, sektorów/ścieżkę: 63, cylindrów: 38913, w sumie sektorów: 625142448
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x64656469
Urządzenie Rozruch Początek Koniec Bloków ID System
/dev/sda1 2048 165429247 82713600 83 Linux
/dev/sda2 165429248 166404095 487424 83 Linux
/dev/sda3 166406142 625141759 229367809 5 Rozszerzona
/dev/sda5 166406144 625141759 229367808 83 Linux
(inside fdisk): t (zmiana ID systemu partycji)
(inside fdisk): 1 (wybór partycji, która ma zostać zmieniona)
(inside fdisk): L (lista wszystkich ID)
(inside fdisk): 8e (Linux LVM)
(inside fdisk): p (wypisanie nowej tablicy partycji)
Dysk /dev/sda: 320.1 GB, bajtów: 320072933376głowic: 255, sektorów/ścieżkę: 63, cylindrów: 38913, w sumie sektorów: 625142448
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x64656469
Urządzenie Rozruch Początek Koniec Bloków ID System
/dev/sda1 2048 165429247 82713600 8e Linux LVM
/dev/sda2 165429248 166404095 487424 83 Linux
/dev/sda3 166406142 625141759 229367809 5 Rozszerzona
/dev/sda5 166406144 625141759 229367808 83 Linux
(fdisk): w (zapis tablicy partycji na dysk i zakończenie)
Oczywiście drugi restart komputera (ale to już ostatni, obiecuję ;-)).
Teraz zaczyna się najfajniejsza część. Mamy już przygotowane miejsce, teraz trzeba je zagospodarować. Najpierw trzeba powiększyć obszar fizyczny o nowo zwolnioną część:
sudo pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created
Teraz ten fizyczny obszar trzeba przyszyć do istniejącej volume grupy:
sudo vgextend foo /dev/sda1
Volume group "foo" successfully extended
„foo” należy oczywiście zamienić na nazwę swojej grupy LVM. Do wyświetlenia wszystkich logicznym woluminów (+ takie informacje jak rozmiar etc.) służy polecenie lvdisplay. Można to polecenie wywołać bez żadnych dodatkowych parametrów i wtedy wyświetlone zostaną wszystkie woluminy.
Nadszedł czas poszerzenia istniejących partycji o przydzielone miejsce. Najpierw /root:
sudo lvextend -L20G /dev/foo/root
Extending logical volume root to 20,00 GiB
Logical volume root successfully resized
Flaga -L20G
sprawi, że /dev/foo/root zostanie powiększone do 20 GiB. Gdybym chciał powiększyć tę partycję o 20 GiB, wtedy flaga wyglądałaby następująco: -L+20G
.
Teraz system plików musi zostać zaktualizowany do nowego, fizycznego rozmiaru woluminu:
sudo resize2fs /dev/foo/root
OK, teraz reszta wolnego miejsca ma wylądować na partycji /home:
sudo lvextend -l+100%FREE /dev/foo/home
Zmienna %FREE
determinuje ile procent z dostępnego wolnego miejsca ma zostać przydzielone do danej partycji. Zwracam też uwagę, że tym razem została użyta inna flaga — -l
.
Tu także system plików musi być zaktualizowany:
sudo resize2fs /dev/foo/home
Aby sprawdzić, czy wszystkie zmiany zostały wprowadzone prawidłowo, można użyć np. pvdisplay, vgdisplay, lvdisplay i df (np. z flagą -h
)
Więcej na ten temat:
- https://wiki.archlinux.org/index.php/LVM
- http://geekdom.wesmo.com/2009/07/07/extend-the-root-lvm-with-a-live-system
- http://www.thinkway.info/2010/04/lvm-extend-in-live-mode
- http://www.hermann-uwe.de/blog/resizing-a-dm-crypt-lvm-ext3-partition
- http://ubuntuforums.org/showthread.php?t=726724
- http://www.walkernews.net/2007/07/02/how-to-create-linux-lvm-in-3-minutes
Pamiętaj, że wszelkie kombinacje z partycjami grożą utratą wszystkich danych. Przed wprowadzaniem i zapisywaniem jakichkolwiek zmian na dysku — zrób kopię bezpieczeństwa. Albo przynajmniej nie płacz, kiedy coś ci się posypie ;]