web-dev-qa-db-ja.com

エラー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.
5

このデバイスはマウントされているようです。 umount /dev/sdb1を実行して、もう一度お試しください。

12
user1700494

expect操作の自動化(たとえば、fdiskを使用)の結果としてこれを取得していると仮定します(そして パーティションは実際にはマウントされていません )。パーティションを変更した後、可能なパーティションを書き込む前に、数秒の遅延を追加してみてください。

Centos 7.6 a laでfdiskの呼び出しを自動化しようとしたときにも同じエラーが発生しました。

# (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 5wの前に一貫した成功をもたらします:

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

tryコマンド:Sudo resize2fs/dev/mmcblk0p2

0
Dooby

あなたは「Sudo fdisk/dev/sdc1」のように試したかもしれません

解決策:/ dev/sdcのパーティションを作成する場合、コマンドは「Sudo fdisk/dev/sdc1」ではなく「Sudo fdisk/dev/sdc」にする必要があります。

0
Karpagam

ofdiskコマンドを実行すると、新しいDOSディスクラベルが作成されます。

または、このコマンドがある場合はpartprobeまたはkpartx -aを試してください。

0
netawater

以前に使用されたデバイスがmdadm配列のメンバーであった場合、それらが単にマシンに接続された後にビジーになるかなり一般的な方法があります。これが当てはまるかどうかを確認するには、cat /proc/mdstatにリストされているアレイに表示されるドライブを探します。

1つ以上が見つかった場合は、次のようにして、以前のアレイの関連付けから解放することができます。

mdadm --stop /dev/md1234

ここで、/dev/md1234/proc/mdadmに示されている配列です。パーティションを再作成しようとしているドライブに関連付けられているアレイごとに、これを実行します。 上記のコマンドで古いものと使用されていないアレイのみを指定するように注意してください

fdisk /dev/sdxyを実行する前にこれを1回実行する必要があり、その後のfdiskコマンドがカーネルテーブルを更新するのに失敗した後、再度実行する必要がありました。それが起こったとき、私はもう一度「mdadm --stop ...」コマンドを実行し、fdiskを再度実行し、単に「w」コマンドを発行して何も変更しませんでした。

0
Alan Mimms