Frage Partitionstabelle neu einlesen ohne Neustart?


Manchmal, wenn Sie die Größe ändern oder anderweitig mit Partitionen auf einer Festplatte herumspielen, sagt cfdisk:

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

(Dies ist auch bei anderen Partitionierungstools der Fall, daher denke ich, dass dies eher ein Linux-Problem als ein Cfdisk-Problem ist.) Warum ist das so, und warum passiert das nur? manchmalund was kann ich tun, um es zu vermeiden?

Hinweis: Bitte gehen Sie davon aus, dass keine der Partitionen, die ich gerade bearbeite, geöffnet, gemountet oder anderweitig verwendet werden.


Aktualisieren:

cfdisk verwendet ioctl(fd, BLKRRPART, NULL) Linux anweisen, die Partitionstabelle erneut zu lesen. Zwei der anderen bisher empfohlenen Tools (hdparm -z  DEVICE, sfdisk -R  DEVICE) macht genau das Gleiche. Das partprobe  DEVICE Befehl dagegen scheint ein neues ioctl namens BLKPG zu verwenden, das besser sein könnte; Ich weiß es nicht. (Es fällt auch auf BLKRRPART zurück, wenn BLKPG fehlschlägt.)

BLKPG scheint eine "diese Partition hat sich geändert; hier ist die neue Größe" Operation, und es sah aus wie partprobe aufgerufen es einzeln auf allen Partitionen auf dem Gerät, so dass es funktionieren sollte, wenn die einzelnen Partitionen nicht verwendet werden. Ich hatte jedoch keine Gelegenheit, es zu versuchen.


64
2017-07-05 12:10


Ursprung


man sfdisk sagt: 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


Antworten:


IMHO ist die zuverlässigste / beste Antwort

partprobe /dev/sdX

63
2017-07-05 12:44



Ich habe gerade einen Entwickler unter Ubuntu Server erweitert, dieser Entwickler ist ein Hardware-Raid. Nachdem ich den zugrunde liegenden Raid mit dem Raidcontroller erweitert habe, habe ich das Dateisystem entfernt und "partprobe / dev / sda" versucht - das hat nicht funktioniert. "fdisk -l" zeigte immer noch die alte Größe. Ich lief dann "hdparm -z / dev / sda" und das hat den Trick gemacht. Ich könnte dann mounten und Größe ändern mein Dateisystem ohne Neustart. Ich weiß, dass ich nichts anderes als YMMV hinzufügen werde. - Mwuanno
Ich bin auf Centos 6.5; Kernel 2.6.32. Alle folgenden Befehle haben die Kernel-Partition nicht erneut gelesen: - partprobe / dev / sda (warnikg: Kernel konnte nicht gelesen werden) - Max
@Max, mir ist auch aufgefallen, dass manchmal sogar partprobe einen fehler ausgibt, dass es nicht funktioniert hat. Manchmal ist ein Neustart die einzige Möglichkeit, um sicher zu gehen. Viele Male scheint es aber für mich zu funktionieren. - Matt
Dies funktionierte nicht für mich, da einige Verzeichnisse noch mit --bind gemountet waren. Die Partition selbst wurde bereits deaktiviert, aber die auf diese Partition zeigenden Bind-Mounts waren noch vorhanden. Seltsam, dass umount funktioniert und partprobe nicht, aber nachdem ich auch die Bind-mounts umgebunden habe, konnte ich auch die Platte partprobe. - Ethan Leroy
Dies funktionierte für mich auf CentOS 6 nach dem Geißeln mit herum kpartx und udevadm trigger für 10 Minuten. Vielen Dank! - Mike Andrews


Erneutes Einlesen von Partitionstabelleninformationen funktioniert nicht immer, aber versuchen Sie es

hdparm -z /dev/sda

oder

sfdisk -R /dev/sda

Wenn es funktioniert, ändern sich die Werte in / proc / partitions.


17
2017-07-05 12:13



hdparm hat für mich funktioniert. - Prof. Falken
Die Option sfdisk -R ist nicht vorhanden. - Matt
Es ist darauf hinzuweisen, dass hdparm Der Befehl funktioniert nur, wenn Partitionen nicht gemountet sind. - hayavuk
... tatsächlich sieht es so aus sfdisk -R wurde irgendwo zwischen util-linux 2.24.2 und 2.26.1 entfernt - Charles Duffy
man sfdisk sagt: 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


Auf Centos7:

Gemäß https://access.redhat.com/solutions/199573

Du solltest es versuchen :

partx -u <partition>

