Come posso usare la nuova tabella fdisk senza riavviare (kpartx)?


11

Quando eseguo fdisk e cambio la dimensione di una partizione, fdisk dice alla fine del suo output:

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

Mi piacerebbe farlo senza riavviare (e quindi scrivere uno script che lo fa) Come posso usare kpartx per farlo correttamente? Ho provato:

kpartx -f -v /dev/mmcblk0

Quali uscite:

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

e:

kpartx -a -v /dev/mmcblk0

che produce:

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

Questo è per una scheda SD in un raspi che esegue debian.

EDIT: per chiarire cosa sto cercando di fare; Sto eliminando una p3 inutilizzata da una scheda SD e ridimensionando p2 per riempire la scheda. La scheda contiene attualmente una piccola partizione di avvio p1 e p2 è dove si trova il sistema operativo.


La scheda SD è attualmente in uso? (Ad esempio, ha un filesystem montato su di esso?)
derobert

@derobert, sì. ha 2 partizioni: una piccola partizione di avvio e una più grande partizione principale in cui si trova la maggior parte del sistema operativo. Sto solo cercando di espandere la seconda partizione per riempire la scheda.
Polpo

2
Sono abbastanza sicuro che sia la risposta: non puoi. Il kernel non rileggerà una tabella delle partizioni a meno che il dispositivo non sia in uso ...
derobert

Risposte:


7

Tu vuoi partx -u, non kpartx(che funziona su dispositivi Device Mapper).


Qual è lo scopo della -ubandiera?
IgorGanapolsky,

1
@IgorGanapolsky, per aggiornare la tabella delle partizioni del kernel in modo che corrisponda a quella sul disco. Un rapido man partxavrebbe risposto a questo.
psusi

@Octopus Lo ha fatto per me, mentre partprobe no. Partprobe quindi è tornato senza quell'errore.
Duncan X Simpson,

6

Credo che @derobert (che ha commentato la domanda originale) sia probabilmente corretto. Nel caso di fdisking di una partizione attualmente in uso sembra che non ci sia altra opzione che riavviare.

Anche quando uso partprobe(che si ottiene con apt-get install parted) ottengo il seguente output:

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.

Ho fatto la stessa cosa, la buona notizia è che sono stato in grado di smontare, eseguire partprobe <device> e rimontare entrambe le partizioni senza riavviare. Sfortunatamente ha richiesto tempi di inattività a causa della chiusura dei servizi.
Rahly,

3
Le versioni più recenti di parted/ partprobenon genereranno un errore di questo tipo e possono essere utilizzate su una partizione montata senza riavvio.
psusi,

@psusi, sto usando una versione recente di partedma ho ancora lo stesso errore. La soluzione è smontare il dispositivo prima di eseguirlo partedsul dispositivo, quindi non è necessario riavviare il sistema per informare il kernel di utilizzare la nuova partizione anziché la vecchia partizione
MyWrathAcademia

1

Ho riscontrato questo problema perché ho dimenticato di smontare il dispositivo. Dopo un:

sudo umount /dev/sdb

fdisk ha funzionato correttamente.


1
Ricevo ancora un errore: chiamando ioctl () per rileggere la tabella delle partizioni. Rileggere la tabella delle partizioni non riuscita .: Dispositivo o risorsa occupata
IgorGanapolsky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.