Tutoriel Linux

Powiększenie partycji Ubuntu za pomocą fdisk bez utraty danych

Débutant9 min de lecture

Rozszerzyłeś dysk lub teraz masz nieprzydzieloną przestrzeń po partycji danych Ubuntu? Aby ta przestrzeń stała się użyteczna, konieczne są dwie oddzielne operacje: zmodyfikowanie wpisu partycji w tabeli, a następnie rozszerzenie systemu plików ext4, który ona zawiera. fdisk zajmuje się tylko pierwszym; następnie wkracza resize2fs.

SSD i obudowa USB do konserwacji w celu rozszerzenia partycji Ubuntu
Sprawdź dysk i sektor początkowy przed zmodyfikowaniem tabeli partycji.

Tytuł „bez utraty danych” nie stanowi gwarancji. Bezpieczeństwo tej operacji opiera się na rzeczywiście przetestowanej kopii zapasowej, pewnym zidentyfikowaniu właściwego dysku i dokładnym zachowaniu sektora początkowego partycji. Błąd w celu lub zmodyfikowany sektor początkowy może sprawić, że dane staną się niedostępne. Jeśli kontrola nie odpowiada temu, co opisano tutaj, zatrzymaj się przed jakimkolwiek zapisem.

Sprawdź, czy twoja partycja wchodzi w omawiany przypadek

Ta procedura dotyczy klasycznej partycji danych Linux, sformatowanej w ext4, nie będącej partycją główną, nie-LVM, niezaszyfrowanej i nie znajdującej się w RAID software’m mdraid. Nieprzydzielona przestrzeń musi znajdować się bezpośrednio po partycji, którą chcesz rozszerzyć. Partycja nie może być partycją logiczną znajdującą się w rozszerzonej partycji MBR. Wreszcie, musi być dostępna do operacji: nie próbuj obejść odmowy jądra, ponieważ jest używana.

Zacznij od przeczytania organizacji urządzeń i systemów plików:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

Znajdź dysk nadrzędny, interesujący cię wpis typu part, jego format i punkt montowania. Warstwa pośrednia, wolumen logiczny LVM, szyfrowanie lub RAID oznaczają, że nie działasz bezpośrednio na klasycznej partycji ext4: zatrzymaj się i postępuj zgodnie z procedurą tej warstwy. Aby odróżnić partycję danych od zamontowanej partycji głównej, sprawdź także montaż:

findmnt

W przykładach w tym artykule /dev/sdX oznacza cały dysk, który należy zastąpić rzeczywiście zidentyfikowaną nazwą, na przykład urządzeniem w twoim systemie. /dev/sdXN oznacza partycję tego dysku z jej rzeczywistym numerem. To są placeholders, a nie ścieżki do skopiowania w tej samej formie. Nie myl dysku nadrzędnego z partycją: fdisk dostanie pierwszy, podczas gdy resize2fs będzie skierowany do drugiego.

Przeanalizuj tabelę i ograniczenia zidentyfikowanego dysku:

sudo fdisk -l /dev/sdX

Zastąp /dev/sdX dyskiem potwierdzonym na poprzednim etapie. Zidentyfikuj typ tabeli (gpt lub dos, czyli MBR), numer docelowej partycji, jej sektor początkowy („Start”), koniec („End”) i typ. Wolna przestrzeń musi zaczynać się tuż po końcu partycji i przechodzić dalej, nie zakładając innej partycji pomiędzy. Jeśli przestrzeń znajduje się przed partycją, jest zajęta, dysk jest już całkowicie przydzielony, lub jeśli nie możesz pewnie ustalić tych ograniczeń, nie używaj tej metody. Jeśli identyfikacja dysku pozostaje niepewna, wróć najpierw do kontroli przedstawionych w tym przewodniku, aby przygotować partycję bez usuwania niewłaściwego dysku. Jeśli to sam dysk musi być rozszerzony, ta wstępna operacja odbywa się w środowisku, które go dostarcza; nie jest to szczegółowo opisane tutaj.

Również zatrzymaj się, jeśli celem jest zamontowana partycja główna, jeśli system plików nie jest ext4, lub jeśli masz partycję logiczną/rozszerzoną MBR, LVM, LUKS, mdraid, Btrfs lub XFS. Te przypadki należą do innej warstwy lub procedury. Nigdy nie przesuwaj początku partycji, aby odzyskać przestrzeń znajdującą się przed nią.

Zrób kopię zapasową danych i zanotuj parametry

Przed dotknięciem tabeli wykonaj pełną kopię zapasową danych na osobnym nośniku, a następnie sprawdź ją poprzez odczyt lub rzeczywiste przywrócenie. Plik kopii zapasowej tabeli nie zastępuje tej kopii zapasowej plików. Zaplanuj okno konserwacji i możliwość kontrolowanego ponownego uruchomienia, jeśli jądro nie może natychmiast odczytać tabeli.

