Повторное чтение таблицы разделов завершилось ошибкой 16: Устройство или ресурс заняты

Повторное чтение таблицы разделов завершилось ошибкой 16: Устройство или ресурс заняты

При повторном разбиении USB-флешки на CentOS 6.x возникла следующая ошибка.

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

Предполагая, что вы получаете это в результате автоматизации (например, с помощью expect) fdiskоперации (и чтораздел на самом деле не смонтирован), попробуйте добавить несколько секунд задержки после изменения раздела и перед записью раздела.

Я получил ту же ошибку, когда пытался автоматизировать вызов fdiskна Centos 7.6 a la:

# (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происходило слишком рано после определения нового раздела.

А 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

Связанный контент