Linux
重新讀取分區表失敗,錯誤 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.
看起來此設備已安裝。執行並重
umount /dev/sdb1
試。
假設您是通過自動化(例如,使用
expect
)fdisk
操作(並且分區實際上並未掛載)而得到此結果,請嘗試在修改分區之後和寫入分區之前添加幾秒鐘的延遲。當我嘗試
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