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
expect
自動化(使用)fdisk
操作の結果としてこれが得られるとします。パーティションが実際にマウントされていません。)、パーティションを変更したら、パーティションに書き込む前に数秒の遅延時間を追加してみてください。
Centos 7.6で呼び出しを自動化しようとすると、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
新しいパーティションを定義した直後に発生したことです。
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
ドライブがここにリストされているアレイのいずれかに表示されていることを確認してください。
1つ以上が見つかったら、次の手順を実行して前のアレイ接続から解放できます。
mdadm --stop /dev/md1234
/dev/md1234
に表示されている配列はどこにありますか/proc/mdadm
?再分割するドライブに関連付けられている各アレイに対してこれを行います。上記のコマンドには、古く、廃止された配列のみが指定されています。。
実行する前にこれを一度実行しfdisk /dev/sdxy
てから、後続のfdiskコマンドがカーネルテーブルを更新できなかった後に再度実行する必要があります。これが起こったとき、私は "mdadm --stop ..."コマンドをもう一度実行してからfdiskをもう一度実行しました。 「w」コマンドだけを実行し、何も変更しませんでした。 2番目にうまくいきました。
答え4
次のコマンドを試してください。 sudo resize2fs /dev/mmcblk0p2