Możesz zarejestrować zrzut tabeli w lokalizacji dozwolonej do zapisu przez twoje shell:

sudo sfdisk -d /dev/sdX > kopia-zapasowa-tabela-sdX.sfdisk

Zastąp /dev/sdX i nazwę kopia-zapasowa-tabela-sdX.sfdisk tymi potwierdzonymi dyskami. Upewnij się, że uzyskany plik jest obecny, czytelny i nie jest pusty, że opisuje właściwy dysk, a następnie zachowaj jego kopię poza manipulowanym dyskiem. Przekierowanie > jest wykonywane przez wywołujące shell: sudo nie daje automatycznie praw do zapisu w katalogu docelowym. Nie traktuj tego dumpa jako sposobu na improwizowane przywracanie.

Odnajdź poza swoją sesję dokładne parametry docelowej partycji: numer, sektor Start, sektor End, typ i tabela GPT lub MBR. Porównaj je z wynikami z poprzedniego polecenia i interaktywnego wyświetlania opisanego później. Sektor początkowy jest kluczowym punktem: musi pozostać identyczny, bez przesunięcia, po rekonstruowaniu wpisu. Sprawdź również, czy planowane rozszerzenie nie pokryje żadnej innej partycji.

Jeśli twój system używa identyfikatorów partycji lub systemu plików, zanotuj je przed operacją:

blkid

blkid wyświetla między innymi wartości UUID systemu plików i, w zależności od urządzenia, PARTUUID partycji. Następnie porównaj te wartości z odniesieniami używanymi przez montaż lub uruchamianie. Usunięcie, a następnie ponowne utworzenie wpisu może zmienić jego PARTUUID; nie zakładaj, że pozostanie stabilne. Jeśli nie wiesz, które odniesienia są w użyciu lub jak poradzić sobie z różnicą, zatrzymaj się przed zapisem. To samo dotyczy, jeśli kopiowanie danych nie zostało przetestowane, jeśli dump tabeli jest nieobecny lub niespójny, lub jeśli numer, typ lub początek nie są pewne.

Rekonstruowanie wpisu w fdisk bez przesuwania jego początku

Operacja w fdisk dotyczy tabeli partycji, a nie zawartości ext4. Dokumentacja fdisk opisuje manipulacje tabelami GPT i MBR oraz informacje o partycji, które należy kontrolować. Otwórz narzędzie na już zidentyfikowanym dysku nadrzędnym:

sudo fdisk /dev/sdX

Zastąp placeholder rzeczywistym dyskiem całym, a nie nazwą partycji. W interfejsie interaktywnym przejdź tylko po zrozumieniu każdego wyświetlanego przypadku:

  • Wpisz p, aby wyświetlić tabelę. Jeszcze raz zidentyfikuj partycję docelową, jej numer, typ i sektor początkowy. Muszą one odpowiadać twoim notatkom.
  • Usunięcie wpisu za pomocą d dotyczy tylko partycji docelowej. Jeśli narzędzie poprosi o numer, wybierz ten, który zweryfikowałeś; nie zgaduj i nie usuwaj żadnych innych wpisów.
  • Za pomocą n utwórz wpis zastępujący. Zachowaj ten sam numer i wprowadź dokładnie ten sam sektor początkowy, który zanotowałeś. Wybierz koniec znajdujący się dalej w wolnej, przyległej przestrzeni, nie przekraczając dysku ani nie pokrywając innej partycji. Weź pod uwagę propozycję wyrównania od fdisk; jeśli dotyczy to innego początku lub jeśli nie rozumiesz ostrzeżenia, nie kontynuuj.
  • Sprawdź, czy typ oryginalnej partycji jest zachowany. Wyświetl tabelę ponownie za pomocą p i porównaj ją z notatkami: ten sam numer, ten sam typ, ten sam Start, nowy koniec oczekiwany i wszystkie inne wpisy nienaruszone.

Nie zatwierdzaj zapisu za pomocą w, dopóki każda wartość nie zgadza się i nie rozumiesz wyświetlanych komunikatów. W przeciwnym razie wyjdź bez zapisu i wróć do diagnostyki. Jeśli fdisk sygnalizuje obecność sygnatury ext4 i proponuje jej usunięcie, odrzuć: nie usuwaj tej sygnatury. Ostrzeżenie, nieoczekiwany dialog lub niespójność w numeracji to powód do zatrzymania, a nie zaproszenie do próbowania odpowiedzi losowo.

Po zapisie tabela opisuje większą partycję, ale ext4 nadal zachowuje swoją początkową wielkość. Konieczna będzie druga operacja, aby system plików wykorzystał dodaną przestrzeń.

Poproś jądro o ponowne odczytanie tabeli

Poproś jądro o ponowne odczytanie tabeli dysku:

sudo partprobe /dev/sdX

