Jak korzystać z nowej tabeli fdisk bez restartu (kpartx)?

11

Kiedy uruchamiam fdisk i zmieniam rozmiar partycji, fdisk mówi na końcu danych wyjściowych:

The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

Chciałbym to zrobić bez konieczności ponownego uruchamiania (a następnie napisania skryptu, który to robi) Jak użyć kpartx, aby zrobić to poprawnie? Próbowałem:

kpartx -f -v /dev/mmcblk0

Które wyjścia:

mmcblk0p1 : 0 102400 /dev/mmcblk0 2048
mmcblk0p2 : 0 7657472 /dev/mmcblk0 104448

i:

kpartx -a -v /dev/mmcblk0

które wyjścia:

device-mapper: reload ioctl on mmcblk0p1 failed: Invalid argument
create/reload failed on mmcblk0p1
add map mmcblk0p1 (0:0): 0 102400 linear /dev/mmcblk0 2048
device-mapper: reload ioctl on mmcblk0p2 failed: Invalid argument
create/reload failed on mmcblk0p2
add map mmcblk0p2 (0:0): 0 7657472 linear /dev/mmcblk0 104448

To jest dla karty SD w debianie z systemem raspi.

EDYCJA: Aby wyjaśnić, co próbuję zrobić; Usuwam nieużywany p3 z karty SD i zmieniam rozmiar p2, aby wypełnić kartę. Karta zawiera obecnie małą partycję rozruchową p1, a p2 to miejsce, w którym znajduje się system operacyjny.

Ośmiornica
źródło
Czy karta SD jest obecnie używana? (Np. Czy ma on zamontowany system plików?)
derobert
@derobert, tak to robi. ma 2 partycje: małą partycję rozruchową i większą partycję główną, na której znajduje się większość systemu operacyjnego. Właśnie próbuję rozszerzyć drugą partycję, aby wypełnić kartę.
Octopus
2
Jestem prawie pewien, że to odpowiedź - nie możesz. Jądro nie odczyta ponownie tabeli partycji, chyba że urządzenie nie jest używane ...
derobert
Czy partprobepomaga
Gilles 'SO - przestań być zły'

Odpowiedzi:

7

Chcesz partx -u, nie kpartx(który działa na urządzeniach mapujących urządzenia).

psusi
źródło
Jaki jest cel -uflagi?
IgorGanapolsky
1
@IgorGanapolsky, aby zaktualizować tabelę partycji jądra, aby pasowała do pierwszej na dysku. Szybki man partxodpowiedziałby na to.
psusi
@Octopus Zrobiło to dla mnie, w przypadku gdy partprobe nie. Partprobe następnie zwrócił bez tego błędu.
Duncan X Simpson,
6

Uważam, że @derobert (który skomentował pierwotne pytanie) jest prawdopodobnie poprawny. W przypadku fdiskowania partycji, która jest obecnie używana, wydaje się, że nie ma innej opcji niż ponowne uruchomienie.

Nawet gdy używam partprobe(co jest uzyskiwane apt-get install parted), otrzymuję następujące dane wyjściowe:

Error: Partition(s) 2, 3 on /dev/mmcblk0 have been written, but we have 
been unable to inform the kernel of the change, probably because it/they 
are in use.  As a result, the old partition(s) will remain in use.  You 
should reboot now before making further changes.
Ośmiornica
źródło
Zrobiłem to samo, dobrą wiadomością jest to, że udało mi się odmontować, uruchomić partprobe <urządzenie> i ponownie zamontować obie partycje bez ponownego uruchamiania. Niestety nadal wymagało to przestojów z powodu zamykania usług.
Rahly,
3
Nowsze wersje parted/ partprobenie powodują takiego błędu i mogą być używane na zamontowanej partycji bez ponownego uruchamiania.
psusi
@psusi, używam najnowszej wersji, partedale wciąż pojawia się ten sam błąd. Rozwiązaniem jest odmontowanie urządzenia przed uruchomieniem partedna urządzeniu, a następnie nie trzeba ponownie uruchamiać systemu, aby poinformować jądro o użyciu nowej partycji zamiast starej partycji
MyWrathAcademia
1

Dostawałem ten problem, ponieważ zapomniałem odmontować urządzenie. Po:

sudo umount /dev/sdb

fdisk działał poprawnie.

Ciro Santilli
źródło
1
Nadal pojawia się błąd: wywołanie ioctl () w celu ponownego odczytania tablicy partycji. Ponowne czytanie tabeli partycji nie powiodło się: urządzenie lub zasób zajęte
IgorGanapolsky