Comment utiliser la nouvelle table fdisk sans redémarrage (kpartx)?

11

Lorsque j'exécute fdisk et modifie la taille d'une partition, fdisk dit à la fin de sa sortie:

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

J'aimerais le faire sans avoir à redémarrer (puis à écrire un script qui le fasse) Comment utiliser kpartx pour le faire correctement? J'ai essayé:

kpartx -f -v /dev/mmcblk0

Quelles sorties:

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

et:

kpartx -a -v /dev/mmcblk0

qui génère:

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

C'est pour une carte SD dans un debian fonctionnant avec raspi.

EDIT: Pour clarifier ce que j'essaie de faire; Je supprime un p3 inutilisé d'une carte SD et redimensionne p2 pour remplir la carte. La carte contient actuellement une petite partition de démarrage p1 et p2 est l'endroit où se trouve le système d'exploitation.

Poulpe
la source
La carte SD est-elle actuellement utilisée? (Par exemple, a-t-il un système de fichiers monté dessus?)
derobert
@derobert, oui. il a 2 partitions: une petite partition de démarrage et une partition principale plus grande où se trouve la majorité du système d'exploitation. J'essaie juste d'étendre la 2ème partition pour remplir la carte.
Octopus
2
Je suis presque sûr que c'est la réponse - vous ne pouvez pas. Le noyau ne relira pas une table de partition à moins que le périphérique ne soit pas utilisé ...
derobert
Ça partprobeaide?
Gilles 'SO- arrête d'être méchant'

Réponses:

7

Vous ne voulez partx -upas kpartx(qui fonctionne sur les appareils de mappage de périphériques).

psusi
la source
Quel est le but du -udrapeau?
IgorGanapolsky
1
@IgorGanapolsky, pour mettre à jour la table de partition du noyau pour correspondre à celle du disque. Un rapide man partxaurait répondu à cela.
psusi
@Octopus Cela l'a fait pour moi, alors que partprobe ne l'a pas fait. Partprobe est ensuite retourné sans cette erreur.
Duncan X Simpson
6

Je pense que @derobert (qui a commenté la question d'origine) est probablement correct. Dans le cas où fdisking une partition qui est actuellement utilisée, il semble qu'il n'y ait pas d'autre option que de redémarrer.

Même lorsque j'utilise partprobe(qui est obtenu avec apt-get install parted) j'obtiens la sortie suivante:

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.
Poulpe
la source
J'ai fait la même chose, bonne nouvelle, j'ai pu démonter, exécuter partprobe <device> et remonter les deux partitions sans redémarrer. Malheureusement, cela a encore nécessité des temps d'arrêt en raison de la fermeture des services.
Rahly
3
Les versions plus récentes de parted/ partprobene donneront pas une telle erreur et peuvent être utilisées sur une partition montée sans redémarrage.
psusi
@psusi, j'utilise une version récente de partedmais j'obtiens toujours la même erreur. La solution consiste à démonter le périphérique avant de l'exécuter parted, vous n'avez donc pas à redémarrer votre système pour informer le noyau d'utiliser la nouvelle partition au lieu de l'ancienne partition
MyWrathAcademia
1

J'obtenais ce problème parce que j'avais oublié de démonter l'appareil. Après un:

sudo umount /dev/sdb

fdisk a fonctionné correctement.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
la source
1
Je reçois toujours une erreur: appel à ioctl () pour relire la table de partition. La relecture de la table de partition a échoué.: Périphérique ou ressource occupé
IgorGanapolsky