Das erneute Lesen der Partitionstabelle schlug mit Fehler 16 fehl: Gerät oder Ressource belegt

Das erneute Lesen der Partitionstabelle schlug mit Fehler 16 fehl: Gerät oder Ressource belegt

Beim Neupartitionieren eines USB-Flash-Laufwerks unter CentOS 6.x trat folgender Fehler auf.

Disk /dev/sdb: 31.5 GB, 31466323968 bytes
255 heads, 63 sectors/track, 3825 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0e693bd9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1        3826    30727808    c  W95 FAT32 (LBA)
[root@csc ~]# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): d
Selected partition 1

Command (m for help): 1
1: unknown command
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): d   
No partition is defined yet!

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3825, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-3825, default 3825): 
Using default value 3825

Command (m for help): 
Command (m for help):  
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 86
Changed system type of partition 1 to 86 (NTFS volume set)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Antwort1

Sieht aus, als wäre dieses Gerät gemountet. Führen Sie es aus umount /dev/sdb1und versuchen Sie es erneut.

Antwort2

Vorausgesetzt, Sie erhalten dies als Ergebnis der Automatisierung (z. B. durch Verwendung von expect) der fdiskOperation (und dassdie Partition ist nicht wirklich gemountet), versuchen Sie, nach dem Ändern der Partition und vor dem Schreiben in die Partition einige Sekunden Verzögerung einzufügen.

Ich habe den gleichen Fehler erhalten, als ich versucht habe, einen Aufruf fdiskunter Centos 7.6 wie folgt zu automatisieren:

# (echo "d"; echo "";
        echo "n"; echo ""; echo 3; echo 2001954; echo "";
        echo "w") | fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): Partition number (1-3, default 3): Partition 3 is deleted

Command (m for help): Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): Using default response p
Partition number (3,4, default 3): First sector (2001954-31116287, default 2002944): Last sector, +sectors or +size{K,M,G} (2001954-31116287, default 31116287): Using default value 31116287
Partition 3 of type Linux and of size 13.9 GiB is set

Command (m for help): The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.


Ich vermutete, dass mein eingespeister Befehlsstrom ein Zeitproblem aufwies fdisk(das nicht durch langsamere/manuelle Eingaben ausgelöst werden konnte), also begann ich, sleepBefehle einzustreuen, um verschiedene Eingaben zu verzögern, bis der Fehler behoben war. Das Problem in meinem Fall war, dass dies wzu bald nach der Definition der neuen Partition geschah.

A sleep 5vor den wErgebnissen in nachhaltigem Erfolg:

# (echo "d"; echo "";
        echo "n"; echo ""; echo 3; echo 2001954; echo "";
        sleep 5; echo "w") | fdisk /dev/sdb

Antwort3

Es kommt häufig vor, dass zuvor verwendete Geräte nach dem Anschließen an eine Maschine beschäftigt sind, wenn sie zuvor Mitglieder eines mdadmArrays waren. Um festzustellen, ob dies der Fall ist, cat /proc/mdstatsuchen Sie nach Ihren Laufwerken, die in einem dort aufgeführten Array angezeigt werden.

Wenn Sie einen oder mehrere finden, können Sie Folgendes tun, um sie aus ihrer früheren Array-Zuordnung zu lösen.

mdadm --stop /dev/md1234

wobei /dev/md1234das in angezeigte Array ist /proc/mdadm. Tun Sie dies für jedes Array, das mit den Laufwerken verknüpft ist, die Sie neu partitionieren möchten.BITTE ACHTEN SIE DARAUF, IM OBEN GENANNTEN BEFEHL NUR ALTE UND NICHT MEHR VERWENDETE ARRAYS ANZUGABEN.

Ich musste dies einmal vor dem Ausführen tun fdisk /dev/sdxyund dann noch einmal, nachdem der nachfolgende fdisk-Befehl die Kerneltabelle nicht aktualisieren konnte. Als das passierte, habe ich einfach die Befehle `mdadm --stop ..." erneut ausgeführt und fdisk erneut ausgeführt, indem ich einfach den Befehl "w" ausgab und nichts änderte. Beim zweiten Mal funktionierte es einwandfrei.

Antwort4

Versuchen Sie den Befehl: sudo resize2fs /dev/mmcblk0p2

verwandte Informationen