Es hat für mich funktioniert.


9
2017-09-15 09:33



Das war der einzige, der für mich arbeitete. Vielen Dank für das Teilen !! Der Tag des Tages für Sie, mein Herr! - NotGaeL


Hinweis: Bitte gehen Sie davon aus, dass keine der Partitionen tatsächlich bearbeitet wird   sind geöffnet, montiert oder anderweitig in Verwendung.

Unter dieser Annahme ist die Partitionstabelle können erfolgreich erneut gescannt werden, und das Problem wird nicht auftreten. Wenn Sie diesen Fehler erhalten, liegt das an der Partitionstabelle ist wird derzeit verwendet und kann daher nicht erneut gescannt werden, ohne Inkonsistenzen zu erzeugen.


7
2017-07-05 12:32



Einige Partitionen werden möglicherweise verwendet, aber keiner davon wird von mir geändert, obwohl sie sich möglicherweise in derselben Partitionstabelle befinden. - Teddy
Der Kernel ist nicht so schlau. Wenn eine Partition in der Tabelle verwendet wird, wird der Kernel nicht erneut gescannt. Wenn man in die andere Richtung falsch liegt, kann das katastrophal sein, also ist es sicher. Wenn Sie mit Partitionen nach Belieben stöbern möchten, verwenden Sie LVM. - womble♦


Es basiert nicht auf der Partition, die Sie bearbeiten.

Angenommen, Sie haben nur eine Festplatte (/dev/sda) und zwei Partitionen (/dev/sda1, /dev/sda2) und Sie haben nur eine Partition montiert (/dev/sda1). Wenn Sie etwas über andere Partitionen löschen oder ändern, die nicht einmal gemountet sind (/dev/sda2) Sie erhalten den Fehler, dass das erneute Lesen der Partitionstabelle fehlgeschlagen ist und der Kernel die alte Tabelle verwendet.

Aber wenn du zwei Festplatten hast (/dev/sda, /dev/sdb) und keine der Partitionen von (/dev/sdb) sind in Verwendung. Dann können Sie Partitionen hinzufügen / löschen / skalieren / bearbeiten /dev/sdb und sie werden ohne Probleme neu gelesen werden. Aber auch wenn eine Partition von / dev / sdb während der Änderung gemountet wurde. Dann verwendet der Kernel die alte Tabelle weiter.


6
2017-07-05 16:39





Ich (der ursprüngliche Fragesteller) hatte vor ein paar Tagen eine Situation, als keine der anderen Antworten (einschließlich partprobe /dev/sdX, die derzeit angenommene und am meisten gewählte Antwort). Was hat getan Arbeit war jedoch das:

blockdev --rereadpt /dev/sdX

(Ich weiß nicht, warum das funktioniert hat und die anderen nicht, aber ich bin froh, dass es funktioniert hat, da es mir einen Neustart auf einem belebten Server erspart hat.)


5
2017-08-28 19:15





Ich bin auf Centos 6,5 x64; Kernel 2.6.32. und ich teste den fdisk-Trick, um die Größe zu ändern.

/dev/sda1 /boot
/dev/sda2 /

Alle folgenden Befehle haben es getan nicht make kernel retread partition:

  • partprobe / dev / sda   (Warnung: Kernel konnte nicht gelesen werden ....)
  • hdparm -z / dev / sda (BLKRRPART fehlgeschlagen: Gerät oder Ressource ausgelastet)
  • blockdev -rereadpt / dev / sda (BLKRRPART fehlgeschlagen: Gerät oder Ressource ausgelastet)
  • sfdisk -R / dev / sda (BLKRRPART fehlgeschlagen: Gerät oder Ressource ausgelastet)

Ich brauche noch einen Neustart, damit es funktioniert


5
2018-05-29 08:07



nichts davon hat auch für mich funktioniert (proxmox VM, centos 7, xfs partition, no lvm). @uus antwort hat aber funktioniert: serverfault.com/a/722386/102252 - NotGaeL
Alle obigen Befehle funktionierten auch nicht für mich. - Fadi Asbih
Ich denke, Kernel 2.6.32 hat ein Problem, ich habe diese zuvor auf anderen Rechnern verwendet, es hat gut geklappt, auch wenn man Partitionen mit höheren Nummern zwischen älteren Partitionen hinzufügt. d. h. sdb1 sdb2 sdb3 - delete sdb2, dann sdb1 sdb4 sdb5 sdb3. Darüber hinaus funktionierte partx, kpartx, blockdev nicht so gut. - sdkks