重新读取分区表失败,错误 16:设备或资源繁忙

重新读取分区表失败,错误 16:设备或资源繁忙

在 CentOS 6.x 上对 USB 闪存驱动器重新分区时出现以下错误。

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.

答案1

看起来这个设备已经安装了。运行umount /dev/sdb1并重试。

答案2

假设你得到这个作为自动化(例如,使用expectfdisk操作的结果(并且该分区实际上并未安装),尝试在修改分区之后和写入分区之前添加几秒钟的延迟。

当我尝试fdisk在 Centos 7.6 上自动调用时,我遇到了同样的错误:

# (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.


我怀疑我的管道输入命令流出现了计时问题fdisk(不会由较慢/手动输入触发),因此我开始散布sleep命令来延迟各种输入,直到错误消失。我的情况的问题是w在定义新分区后很快就发生了。

A在取得一致成功sleep 5之前w

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

答案3

如果以前使用的设备以前是阵列的成员,则在将它们简单地插入到计算机后,有一种非常常见的方式会变得繁忙mdadm。要查看是否属于这种情况,cat /proc/mdstat请查找您的驱动器是否出现在此处列出的阵列中。

如果您找到一个或多个,您可以执行以下操作,将它们从以前的数组关联中释放出来。

mdadm --stop /dev/md1234

其中/dev/md1234是 中所示的数组/proc/mdadm。对与您尝试重新分区的驱动器关联的每个此类阵列执行此操作。请注意在上述命令中仅指定旧的且不再使用的数组

我必须在运行之前执行一次此操作fdisk /dev/sdxy,然后在后续的 fdisk 命令无法更新内核表后再次执行此操作。发生这种情况时,我只是再次执行了“mdadm --stop ...”命令,然后再次执行了 fdisk,只需发出“w”命令并且不进行任何更改。第二次工作正常。

答案4

尝试命令: sudo resize2fs /dev/mmcblk0p2

相关内容