Manchmal sagt cfdisk, wenn Sie die Größe ändern oder auf andere Weise mit Partitionen auf einer Festplatte herumspielen:
Wrote partition table, but re-read table failed. Reboot to update table.
(Dies geschieht auch mit anderen Partitionierungs-Tools. Ich denke, dies ist eher ein Linux-Problem als ein CFDisk-Problem.) 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 weist ioctl(fd, BLKRRPART, NULL)
Linux an, die Partitionstabelle erneut zu lesen. Zwei der bisher empfohlenen Tools ( hdparm -z
DEVICE
, sfdisk -R
DEVICE
) machen genau dasselbe. Der partprobe
DEVICE
Befehl scheint dagegen ein neues ioctl mit dem Namen BLKPG zu verwenden, das möglicherweise besser ist. Ich weiß es nicht. (Es greift auch auf BLKRRPART zurück, wenn BLKPG fehlschlägt.)
Bei BLKPG handelt es sich anscheinend um eine Operation "Diese Partition hat sich geändert. Hier ist die neue Größe", die anscheinend für partprobe
alle Partitionen auf dem übergebenen Gerät einzeln aufgerufen wurde. Sie sollte also funktionieren, wenn die einzelnen Partitionen nicht verwendet werden. Ich hatte jedoch nicht die Gelegenheit, es zu versuchen.
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.
Antworten:
IMHO ist die zuverlässigste / beste Antwort
quelle
kpartx
undudevadm trigger
für 10 Minuten herumgeimpft hatte. Danke!Das erneute Lesen von Partitionstabelleninformationen funktioniert nicht immer, aber versuchen Sie es
oder
Wenn es funktioniert, ändern sich die Werte in / proc / partitions.
quelle
hdparm
Befehl nur funktioniert, wenn Partitionen nicht gemountet sind.sfdisk -R
es irgendwo zwischen util-linux 2.24.2 und 2.26.1 entfernt wurdeman 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.
Auf Centos7:
Laut https://access.redhat.com/solutions/199573
Du solltest es versuchen :
Es hat bei mir funktioniert.
quelle
Da die Annahme, die Partitionstabelle kann erfolgreich neu gescannt werden, und das Problem wird nicht auftreten. Wenn Sie diese Fehler sind immer, dann ist es , weil die Partitionstabelle ist derzeit im Einsatz und kann daher nicht ohne die Schaffung Inkonsistenzen erneut gescannt werden.
quelle
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
) gemountet . Wenn Sie etwas an einer anderen Partition löschen oder ändern, die noch nicht einmal gemountet ist (/dev/sda2
), wird der Fehler angezeigt, dass das erneute Lesen der Partitionstabelle fehlgeschlagen ist und der Kernel die alte Tabelle verwendet.Wenn Sie jedoch über zwei Festplatten (
/dev/sda
,/dev/sdb
) verfügen und keine der Partitionen von (/dev/sdb
) verwendet wird. Dann können Sie Partitionen hinzufügen / löschen / in der Größe ändern / bearbeiten/dev/sdb
und sie werden ohne Probleme erneut gelesen. Aber selbst wenn eine Partition von / dev / sdb während der Änderung gemountet wurde. Dann wird der Kernel weiterhin die alte Tabelle verwenden.quelle
Ich (der ursprüngliche Fragesteller) hatte vor einigen Tagen eine Situation, in der keine der anderen Antworten (einschließlich der
partprobe /dev/sdX
derzeit akzeptierten und am höchsten bewerteten Antwort) funktioniert hat. Was jedoch funktionierte, war Folgendes:(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 ausgelasteten Server erspart hat.)
quelle
Ich bin auf Centos 6,5 x 64; Kernel 2.6.32. und ich teste den Fdisk-Trick, um die Größe zu ändern.
Bei allen folgenden Befehlen wurde die Kernel-Partition nicht erneut gelesen:
Ich brauche noch einen Neustart, damit es funktioniert
quelle
Wenn alle Einhängepunkte nicht eingehängt sind, führen Sie Yocto 2.4 aus:
Die Partitionstabelle konnte nach dem Löschen der Partitionen auf dem Gerät immer noch nicht neu geladen werden. Auch versucht - und gescheitert waren:
Alle meldeten ähnliche "BLKRRPART ist fehlgeschlagen: Gerät oder Ressource belegt ..." -Fehler, die mich zum Neustart aufforderten. Ist dieses Versagen früherer Arbeitsmethoden möglicherweise darauf zurückzuführen, dass udev nun systemgesteuert ist? In diesem Sinne habe ich versucht:
Und plötzlich ist meine Festplatte ohne Neustart wieder verfügbar !
quelle
systemd
Welt ist DIES die richtige Antwort. Bitte beachten Sie, dass Sie auch einen dieser (oder beide)systemd-udev-settle
und neu starten müssensystemd-udev-trigger
. Ein Neustart,systemd-udevd
wie Camp sagte, war mir nicht genug. Aber der Neustart auch der anderen beiden hat es geschafft!Wenn ein Befehl wie mit
blockdev --rereadpt /dev/sdX
fehlschlägtDies bedeutet normalerweise, dass eine (alte) Partition tatsächlich noch irgendwie vom Kernel verwendet wird.
Mögliche Ursachen / Korrekturen:
sdX1
- montiert ist immer noch - überprüfen Sie mitmount
und umount es/dev/sdX1
ist Teil eines Software - Raid - Checkscat /proc/mdstat
und stoppt möglicherweise die entsprechenden Arrays, zmdadm --stop /dev/md126
/dev/sdX1
ist Teil eines physischen LVM-Volumes - mitpvdisplay
/ prüfenvgdisplay
und ggf. mit deaktivierenvgchange
/dev/sdX1
Teil einer Gerätezuordnung ist - beispielsweise übercryptsetup
- prüfen/dev/mapper
undlsblk
und entfernen eventuell die Zuordnung (zcryptsetup luksClose
)ps
und beende möglicherweise einenWenn ein Werkzeug - sagen
blockdev --rereadpt
versagt in der Regel ähnliche wie (partx -uv
,kpartx
,partprobe
,kpartprobe
) nicht in ähnlicher Art und Weise , bis die Ursache beseitigt wird.quelle
Sie können auch versuchen:
(Funktioniert aber nicht, siehe Kommentar unten)
quelle
kpartx -a <partition>
kann zweimal auf einer neu erstellten Partition ausgeführt werden .... anstatt das System neu zu starten.quelle
sync; sync; sync
"? ☺ Ich rieche Aberglauben…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 zwischen den im Verzeichnis / dev / verfügbaren Gerätedateien zu machen scheinen.
quelle
Bei mir hat weder
partprobe
nochblockdev
Lösung geklappt. Obwohl dies funktioniert:quelle
Wenn Sie die Manpage für 'man oracleasm-scandisks' lesen, werden Sie den folgenden Text beachten. oracleasm verwendet / proc / partitions als Quelle für alle durchgeführten Überprüfungen. Sie müssen Ihre Raw-Geräte in / proc / partitions eintragen, bevor Sie einen Scandisk ausführen können. Die Parameter Scanorder und Scanexclude, die Sie in / etc / sysconfig / oracleasm einfügen, beziehen sich auf die Namen in / proc / partitions (!!!!).
---------- man oracleasm-scandisks ------ ...
WIE DAS SCANNEN ABLÄUFT Der Scanvorgang erfolgt in vier grundlegenden Schritten.
quelle
oracleasm-scandisks