
Ao particionar novamente uma unidade Flash USB no CentOS 6.x, ocorreu o seguinte erro.
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.
Responder1
Parece que este dispositivo está montado. Execute umount /dev/sdb1
e tente novamente.
Responder2
Supondo que você esteja obtendo isso como resultado da automatização (por exemplo, usando expect
) a fdisk
operação (e issoa partição não está realmente montada), tente adicionar alguns segundos de atraso após modificar a partição e antes de gravar a partição.
Recebi o mesmo erro ao tentar automatizar uma chamada fdisk
no 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.
Minha suspeita era que meu fluxo de comando canalizado estava revelando um problema de tempo fdisk
(que não seria acionado por entrada mais lenta/manual), então comecei a espalhar sleep
comandos para atrasar várias entradas até que o erro desaparecesse. O problema no meu caso foi que isso w
estava acontecendo logo após a definição da nova partição.
A sleep 5
antes dos w
resultados em sucesso consistente:
# (echo "d"; echo "";
echo "n"; echo ""; echo 3; echo 2001954; echo "";
sleep 5; echo "w") | fdisk /dev/sdb
Responder3
Existe uma maneira bastante comum de dispositivos usados anteriormente ficarem ocupados depois de simplesmente serem conectados a uma máquina, caso já fossem membros de um mdadm
array. Para ver se esse é o caso, cat /proc/mdstat
procure suas unidades para aparecer em uma matriz listada lá.
Se você encontrar um ou mais, poderá fazer o seguinte para libertá-los de sua antiga associação de array.
mdadm --stop /dev/md1234
onde /dev/md1234
está a matriz mostrada em /proc/mdadm
. Faça isso para cada matriz associada à(s) unidade(s) que você está tentando particionar novamente.POR FAVOR, TENHA CUIDADO PARA ESPECIFICAR APENAS MATRIZS ANTIGAS E NÃO MAIS USADAS NO COMANDO ACIMA.
Eu tive que fazer isso uma vez antes de executar fdisk /dev/sdxy
e novamente depois que o comando fdisk subsequente falhou ao atualizar a tabela do kernel. Quando isso aconteceu, eu apenas executei os comandos `mdadm --stop ..." novamente e executei o fdisk novamente, simplesmente emitindo o comando "w" e não alterando nada. Na segunda vez funcionou bem.
Responder4
tente o comando: sudo resize2fs /dev/mmcblk0p2