Sembra che questo dispositivo sia montato. Esegui umount /dev/sdb1
e riprova.
Supponendo che tu stia ottenendo questo come risultato dell'automazione (ad esempio, usando expect
) il fdisk
operazione (e che la partizione non sia effettivamente montata), prova ad aggiungere qualche secondo di ritardo dopo aver modificato la partizione e prima di scrivere la partizione abilitata.
Ho ricevuto lo stesso errore mentre cercavo di automatizzare una chiamata a fdisk
su 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.
Il mio sospetto era che il mio flusso di comandi reindirizzato stesse affiorando un problema di temporizzazione in fdisk
(che non sarebbe stato attivato da un input più lento/manuale) quindi ho iniziato a spruzzare sleep
comandi per ritardare vari input fino alla scomparsa dell'errore. Il problema nel mio caso era che il file w
accadeva troppo presto dopo la definizione della nuova partizione.
Un sleep 5
prima dell'w
si traduce in un successo costante:
# (echo "d"; echo "";
echo "n"; echo ""; echo 3; echo 2001954; echo "";
sleep 5; echo "w") | fdisk /dev/sdb