Automatycznie rozwiń ostatnią partycję, aby użyć całego nieprzydzielonego miejsca, używając parted w trybie wsadowym


20

Krótko mówiąc, muszę to wszystko wykonać automatycznie podczas rozruchu (system osadzony).

Nasi inżynierowie będą flashować obrazy na urządzeniach produkcyjnych. Te obrazy będą zawierać małą tablicę partycji. Podczas uruchamiania muszę automatycznie rozwinąć ostatnią partycję (# 3), aby wykorzystać całe dostępne miejsce na dysku.

Oto, co otrzymuję, gdy patrzę na wolne miejsce na moim dysku.

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
        25.3MB  26.2MB  922kB   Free Space
 2      26.2MB  475MB   449MB   ext4         primary
 3      475MB   1549MB  1074MB  ext4         primary
        1549MB  32.0GB  30.5GB  Free Space

Muszę rozszerzyć partycję 3 o N (30,5 GB) liczby bajtów

Jak wykonać ten krok automatycznie, bez monitu? Musi to działać przy dynamicznym rozmiarze przestrzeni dostępnej po trzeciej partycji.


Nie oczekuj, że otrzymasz gotowy skrypt, bez próby! Czy możesz nam więc pokazać, czego próbowałeś do tej pory? Kolejna rzecz, której partycja zmieniasz, nie może być zamontowana podczas operacji ....
Luciano Andress Martini

Próbowałem resizepartpolecenia i działa, ale wymaga dokładnego rozmiaru. Potrzebuję być dynamiczny.
Paul Knopf

resize2fsmoże być tym, czego szukam. linux.die.net/man/8/resize2fs
Paul Knopf

Odpowiedzi:


22

W obecnych wersjach parted, resizepartpowinien działać dla partycji ( partedrozumie 100%lub coś takiego -1s, ta ostatnia musi także --przestać parsować opcje na cmdline). Aby ustalić dokładną wartość można użyć unit s, print free. resize2fsprzychodzi później do systemu plików.


Stare wersje partedmiały resizepolecenie, które zmieniałoby zarówno partycję, jak i system plików za jednym razem, nawet działałovfat .

W modyfikacji e-czytnika Kobo użyłem tego do zmiany rozmiaru trzeciej partycji pamięci wewnętrznej na maksimum: (ślepo zakłada, że ​​nie ma czwartej partycji i tabeli msdos i rzeczy)

start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))

if [ "$newend" -gt "$end" ]
then
    parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi

Możesz także uzyskać wartości, /sys/block/.../jeśli jądro je obsługuje. Ale partedusunięto resizekomendę więc trzeba zrobić dwa kroki teraz, resizepartaby rosnąć partycję, a co narzędzie system plików zapewnia się rozwijać, że podobnie jak resize2fsdla ext*.


Właśnie tego szukałem. Dzięki za pomoc!
Paul Knopf

Pytanie poboczne, co jest z 8 bajtami na końcu?
Paul Knopf

Unikaj zmiany rozmiaru o pojedynczy sektor ... musisz zmienić to na -40 lub coś takiego (nagłówek kopii zapasowej GPT na końcu dysku).
frostschutz

Nie partedobsługuje automatycznego przedłużania z wiersza poleceń? Dlatego, że ma ją wspierać interaktywnie. Jeśli zostanie uruchomiony interaktywnie, zostanie wyświetlone pytanie, czy chcesz naprawić tabelę partycji GPT, aby pasowała do rozmiaru dysku (typu fix), a następnie możesz uruchomić resizepart 3 -1. Próbowałem dowiedzieć się, jak to zrobić z wiersza polecenia.
Harvey

Nie tak szybko: polecenie zmiany rozmiaru zostało usunięte w parted 3.0. Spróbuj sfdisk lub gparted.
GregD

16

Nie mogąc poprawnie rozdzielić skryptu (poprosił o potwierdzenie, ponieważ partycja została zamontowana i w przeciwieństwie do innych odpowiedzi, których nie rozumiałem -1slub 100%), właśnie znalazłem narzędzie growpart które właśnie to robi.

Użycie jest proste: growpart /dev/sda 3(i wtedyresize2fs /dev/sda3 inna odpowiednia komenda dla używanego typu systemu plików).

W Debianie i Ubuntu jest spakowany jako cloud-guest-utils .


1
To najwygodniejszy sposób, w jaki mogłem to teraz znaleźć. Działa cudownie.
SebiF,

To było dla mnie rozwiązanie - parted nie lubił ext4 jako systemu plików i wydawało się, że nie ma sposobu, aby uniknąć próby zmiany rozmiaru systemu plików ...
Antti Haapala

nie działa dla Ubuntu 18.04
DreamFlasher

@DreamFlasher Nie mogę powiedzieć, dlaczego to nie zadziałało. O ile widzę, możesz po prostu zainstalować pakiet cloud-guest-utils, a ponieważ jest to jedyna funkcja udostępniana przez growpart, powinien on działać, chyba że wystąpi błąd, jest nieprawidłowo używany lub coś, co wymyka się spod kontroli, nie działa. Zauważ, że ostatnim argumentem (3 w tym przykładzie) jest rozmiar partycji, licząc od 1, i że zaraz po partycji musi być dostępna wystarczająca ilość miejsca, aby móc zmienić jej rozmiar w ten sposób.
Ivo Smits

7

Właściwym sposobem na to jest skorzystanie z faktu, że rozstanie ma pojęcie procentowe. Więc

parted /dev/sda resize 3 100%

1
nieaktualne, nie działa z Ubuntu 18.04 i nowszymi
DreamFlasher

Nieznacznie zmieniła się komenda resize w wersji parted 3, teraz musisz użyć komendy resizepart, a następnie osobno zmienić rozmiar bazowego systemu plików lub PV, jeśli tego używasz. W przypadku ext4 polecenie to resize2fs, aw przypadku XFS to xfs_growfs. Oba są zwykle wykonywane, gdy system plików jest podłączony, a argumentem jest punkt podłączenia w obu przypadkach.
Jonathan Buzzard

0

W Ubuntu 18.04 mogę zmienić rozmiar, aby wypełnić nieprzydzielone miejsce w skrypcie, wykonując następujące czynności:

sudo parted -s /dev/sdb "resizepart 2 -1" quit
sudo mount -av
sudo umount /dev/sdb2
sudo mount /dev/sdb2 /mnt
sudo resize2fs /dev/sdb2

Montowanie przed zmianą rozmiaru może nie być konieczne. Zrobiłem to, aby ukryć zapytanie resize2fs dla danych wprowadzanych przez użytkownika.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.