it-swarm.com.de

Partitionstabelle erneut lesen, ohne neu zu starten?

Wenn Sie die Größe ändern oder auf andere Weise mit Partitionen auf einer Festplatte herumspielen, sagt cfdisk manchmal:

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

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

Hinweis: Bitte nehmen Sie an, dass keine der Partitionen, die ich gerade bearbeite, geöffnet, gemountet oder anderweitig verwendet wird.


Aktualisieren:

cfdisk verwendet ioctl(fd, BLKRRPART, NULL), um Linux anzuweisen, die Partitionstabelle erneut zu lesen. Zwei der anderen bisher empfohlenen Tools (hdparm -zDEVICE, sfdisk -RDEVICE) tun dies genau das gleiche. Der Befehl partprobeDEVICE scheint dagegen ein neues ioctl namens BLKPG zu verwenden, was möglicherweise besser ist. Ich weiß es nicht. (Es greift auch auf BLKRRPART zurück, wenn BLKPG fehlschlägt.)

BLKPG scheint eine Operation "Diese Partition hat sich geändert; hier ist die neue Größe" zu sein, und es sah so aus, als hätte partprobe sie auf allen Partitionen auf dem übergebenen Gerät einzeln aufgerufen, sodass sie funktionieren sollte, wenn die einzelnen Partitionen vorhanden sind ungebraucht. Ich hatte jedoch keine Gelegenheit, es zu versuchen.

71
Teddy

IMHO ist die zuverlässigste/beste Antwort

partprobe /dev/sdX
68
knweiss

Das erneute Lesen 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.

19
ko-dos

Auf Centos7:

Laut https://access.redhat.com/solutions/19957

Du solltest es versuchen :

partx -u <partition>

Es hat bei mir funktioniert.

10
uus

Hinweis: Bitte nehmen Sie an, dass keine der Partitionen, die ich gerade bearbeite, geöffnet, gemountet oder anderweitig verwendet wird.

Unter dieser Annahme kann die Partitionstabelle can erfolgreich erneut gescannt werden, und das Problem tritt nicht auf. Wenn Sie diesen Fehler erhalten, liegt dies daran, dass die Partitionstabelle is derzeit verwendet wird und daher nicht erneut gescannt werden kann, ohne Inkonsistenzen zu verursachen.

8
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 (/dev/sda1) Bereitgestellt. Wenn Sie etwas an einer anderen Partition löschen oder ändern, die noch nicht einmal gemountet ist (/dev/sda2), Wird die Fehlermeldung angezeigt, dass das erneute Lesen der Partitionstabelle fehlgeschlagen ist und der Kernel die alte Tabelle verwendet.

Wenn Sie jedoch zwei Festplatten (/dev/sda, /dev/sdb) Haben und keine der Partitionen von (/dev/sdb) Verwendet wird. Dann können Sie Partitionen von /dev/sdb Hinzufügen/löschen/in der Größe ändern/bearbeiten und sie werden problemlos erneut gelesen. Aber auch wenn während der Änderung eine Partition von/dev/sdb gemountet wurde. Dann wird der Kernel weiterhin die alte Tabelle verwenden.

6

Ich (der ursprüngliche Fragesteller) hatte vor einigen Tagen eine Situation, in der keine der anderen Antworten (einschließlich partprobe /dev/sdX, derzeit hat die akzeptierte und am höchsten bewertete Antwort) funktioniert. Was hat funktioniert, war jedoch Folgendes:

blockdev --rereadpt /dev/sdX

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

5
Teddy

ich bin auf Centos 6,5 x 64; 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 nicht die Kernel-Partition erneut gelesen:

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

ich brauche noch einen Neustart, damit es funktioniert

5
Max

Wenn alle Mount-Punkte nicht montiert sind, wird Yocto 2.4 ausgeführt:

partprobe /dev/sda 

Die Partitionstabelle konnte nach dem Löschen von Partitionen auf dem Gerät immer noch nicht neu geladen werden. Ebenfalls versucht - und gescheitert waren:

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

Alle berichteten über ähnliche "BLKRRPART fehlgeschlagen: Gerät oder Ressource beschäftigt ..." -Fehler, die mich zum Neustart aufforderten. Liegt dieser Fehler früherer Arbeitsmethoden möglicherweise daran, dass udev jetzt unter systemd Kontrolle steht? In diesem Sinne habe ich versucht:

systemctl restart systemd-udevd.service

Und plötzlich ist meine Festplatte wieder verfügbar, ohne Neustart!

3

Sie können auch versuchen:

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

(Funktioniert aber nicht, siehe Kommentar unten)

1
bogdano

Wenn ein Befehl wie blockdev --rereadpt /dev/sdX schlägt fehl mit

blockdev: ioctl error on BLKRRPART: Device or resource busy

dies bedeutet normalerweise, dass eine (alte) Partition tatsächlich noch irgendwie vom Kernel verwendet wird.

Mögliche Ursachen/Lösungen:

  1. eine SDX-Partition - sagen wir sdX1 - ist noch gemountet - mit mount prüfen und umounten
  2. /dev/sdX1 ist Teil eines Software-Raids - check cat /proc/mdstat und möglicherweise die relevanten Arrays stoppen, z. mdadm --stop /dev/md126
  3. /dev/sdX1 ist Teil eines physischen LVM-Volumes - prüfen Sie mit pvdisplay/vgdisplay und deaktivieren Sie es möglicherweise mit vgchange
  4. /dev/sdX1 ist Teil einer Gerätezuordnung - z. via cryptsetup - check /dev/mapper und lsblk und entfernen möglicherweise die Zuordnung (z. B. cryptsetup luksClose)
  5. Race-Bedingung mit einigen udev-Tests - Überprüfen Sie die laufenden Prozesse mit ps und töten Sie möglicherweise einen

Wenn ein Werkzeug - sagen Sie blockdev --rereadpt scheitert normalerweise an ähnlichen wie (partx -uv, kpartx, partprobe, kpartprobe) schlagen auf ähnliche Weise fehl, bis die Grundursache beseitigt ist.

1
maxschlepzig

kpartx -a <partition> kann zweimal auf einer neu erstellten Partition ausgeführt werden ... anstatt das System neu zu starten.

0
Kailas Kadam

Bei mir hat weder die Lösung partprobe noch blockdev funktioniert. Obwohl dieser funktioniert:

udevadm settle --exit-if-exists=/dev/sdb1
0
Sibi

Denken Sie daran, zu überprüfen, ob der udev-Dienst ausgeführt wird. Dies ist besonders nützlich, wenn partprobe, hdparm, blockdev und verschiedene andere Befehle keinen Unterschied zu machen scheinen, welche Gerätedateien im Verzeichnis/dev/verfügbar sind.

0
kerolasa