Relire la table de partition sans redémarrer?

71

Parfois, lors du redimensionnement ou de la manipulation de partitions sur un disque, cfdisk dira:

Wrote partition table, but re-read table failed. Reboot to update table.

(Cela se produit également avec d'autres outils de partitionnement. Je pense donc qu'il s'agit d'un problème lié à Linux plutôt qu'à un problème de cfdisk.) Pourquoi, pourquoi et pourquoi cela ne se produit-il que de temps en temps et que puis-je faire pour l'éviter?

Remarque: Veuillez supposer qu'aucune des partitions que je suis en train de modifier n'est ouverte, montée ou utilisée.


Mise à jour:

cfdisk demande ioctl(fd, BLKRRPART, NULL)à Linux de relire la table de partition. Deux des autres outils recommandés jusqu'ici ( hdparm -z DEVICE, sfdisk -R DEVICE) font exactement la même chose. La partprobe DEVICEcommande, par contre, semble utiliser un nouvel ioctl appelé BLKPG, qui pourrait être meilleur; Je ne sais pas. (Il se rabat également sur BLKRRPART si BLKPG échoue.)

BLKPG semble être une opération "cette partition a changé; voici la nouvelle taille" et ressemble à l' partprobeappelée individuellement sur toutes les partitions du périphérique transmis. Elle devrait donc fonctionner si les partitions individuelles sont inutilisées. Cependant, je n'ai pas eu l'occasion de l'essayer.

Nounours
la source
1
man sfdiskdit:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
Tom Hale

Réponses:

66

IMHO la réponse la plus fiable / meilleure est

partprobe /dev/sdX
knweiss
la source
1
Je viens de développer un dev sous Ubuntu Server, ce dev est un raid matériel. Après avoir développé le raid sous-jacent à l’aide de raidcontroller, j’ai démonté le système de fichiers et essayé «partprobe / dev / sda» - cela n’a pas fonctionné. "fdisk -l" montrait toujours l'ancienne taille. J'ai ensuite couru "hdparm -z / dev / sda" et cela a fait l'affaire. Je pourrais ensuite monter et redimensionner mon système de fichiers sans redémarrer. Je sais que je n’ajoute rien d’autre que YMMV.
Mwuanno
je suis sur centos 6,5; noyau 2.6.32. toutes les commandes suivantes ne permettent pas au noyau de relire la partition: - partprobe / dev / sda (warnikg: le noyau n'a pas pu relire)
Max
@Max, j'ai aussi remarqué que parfois même partprobe imprimait une erreur qui ne fonctionnait pas. Parfois, un redémarrage est la seule option possible. Plusieurs fois, cela semble fonctionner pour moi cependant.
Matt
Cela n'a pas fonctionné pour moi car il y avait encore des répertoires montés avec --bind. La partition elle-même était déjà démontée mais les montages de liens pointant vers cette partition étaient toujours là. Étrange que umount ait fonctionné et pas testé, mais après avoir démonté les fixations de liaisons aussi, je pouvais aussi effectuer des sondages partiels sur le disque.
Ethan Leroy
Cela a fonctionné pour moi sur CentOS 6 après avoir flagellé avec kpartxet udevadm triggerpendant 10 minutes. Je vous remercie!
Mike Andrews
19

La relecture des informations de la table de partition ne fonctionne pas toujours, mais essayez

hdparm -z /dev/sda

ou

sfdisk -R /dev/sda

Si cela fonctionne, les valeurs dans / proc / partitions changeront.

ko-dos
la source
hdparm a travaillé pour moi.
Prof. Falken le
3
l'option sfdisk -R n'existe pas.
Matt
Il est à noter que la hdparmcommande ne fonctionnera que si les partitions ne sont pas montées.
... en effet, on dirait que ça a sfdisk -Rété enlevé quelque part entre util-linux 2.24.2 et 2.26.1
Charles Duffy
1
man sfdiskdit:Since version 2.26 sfdisk no longer provides the -R or --re-read option to force the kernel to reread the partition table. Use blockdev --rereadpt instead.
Tom Hale
10

Sur Centos7:

Selon https://access.redhat.com/solutions/199573

Tu devrais essayer :

partx -u <partition>

Cela a fonctionné pour moi.

Uus
la source
1
C'était le seul qui fonctionne pour moi. Merci beaucoup d'avoir partagé!! Haut de la journée à vous, monsieur!
NotGaeL
8

Remarque: Veuillez supposer qu'aucune des partitions que je suis en train de modifier n'est ouverte, montée ou utilisée.

Compte tenu de cette hypothèse, la table de partition peut être réanalysée avec succès et le problème ne se posera pas. Si vous obtenez cette erreur, c'est parce que la table de partition est en cours d'utilisation et ne peut donc pas être réanalysée sans créer d'incohérences.

femme
la source
Certaines partitions sont peut-être en cours d'utilisation, mais aucune d'entre elles n'est celle que je suis en train de modifier, même si elles se trouvent peut-être dans la même table de partitions.
Teddy
8
Le noyau n'est pas si intelligent. Si une partition de la table est en cours d'utilisation, le noyau n'est pas réanalysé. Se tromper dans l'autre sens pourrait être catastrophique, donc c'est sûr. Si vous voulez vous débrouiller avec des partitions à votre guise, utilisez LVM.
womble
6

Ce n'est pas basé sur la partition que vous éditez.

Supposons que vous n’ayez qu’un seul disque dur ( /dev/sda) et deux partitions ( /dev/sda1, /dev/sda2) et que vous n’ayez monté qu’une partition ( /dev/sda1). Si vous supprimez ou modifiez tout ce qui concerne une autre partition qui n'est même pas montée ( /dev/sda2), vous obtiendrez l'erreur suivante: la relecture de la table de partition a échoué et le noyau utilise l'ancienne table.

Mais si vous avez deux disques durs ( /dev/sda, /dev/sdb) et qu’aucune des partitions de ( /dev/sdb) n’est utilisée. Ensuite, vous pouvez ajouter / supprimer / redimensionner / éditer des partitions /dev/sdbet elles seront relues sans problème. Mais même si une partition de / dev / sdb a été montée pendant la modification. Ensuite, le noyau continuera d'utiliser l'ancienne table.

Saurabh Barjatiya
la source
5

Il y a quelques jours, moi-même (l'interlocuteur initial) rencontrais une situation où aucune des autres réponses (y compris la réponse partprobe /dev/sdXactuellement acceptée et la plus votée) ne fonctionnait. Qu'est - ce qui a bien fonctionné, cependant:

blockdev --rereadpt /dev/sdX

(Je ne sais pas pourquoi cela a fonctionné et les autres pas, mais je suis heureux que cela ait fonctionné, car cela m'a évité un redémarrage sur un serveur occupé.)

Nounours
la source
5

je suis sur centos 6,5 x64; noyau 2.6.32. et je teste l'astuce fdisk pour redimensionner.

/dev/sda1 /boot
/dev/sda2 /

Toutes les commandes suivantes ne permettent pas au noyau de relire la partition:

  • partprobe / dev / sda (avertissement: le noyau n'a pas pu relire ....)
  • hdparm -z / dev / sda (BLKRRPART a échoué: périphérique ou ressource occupé)
  • blockdev -rereadpt / dev / sda (échec de BLKRRPART: unité ou ressource occupée)
  • sfdisk -R / dev / sda (BLKRRPART a échoué: unité ou ressource occupée)

j'ai toujours besoin d'un redémarrage pour que cela fonctionne

Max
la source
rien de tout cela n'a fonctionné pour moi non plus (proxmox VM, centos 7, partition xfs, pas de lvm). La réponse de @uus a cependant fonctionné: serverfault.com/a/722386/102252
NotGaeL
Toutes les commandes ci-dessus n'ont pas fonctionné pour moi non plus.
Fadi Asbih
Je pense que le noyau 2.6.32 a un problème, je les utilisais auparavant sur d’autres machines, cela fonctionnait très bien, même lors de l’ajout de partitions avec des nombres plus élevés entre les anciennes partitions. Sdb1 sdb2 sdb3 - supprimer sdb2, puis sdb1 sdb4 sdb5 sdb3. De plus, partx, kpartx, blockdev ne fonctionnaient pas aussi bien.
sdkks
Je ne pense pas que ce soit inhabituel que si une commande échoue à relire les partitions, toutes échouent - voir aussi ma réponse pour savoir comment en éliminer certaines causes .
maxschlepzig
3

Avec tous les points de montage non montés, exécutez Yocto 2.4:

partprobe /dev/sda 

Échec de recharger la table de partition après la suppression des partitions sur le périphérique. Aussi essayé - et ont échoué étaient:

udevadm trigger --subsystem-match=block; udevadm settle
hdparm -z /dev/sda
blockdev --rereadpt /dev/sda

Tous ont signalé des erreurs similaires "Erreur BLKRRPART: périphérique ou ressource occupé ..." m'invitant à redémarrer. Est-ce que cet échec des méthodes de travail antérieures est probablement dû au fait que udev est maintenant sous le contrôle de systemd? En pensant à cela, j'ai essayé:

systemctl restart systemd-udevd.service

Et du coup mon disque est à nouveau disponible, sans redémarrage!

Camp Waub-O-Jeeg
la source
La réponse la plus acceptée est incomplète: dans le systemdmonde moderne , CECI est la bonne réponse. Veuillez noter que vous devez également redémarrer l’un de ceux-ci (ou les deux) systemd-udev-settleet systemd-udev-trigger. Redémarrer systemd-udevdcomme Camp l’a dit ne me suffisait pas. Mais redémarrer aussi les deux autres a fait l'affaire!
Costin Gu 5ă
1

Quand une commande comme blockdev --rereadpt /dev/sdXéchoue avec

blockdev: ioctl error on BLKRRPART: Device or resource busy

cela signifie généralement que certaines (anciennes) partitions sont encore utilisées par le noyau.

Causes possibles / solutions:

  1. une partition sdX - par exemple sdX1- est toujours montée - vérifiez avec mountet démontez-la
  2. /dev/sdX1fait partie d'un raid logiciel - vérifiez cat /proc/mdstatet arrêtez éventuellement les tableaux pertinents, p.ex.mdadm --stop /dev/md126
  3. /dev/sdX1fait partie d'un volume physique LVM - vérifier avec pvdisplay/ vgdisplayet éventuellement désactiver avecvgchange
  4. /dev/sdX1fait partie d' un certain mappage de périphérique - par exemple via cryptsetup- vérifier /dev/mapperet lsblket éventuellement supprimer l'application (par exemple cryptsetup luksClose)
  5. Condition de concurrence avec quelques tests udev - vérifier les processus en cours avec pset éventuellement en tuer un

Si un outil - dire blockdev --rereadptne les généralement similaires ( partx -uv, kpartx, partprobe, kpartprobe) ne parviennent pas d'une manière similaire jusqu'à ce que la cause soit éliminée.

maxschlepzig
la source
0

Vous pouvez aussi essayer:

echo 1 > /sys/block/sdX/device/rescan

(Mais ne fonctionnera pas, voir le commentaire ci-dessous)

Bogdano
la source
3
Cela ne relit pas la table de partition. Il ne fait que mettre à jour les informations de géométrie, le mode de cache, etc. SCSI IDENTIFY_DRIVE est en cours d’émission.
Dmitri Chubarov
0

kpartx -a <partition> peut être exécuté deux fois sur une partition nouvellement créée .... au lieu de redémarrer le système.

Kailas Kadam
la source
2
Deux fois? Est-ce que vous lancez aussi “ sync; sync; sync”? Sm Je sens la superstition…
Teddy
1
Je pense que cette superstition vient du fait que vous vérifiez si votre synchronisation est effectuée en effectuant une deuxième synchronisation. Sauf que le second n’a de valeur que pour l’opérateur, pour confirmer, il repasse immédiatement au prompt, indiquant ainsi la première synchronisation complétée comme prévu. quelques blogs et tutoriels plus tard, et ....
JM Becker
0

N'oubliez pas de vérifier que le service udev est en cours d'exécution. Ceci est particulièrement utile lorsque partprobe, hdparm, blockdev et diverses autres commandes ne semblent pas avoir d’incidence sur les fichiers de périphérique disponibles dans le répertoire / dev /.

Kerolasa
la source
0

Pour moi non plus partprobeou blockdevsolution élaborée. Bien que celui-ci fonctionne:

udevadm settle --exit-if-exists=/dev/sdb1
Sibi
la source
-3

Si vous lisez la page de manuel pour 'man oracleasm-scandisks', vous remarquerez le texte ci-dessous. oracleasm utilise / proc / partitions comme source de toutes les analyses qu'il effectue. Vous devez répertorier vos périphériques bruts dans / proc / partitions avant de pouvoir effectuer une analyse. Les paramètres Scanorder et Scanexclude que vous placez dans / etc / sysconfig / oracleasm se rapportent aux noms trouvés dans / proc / partitions (!!!!).

---------- homme oracleasm-scandisks ------ ...

COMMENT LA BALAYAGE SE DÉROULE-T-IL? La numérisation se déroule en quatre étapes de base.

   First, the list of disks to scan is created. If disks were specified on the command line, this is the list.
   If not, /proc/partitions is read, and each block device is added, subject to the -o and -x options.

   Second, the partition tables of each disk in the scan are reloaded unless the -s option was specified. Any
   disks that no longer exist are dropped.

   Third, the list of disks is recreated based on the new partition tables.

   Finally, each disk in the list is checked to see if it is marked for ASM use. Disks that are marked are
   instantiated.
utilisateur168717
la source
2
... Il n'a rien dit sur l'utilisationoracleasm-scandisks
voretaq7