1 votos

Comando para formatear una imagen de disco flexible cruda con FAT12.

Soy nuevo en el desarrollo de sistemas operativos y quiero formatear una imagen de disquete de 1.44 MB con el sistema de archivos FAT12. Creé el disco usando dd if=/dev/zero of= bs=512 count=2880, así que es solo una imagen sin procesar llena de ceros. Luego, quería crear el sistema de archivos. El tipo en el tutorial usó mkfs.fat12, pero estoy trabajando en MacOS.

El único comando que encontré para formatear discos allí es newfs_msdos -f 2880 -F 12 .

Pero ese comando solo imprime un error: newfs_msdos: Inappropriate ioctl for device: build/disk2.img: Cannot get partition offset

También encontré diskutil eraseDisk, pero eso solo funciona para un dispositivo montado, no para imágenes de disco, y no puedo montar una imagen de disco si no tiene un sistema de archivos funcional.

Agradecería si alguien sabe de un comando que funcione para imágenes de disquete, o si alguien puede decirme qué provocó este error y cómo puedo evitarlo.

¿Cómo puedo decirle al comando que no hay particiones ni desplazamientos, y solo quiero formatear todo el disco?

2voto

David Anderson Puntos 2189

Para una lectura más rápida, he movido la sección de conclusión al principio de esta respuesta.

Conclusión

El OP debería utilizar los comandos dados en el Caso 2 para formatear la imagen. Sin embargo, al utilizar los comandos dados en el Caso 1 probablemente formateará correctamente la imagen al usar OS X 10.6.8 hasta macOS 13.3.1 en una Mac Intel.


Introducción

No puedo reproducir tu problema. En otras palabras, no puedo no formatear la imagen.

He probado utilizando las siguientes máquinas

  • Máquina virtual Snow Leopard con un tamaño de sector de disco de 512 bytes.
  • Máquina virtual Monterey con un tamaño de sector de disco de 512 bytes.
  • Mac mini Venture 2018 con un tamaño de sector de disco de 4096 bytes.

Caso 1

Basado en la pregunta, ejecuté los siguientes comandos:

dd if=/dev/zero of=x.img bs=512 count=2880
newfs_msdos -f 2880 -F 12 ./x.img

El resultado se muestra a continuación.

davidanderson@Lobster Desktop % dd if=/dev/zero of=x.img bs=512 count=2880
2880+0 records in
2880+0 records out
1474560 bytes transferred in 0.011958 secs (123311591 bytes/sec)
davidanderson@Lobster Desktop % newfs_msdos -f 2880 -F 12 ./x.img
newfs_msdos: warning: ./x.img is not a character device
ioctl(DKIOCGETPHYSICALBLOCKSIZE) not supported
./x.img: 5726 sectores en 2863 clústeres FAT12 (1024 bytes/clúster)
bps=512 spc=2 res=1 nft=2 rde=240 sec=5760 mid=0xf0 spf=9 spt=36 hds=2 hid=0 drv=0x00

Se generó un mensaje de error porque no se pudo determinar el tamaño de sector (bloque) del archivo de imagen x.img. Sin embargo, la salida muestra un valor de bps (bytes por sector) de 512 que se utilizó como valor predeterminado.

Caso 2

Ejecuté los siguientes comandos. Aquí, el comando hdiutil attach se utilizó para adjuntar una imagen de disco como un dispositivo. El identificador disk7 se determinó a partir de la salida de este comando.

dd if=/dev/zero of=y.img bs=512 count=2880
hdiutil attach -nomount y.img
newfs_msdos -f 2880 -F 12 disk7
hdiutil detach disk7

El resultado se muestra a continuación.

davidanderson@Lobster Desktop % dd if=/dev/zero of=y.img bs=512 count=2880
2880+0 records in
2880+0 records out
1474560 bytes transferred in 0.012780 secs (115380282 bytes/sec)
davidanderson@Lobster Desktop % hdiutil attach -nomount y.img
/dev/disk7                                              
davidanderson@Lobster Desktop % newfs_msdos -f 2880 -F 12 disk7
512 bytes per physical sector
/dev/rdisk7: 5726 sectores en 2863 clústeres FAT12 (1024 bytes/clúster)
bps=512 spc=2 res=1 nft=2 rde=240 sec=5760 mid=0xf0 spf=9 spt=36 hds=2 hid=0 drv=0x00
davidanderson@Lobster Desktop % hdiutil detach disk7           
"disk7" expulsado.

Aquí no se generaron mensajes de error ya que el valor de bps pudo determinarse como 512.

Comparación de Caso 1 y Caso 2

Ingresé los siguientes comandos para comparar los dos archivos de imagen.

hexdump -C x.img >x.lst
hexdump -C y.img >y.lst
diff x.lst y.lst

El resultado se muestra a continuación.

davidanderson@Lobster Desktop % hexdump -C x.img >x.lst
davidanderson@Lobster Desktop % hexdump -C y.img >y.lst
davidanderson@Lobster Desktop % diff x.lst y.lst
3c3
< 00000020  00 00 00 00 00 00 29 12  0d c4 37 4e 4f 20 4e 41  |......)...7NO NA|
---
> 00000020  00 00 00 00 00 00 29 15  0d c9 37 4e 4f 20 4e 41  |......)...7NO NA| 

La diferencia entre los dos archivos está en los desplazamientos de bytes 0x27 y 0x29. Según Wikipedia, los bytes en los desplazamientos 0x27 a 0x2A contienen el número de serie del disco, el cual se espera que sea diferente entre las imágenes formateadas en FAT12.

2voto

axolotlKing0722 Puntos 39

Ok, la solución final que funcionó para mí es la siguiente:

Crea una imagen con un comando como este (o el que hayas usado para crear tu imagen de disco):

dd if=/dev/zero of=disk.img bs=512 count=2880

Luego adjúntala:

hdiutil attach -nomount disk.img

Este comando mostrará la ruta adjunta, como /dev/disk4. Luego puedes formatear esa ruta:

newfs_msdos -f 2880 -F 12 disk4

(Es importante escribir, por ejemplo, "disk4", no "/dev/disk4")

Y finalmente, desmonta la imagen:

hdiutil detach disk4

Esa solución funcionó en mi Mac Mini M1, MacOS Somona 14.0

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X