Zawsze używaj potwierdzonego dysku nadrzędnego. Informacja zwrotna bez błędów z partprobe nie wystarcza, aby udowodnić, że nowy rozmiar jest rzeczywiście rozpoznawany. Przeczytaj tabelę ponownie i sprawdź wielkość zaprezentowaną przez jądro:

sudo fdisk -l /dev/sdX
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS

Sektor początkowy musi pozostać niezmieniony, nowy koniec musi pozostać w przewidzianych granicach, a lsblk musi pokazywać nową wielkość na partycji docelowej, bez anomalii w innych wpisach. Jeśli jądro nie załadowało na nowo tabeli, nie wykonuj resize2fs. Odłóż operację; jeśli twoje środowisko na to pozwala, zorganizuj kontrolowane ponowne uruchomienie, a następnie ponownie sprawdź tabelę i uznaną wielkość przed jakimkolwiek rozszerzeniem ext4. Jeśli ponowne odczytanie zawiedzie dla zamontowanej partycji głównej, zatrzymaj się: ten przypadek nie mieści się w tym poradniku.

Rozszerz ext4 i sprawdź wynik

Gdy jądro widzi rozszerzoną partycję, a jej sektor początkowy jest identyczny z zanotowaną wartością, możesz rozszerzyć system plików ext4:

sudo resize2fs /dev/sdXN

Zastąp /dev/sdXN dokładną nazwą partycji ext4, z jej rzeczywistym numerem — nie dyskiem nadrzędnym. resize2fs rozszerza ext2/3/4 wewnątrz istniejącego kontenera; nie modyfikuje tabeli partycji. Jego rozkaz wykonania następuje więc po pomyślnym rozszerzeniu i ponownym odczytaniu tej tabeli, jak wskazuje dokumentacja resize2fs. Nowy początek partycji w innym sektorze może narażać system plików na całkowitą utratę: nie używaj tego rozkazu, jeśli początek nie odpowiada dokładnie.

Poczekaj na zakończenie rozkazu i sprawdź, czy nie zgłasza żadnych błędów. Następnie sprawdź systemy plików i identyfikatory:

lsblk -f
blkid

Cel musi nadal pojawiać się jako ext4, z oczekiwanymi identyfikatorami lub ze wszelkimi różnicami w UUID/PARTUUID zrozumianymi i przetworzonymi. Jeśli jakiekolwiek odniesienia PARTUUID zmieniły się, nie przywracaj systemu do działania, zanim nie zweryfikujesz i nie poprawisz, w zależności od twojego środowiska, odpowiednich odniesień montażowych lub rozruchowych. Nie zakładaj, że odniesienie nadal obowiązuje po rekonstrukcji wpisu.

Aby sprawdzić dostępną przestrzeń na zamontowanym systemie plików, użyj:

df -hT

Po ponownym montażu zgodnie z procedurą właściwą dla twojego środowiska, linia dotycząca danej partycji powinna wskazywać typ ext4 i zwiększoną pojemność użyteczną. Jeśli partycja nie jest zamontowana, jej brak w df jest normalny i nie udowadnia niepowodzenia. Pamiętaj o rozróżnieniu: większa tabela nie oznacza, że ext4 również jest większy, dopóki resize2fs nie zakończy się powodzeniem.

Błędy i sytuacje, które wymagają zatrzymania

Nie idź dalej, jeśli nie możesz zidentyfikować dysku, jeśli pierwszy sektor jest nieznany lub inny, jeśli kopia zapasowa nie została zweryfikowana, jeśli przestrzeń nie jest przyległa po partycji lub jeśli inna partycja może być przykryta. Przerwij także w przypadku ostrzeżenia o sygnaturze ext4, zmiany typu, niezrozumienia dialogu z fdisk lub niepowodzenia w ponownym odczytaniu przez jądro.

Błąd resize2fs, wielkość, która nie odpowiada tej w tabeli, lub niespodziewany identyfikator UUID/PARTUUID również muszą spowodować zawieszenie ponownego uruchamiania i zbadanie sytuacji. Nie przechodź do formatowania, improwizowanej naprawy ani nowej modyfikacji tabeli. Jeśli jesteś poza prostym przypadkiem ext4 opisanym tutaj, użyj dokumentacji odpowiadającej rzeczywistej warstwie zamiast dostosowywać tę sekwencję.

Do zapamiętania

Dla tej partycji danych ext4 jedynie, wykonuj w tej kolejności: przetestowana kopia zapasowa, identyfikacja i zapis parametrów, rozszerzenie wpisu z tym samym sektorem początkowym, potwierdzone przez jądro ponowne odczytanie, a następnie rozszerzenie ext4 z resize2fs. Każda niepewność co do dysku, sektorów, identyfikatorów lub oczekiwanego wyniku jest wystarczającym powodem, aby nie zapisywać tabeli.