Vraag Herlezen van de partitietabel zonder opnieuw op te starten?


Soms, cfdisk zegt bij het vergroten / verkleinen of anders mucken met partities op een schijf:

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

(Dit gebeurt ook met andere partitioneringstools, dus ik denk dat dit een Linux-probleem is in plaats van een cfdisk-probleem.) Waarom is dit en waarom gebeurt het alleen somsen wat kan ik doen om dit te voorkomen?

Opmerking: veronderstel dat geen van de partities die ik aan het bewerken ben, geopend, gemount of anderszins in gebruik is.


Bijwerken:

cfdisk gebruikt ioctl(fd, BLKRRPART, NULL) om Linux te vertellen de partitietabel opnieuw te lezen. Twee van de andere tools die tot nu toe zijn aanbevolen (hdparm -z  DEVICE, sfdisk -R  DEVICE) doet precies hetzelfde. De partprobe  DEVICE commando lijkt aan de andere kant een nieuwe ioctl genaamd BLKPG te gebruiken, wat misschien beter is; Ik weet het niet. (Het valt ook terug op BLKRRPART als BLKPG mislukt.)

BLKPG lijkt een "deze partitie is veranderd; hier is de nieuwe grootte" -bewerking en het leek erop partprobe noemde het afzonderlijk op alle partities op het apparaat die werden gepasseerd, dus het zou moeten werken als de afzonderlijke partities niet worden gebruikt. Ik heb echter niet de gelegenheid gehad om het te proberen.


64
2017-07-05 12:10


oorsprong


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


antwoorden:


IMHO het meest betrouwbare / beste antwoord is

partprobe /dev/sdX

63
2017-07-05 12:44



Ik heb net een dev onder Ubuntu Server uitgebreid, deze dev is een hardware-inval. Na het uitbreiden van de onderliggende raid met behulp van de raidcontroller, demonteerde ik het bestandssysteem en probeerde ik "partprobe / dev / sda" - dit werkte niet. "fdisk -l" toonde nog steeds de oude grootte. Ik heb toen "hdparm -z / dev / sda" uitgevoerd en dit heeft de truc gedaan. Ik zou vervolgens mijn bestandssysteem kunnen mounten en het formaat ervan aanpassen zonder opnieuw op te starten. Ik weet dat ik niets anders toevoeg dan YMMV. - Mwuanno
ik ben op centos 6.5; kernel 2.6.32. alle volgende opdrachten maakten de kernel niet opnieuw partitie: - partprobe / dev / sda (warnikg: kernel kan niet worden herlezen) - Max
@Max, ik heb ook gemerkt dat soms zelfs een partprobe een fout afdrukt die niet werkte. Soms is een herstart de enige optie om zeker te zijn. Vaak lijkt het echter voor mij te werken. - Matt
Dit werkte niet voor mij omdat er nog mappen waren met --bind. De partitie zelf was al unmounted maar de bind-mounts die naar die partitie wijzen, waren er nog steeds. Vreemd dat umount werkte en partprobe niet, maar na het monteren van de bind-mounts, kon ik ook de disk delen. - Ethan Leroy
Dit werkte voor mij op CentOS 6 na het flagelleren met kpartx en udevadm trigger gedurende 10 minuten. Dank je! - Mike Andrews


Het herlezen van partitietabelinformatie werkt niet altijd, maar probeer het

hdparm -z /dev/sda

of

sfdisk -R /dev/sda

Als het werkt, zullen de waarden in / proc / partities veranderen.


17
2017-07-05 12:13



hdparm werkte voor mij. - Prof. Falken
de optie sfdisk -R bestaat niet. - Matt
het zou genoteerd moeten worden dat hdparm opdracht werkt alleen als partities niet zijn gekoppeld. - hayavuk
... inderdaad, het lijkt erop sfdisk -R werd ergens tussen util-linux 2.24.2 en 2.26.1 verwijderd - Charles Duffy
man sfdisk zegt: 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


Op Centos7:

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

Je zou moeten proberen :

partx -u <partition>

Het werkte voor mij.


9
2017-09-15 09:33



Dat was de enige die voor mij werkte. Heel erg bedankt voor het delen !! Top van de dag aan u, mijnheer! - NotGaeL


Opmerking: Ga er alsjeblieft van uit dat geen van de partities die ik aan het bewerken ben echt ben   worden geopend, gemonteerd of anderszins gebruikt.

Gezien die aanname, de partitietabel kan worden opnieuw gescand en het probleem zal niet optreden. Als u die fout krijgt, komt dit omdat de partitietabel is momenteel in gebruik en kan daarom niet opnieuw worden gescand zonder inconsistenties te creëren.


7
2017-07-05 12:32



Sommige partities zijn mogelijk in gebruik, maar geen van de partities die ik aan het wijzigen ben, hoewel ze zich mogelijk in dezelfde partitietabel bevinden. - Teddy
De kernel is niet zo slim. Als een partitie in de tabel in gebruik is, wordt de kernel niet opnieuw gescand. Om dat verkeerd in de andere richting te krijgen kan catastrofaal zijn, dus het is veilig. Als je met partities wilt rondspoken wanneer je wilt, gebruik dan LVM. - womble♦


Het is niet gebaseerd op de partitie die u aan het bewerken bent.

Stel dat je maar één harde schijf hebt (/dev/sda) en twee partities (/dev/sda1, /dev/sda2) en u hebt slechts één partitie aangekoppeld (/dev/sda1). Als u iets verwijdert of wijzigt over een andere partitie die niet eens is gemount (/dev/sda2) krijgt u de foutmelding dat het opnieuw lezen van de partitietabel is mislukt en de kernel de oude tabel zal gebruiken.

Maar als je twee harde schijven hebt (/dev/sda, /dev/sdb) en geen van de partities van (/dev/sdb) zijn in gebruik. Vervolgens kunt u partities toevoegen / verwijderen / vergroten / verkleinen / bewerken /dev/sdb en ze zullen zonder enig probleem opnieuw worden gelezen. Maar zelfs als er een partitie van / dev / sdb was gemount tijdens de wijziging. Daarna zal de kernel de oude tabel blijven gebruiken.


6
2017-07-05 16:39





Ik (de oorspronkelijke vragensteller) had een paar dagen geleden een situatie toen geen van de andere antwoorden (inclusief partprobe /dev/sdX, momenteel het geaccepteerde en het best gestemde antwoord) werkte. Wat deed werk was echter dit:

blockdev --rereadpt /dev/sdX

(Ik weet niet waarom dit werkte en de anderen niet, maar ik ben blij dat het werkte, omdat het me een reboot op een drukke server heeft opgeslagen.)


5
2017-08-28 19:15





ik ben op centos 6.5 x64; kernel 2.6.32. en ik ben de fdisk-truc aan het testen om het formaat te wijzigen.

/dev/sda1 /boot
/dev/sda2 /

Alle volgende opdrachten deden niet make kernel herlees partitie:

  • partprobe / dev / sda   (waarschuwing: kernel kan niet worden herlezen ....)
  • hdparm -z / dev / sda (BLKRRPART mislukt: apparaat of bron bezig)
  • blockdev -rereadpt / dev / sda (BLKRRPART mislukt: apparaat of bron bezig)
  • sfdisk -R / dev / sda (BLKRRPART mislukt: apparaat of bron bezig)

ik moet nog steeds opnieuw opstarten om het te laten werken


5
2018-05-29 08:07



niets van dat werkte ook voor mij (proxmox VM, centos 7, xfs-partitie, geen lvm). @uus antwoord werkte echter wel: serverfault.com/a/722386/102252 - NotGaeL
Alle bovenstaande commando's werkten ook niet voor mij. - Fadi Asbih
Ik denk dat kernel 2.6.32 een probleem heeft, ik heb deze eerder op andere machines gebruikt, het werkte prima, zelfs wanneer partities met hogere aantallen tussen oudere partities werden toegevoegd. d.w.z. sdb1 sdb2 sdb3 - verwijder sdb2 en dan sdb1 sdb4 sdb5 sdb3. In aanvulling op boven werkte partx, kpartx, blockdev niet zo goed. - sdkks


Je kunt ook proberen:

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

(Maar zal niet werken, zie de opmerking hieronder)


0
2017-12-29 19:11



Dit is de partitietabel niet opnieuw. Het werkt alleen de geometrie-informatie, cachemodus, enz. Bij. SCSI IDENTIFY_DRIVE wordt uitgegeven. - Dmitri Chubarov


kpartx -a <partition> kan twee keer worden uitgevoerd op een nieuw gemaakte partitie .... in plaats van het systeem opnieuw op te starten.


0
2018-03-03 19:08



Twee tijden? Ren jij ook "sync; sync; sync“? Ik ruik bijgeloof ... - Teddy
Ik denk dat dit bijgeloof voortkwam uit het feit dat je controleert of je synchroniseert, door een tweede synchronisatie uit te voeren. Behalve dat de tweede alleen waardevol is voor de operator, om te bevestigen dat deze onmiddellijk terugkeert naar prompt, waardoor wordt aangegeven dat de eerste synchronisatie is voltooid zoals verwacht. een paar blogs en tutorials later, en .... - J. M. Becker


Vergeet niet om te controleren of de udev-service actief is. Dit is vooral handig wanneer partprobe, hdparm, blockdev en verschillende andere commando's geen verschil lijken te maken welke apparaatbestanden beschikbaar zijn in / dev / directory.


0
2017-12-19 21:12





Als je de manpage voor 'man oracleasm-scandisks' leest, noteer je de onderstaande tekst. oracleasm gebruikt / proc / partities als de bron van alle scans die het uitvoert. U moet uw onbewerkte apparaten in / proc / partities laten weergeven voordat u een scandisk kunt doen. De parameters Scanorder en Scanexclude die u in / etc / sysconfig / oracleasm plaatst, hebben betrekking op de namen in / proc / partities (!!!!).

---------- man oracleasm-scandisks ------ ...

HOE SCANNEN GEBEURT        De scan verloopt in vier basisfasen.

   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.

-3
2018-04-26 16:58



... hij heeft niets gezegd over gebruiken oracleasm-scandisks - voretaq7