Lo hice y lo entendí

El blog de Vicente Navarro
29 jun

Arrancar MS-DOS desde una memoria USB

Continuando con la entrada Arrancar Knoppix desde una memoria USB usando SYSLINUX, en esta vamos a comentar cómo arrancar MS-DOS desde la memoria USB, información que usaremos posteriormente para construir nuestra memoria USB que arranque varios sistemas operativos.

Valiéndonos del comando ms-sys desde Linux la tarea es muy sencilla. Partimos con una memoria USB completamente vacía, cosa de la que nos aseguramos llenando el dispositivo de ceros con el comando dd:

# dd if=/dev/zero of=/dev/sdi
dd: writing to `/dev/sdi': No space left on device
492545+0 records in
492544+0 records out
252182528 bytes (252 MB) copied, 192.376 seconds, 1.3 MB/s

A continuación creamos la tabla de particiones y el sistema de ficheros FAT32:

# fdisk /dev/sdi
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
 
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1009, default 1):  
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1009, default 1009): 
Using default value 1009
 
Command (m for help): a
Partition number (1-4): 1
 
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))
 
Command (m for help): p
 
Disk /dev/sdi: 252 MB, 252182528 bytes
8 heads, 61 sectors/track, 1009 cylinders
Units = cylinders of 488 * 512 = 249856 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdi1   *           1        1009      246165+   c  W95 FAT32 (LBA)
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

# mkfs.vfat -F 32 /dev/sdi1
mkfs.vfat 2.11 (12 Mar 2005)

Y ahora escribimos un MBR y un sector de arranque para la partición:

# ms-sys -w /dev/sdi
DOS/Windows NT master boot record successfully written to /dev/sdi

# ms-sys -w /dev/sdi1
FAT32 DOS boot record successfully written to /dev/sdi1

# ms-sys -p /dev/sdi1                                                                      
Start sector (nr of hidden sectors) successfully written to /dev/sdi1
Physical disk drive id 0x80 (C:) successfully written to /dev/sdi1

El ms-sys con la opción -p es importante porque de otro modo, en muchos casos, el MS-DOS no consigue arrancar del disco, tal y como explica la página de manual del ms-sys:

-p, --partition
         Write  partition  info  (hidden sectors and drive id) to boot record. This might be
         needed on some partitions depending on which program was used to  create  the  file
         system.

[...]

BUGS
       There  have  been  reports about unbootable FAT32 partitions created with "mformat -F c:".
       One workaround is to use gnu parted to create the partition instead. Since  version  1.1.3
       ms-sys  has the switch -p which is supposed to fix this problem. The problem has also been
       reported on partitions formatted with mkdosfs and mkfs.vfat.

El último paso es copiar a la memoria los ficheros de arranque de MS-DOS necesarios (si no los tenemos, más abajo explico de dónde podemos obtenerlos), el IO.SYS, MSDOS.SYS y COMMAND.COM, y también podemos poner ya todos los que vayamos a necesitar según el fin que tengamos pensado para este MS-DOS (especialmente interesantes pueden ser el HIMEM.SYS, el EMM386.SYS, el DBLBUFF.SYS y el IFSHLP.SYS):

# mount /dev/sdi1 /mnt/usb

# cd /path_a_ficheros_de_ms-dos/
  
# cp io.sys msdos.sys command.com  /mnt/usb/

# cp himem.sys emm386.exe ifshlp.sys dblbuff.sys /mnt/usb

# umount /mnt/usb

En este punto la memoria USB ya está lista para arrancar MS-DOS.

Los archivos de MS-DOS podemos tomarlos de cualquier disco de rescate o instalación que tengamos de Windows 98 o Windows ME (o de las últimas versiones de Windows 95 (OSR2) que también soportaban FAT32). Si no tenemos ninguno a mano pero sí un Windows XP, hemos de saber que el Windows XP es capaz de crearnos discos de rescate de MS-DOS de la versión que llevaba el Windows ME (en la Wikipedia se puede ver qué versiones de MS-DOS llevaba cada Windows). Para ello sólo tenemos que ir al diálogo de formatear disquetes y marcar la casilla de “Create an MS-DOS startup disk”:

Windows XP - Create an MS-DOS startup disk

Esta operación nos dejará los siguientes ficheros en el disquete que podremos usar para nuestra memoria USB:

A:\>dir /a
 Volume in drive A has no label.
 Volume Serial Number is 2A87-6CE1

 Directory of A:\

07/04/2001  13:40                    9 MSDOS.SYS
15/05/2001  18:57           116.736 IO.SYS
08/06/2000  17:00            58.870 EGA2.CPI
08/06/2000  17:00            58.753 EGA3.CPI
08/06/2000  17:00            58.870 EGA.CPI
08/06/2000  17:00            21.607 KEYB.COM
08/06/2000  17:00            34.566 KEYBOARD.SYS
08/06/2000  17:00            31.942 KEYBRD2.SYS
08/06/2000  17:00            31.633 KEYBRD3.SYS
08/06/2000  17:00            13.014 KEYBRD4.SYS
08/06/2000  17:00            29.239 MODE.COM
08/06/2000  17:00            93.040 COMMAND.COM
08/06/2000  17:00            17.175 DISPLAY.SYS
29/06/2007  10:53                  95 AUTOEXEC.BAT
29/06/2007  10:53                  33 CONFIG.SYS
              15 File(s)        565.582 bytes
               0 Dir(s)         888.320 bytes free

Si trabajamos en un sistema sin unidad de disquete, podemos usar el excelente emulador de disquetera para Windows Virtual Floppy Drive 2.1 que nos permite que el Windows XP formateé uno de sus disquetes virtuales dejándonos los ficheros de MS-DOS listos para usar.

Es necesario matizar que MS-DOS usa los ficheros MSDOS.SYS y el IOS.SYS pero, por ejemplo, el PC-DOS y el DR-DOS usaban los ficheros IBMBIO.COM y IBMDOS.COM y el FreeDos usa el KERNEL.SYS (fuente: documentación del comando sys del FreeDos) y que el comando ms-sys no escribe sectores de arranque adecuados para estas variantes de DOS.

Si no queremos usar Linux, hay un camino todavía más rápido para llegar a este punto basado en la utilidad de HP HP USB Key ROMPAQ Setup Utility HP USB Key ROMPAQ Setup Utility que nos instala un comando de nombre HPUSBFW.EXE con este aspecto:

HP USB Format Utility

que nos permite, proporcionándole un directorio donde estén los fichero de MS-DOS requeridos que comentábamos antes, tener rápidamente una memoria USB lista para arrancar MS-DOS. En el foro del BartPE, donde estuvieron durante bastante tiempo hablando sobre cómo conseguir botar de USB (algo que usaremos en posteriores entradas), encontramos un interesante análisis sobre qué hace de especial dicha utilidad: Boot Bartpe From Usb Flash Drive, please try this!

The bootsectors of the Windows and HP formats had only 5 differences:
Locations 024-02A: HP=80 00 29 3C AC 48 68, Win=00 00 29 E9 3B 52 00

Igual que hicimos con el Knoppix, en este punto resulta muy interesante ver cómo instalar el GRUB en la memoria USB y configurarlo para que que cargue el MS-DOS. Para ello, desde un Linux con GRUB, hacemos:

# mount /dev/sdi1 /mnt/usb/

# mkdir -p /mnt/usb/boot/grub/    
                                                         
# vi /mnt/usb/boot/grub/device.map

# cat /mnt/usb/boot/grub/device.map 
(hd0) /dev/sdi

# /usr/sbin/grub-install --no-floppy --root-directory=/mnt/usb/ '(hd0)'                    
Installation finished. No error reported.
This is the contents of the device map /mnt/usb//boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
 
(hd0) /dev/sdi

Y ahora ya sólo nos queda crear un menú adecuado para arrancar el MS-DOS de esta unidad en /mnt/usb/boot/grub/menu.lst:

default 0
fallback 1

title MS-DOS
rootnoverify (hd0,0)
makeactive
chainloader  +1

Pero esta configuración usa el sector de arranque que está al principio de la partición, mientras que lo que puede resultarnos mucho más interesante para nuestros propósitos futuros de arrancar varios sistemas operativos desde una memoria USB es almacenar dicho sector de arranque a un fichero y que GRUB use dicho fichero:

# cd /mnt/usb/     

# dd if=/dev/sdi1 of=bootsect.dos bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.003348 seconds, 153 kB/s

Y ahora ya podemos poner una alternativa en el menú que nos permita usar dicho sector para arrancar:

default 0
fallback 1

title MS-DOS
rootnoverify (hd0,0)
makeactive
chainloader  +1

title MS-DOS bootsector en fichero
rootnoverify (hd0,0)
makeactive
chainloader  /bootsect.dos
DOS en GRUB
DOS arrancado desde GRUB

Para finalizar, comentar el tutorial Boot from USB Flash drive basado en la utilidad mkbt que nos permite coger el sector de arranque de un disquete de arranque y ponerlo en la unidad USB. Sin embargo, hay que comentar que seguir ese tutorial en un filesystem FAT32 lo daña y queda inaccessible, mientras que al hacerlo en uno FAT16 no parece que se rompa nada pero sin embargo a mi no me ha funcionado bien. En cualquier caso, está bien conocer otra alternativa más.

Entradas relacionadas

24 Comentarios a “Arrancar MS-DOS desde una memoria USB”

  • triky dice:

    ¿y cómo queda la distribución del teclado? ¿en español, con las eñes y los caracteres especiales en “su” sito, en inglés imperial, con el /? en la tecla de -_?

    Muy currado el artículo, como siempre.

  • triky ¡Muchas gracias!

    Haciéndolo tal y como cuento en el artículo el MS-DOS arranca en inglés, sin ninguna configuración. No he querido entrar en más detalles, pero a partir del punto en el que dejo el artículo, se deberían de copiar los drivers, comandos y utilidades de MS-DOS que resulten necesarios, crear un AUTOEXEC.BAT y un CONFIG.SYS, configurarlo para que cargue drivers de CD/DVD y el MSCDEX, cargar el SMARTDRV.EXE, cargar el driver del ratón, cargar el KEYBOARD.SYS, cargar el DISPLAY.SYS y el MODE CON, tal vez personalizar el MSDOS.SYS… En fin, todo lo que alguien que necesite MS-DOS normalmente ya conoce.

    Yo normalmente me copio de un Windows 98 todos los ficheros de C:\WINDOWS\COMMAND y algunos que están en C:\WINDOWS al directorio \DOS de la memoria USB y uso los siguienes ficheros de configuración:

    CONFIG.SYS

    DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF
    DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN I=B000-B7FF
    
    DOS=UMB
    DOS=HIGH
    
    DEVICEHIGH=C:\DOS\DISPLAY.SYS CON=(EGA,,1)
    COUNTRY=034,850,C:\DOS\COUNTRY.SYS
    
    DEVICEHIGH=C:\DOS\WIN\OAKCDROM.SYS /D:MSCD001

    AUTOEXEC.BAT

    @ECHO OFF
    
    SET PATH=C:\DOS\
    
    LH MOUSE.COM
    
    LH DOSKEY
    MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)
    MODE CON CODEPAGE SELECT=850
    LH KEYB SP,,C:\DOS\KEYBOARD.SYS
    
    LH MSCDEX.EXE /D:mscd001
    LH SMARTDRV

    MSDOS.SYS

    [Options]
    AutoScan=0
    BootDelay=2
    BootGUI=0
    BootMenu=0
    BootMulti=0
    BootSafe=0
    BootWarn=0
    DisableLog=1
    DoubleBuffer=1
    Logo=0
    SystemReg=0
    
    [Paths]
    WinDir=C:\DOS\
    WinBootDir=C:\DOS\
    HostWinBootDrv=C

    Aunque el MSDOS.SYS puede ser simplemente una línea con:

    ;W98EBD

  • Iván dice:

    Muy bueno el artículo!. Después de tanto tiempo sin postear ya pensaba yo que también habías sido padre ;-) .

    Saludos, Iván.

  • Iván Muchas gracias. No, no, eso de momento se lo dejo a valientes como tú ;-)

  • chema dice:

    Un saludo: Me han gustado mucho los artículos. hace tiempo también me peleé con grub, usbs y bartpe

    Quería sugerir una forma más de arrancar MSDOS, no es sólo para USB :
    Con MEMDISK (Parte del proyecto SYSLINUX) se puede arrancar una imagen de diskette. En general cualquier diskette (DOS, linux…)
    Hay que configurar el gestor de arranque (syslinux, grub, … ): como kernel el fichero memdisk, y como initrd el fichero con la imagen de diskette.

    Por ejemplo en grub sería de este estilo, suponiendo que hayamos puesto la imagen y memdisk en /boot/imagenesdiskette:

    title disketteW98
    root (hd0,0)
    kernel /boot/imagenesdiskette/memdisk
    initrd /boot/imagenesdiskette/imagendiskettearranquewin98

    Con ello puedes tener un usb con multiples imágines de diskettes de utilidades.

    Un saludo

  • @chema Muchas gracias por tu comentario. Me alegro de que te hayan gustado los artículos.

    Sobre el MEMDISK, lo había oído de pasada pero nunca me había puesto con él, así que gracias por comentarlo, me has animado a estudiarlo más en detalle.

    Saludos

  • JAIME dice:

    NORMALMENTE NO POSTE PERO ESTA WENO ESTA PAJINA EESPERO VISITARLOS DE NUEVO PRONTO MUCHAS GRACIAS POR TODO LO QUE SE ENSEÑA AQUI

  • Jose dice:

    Debo estar haciendo algo mal, pero hice lo que decías al pie de la letra y no arranca. El usb arranca slax knoppix etc con el syslinux pero esto no soy capaz.Mensaje:”Missing operating system”

  • @Jose Yo tengo memorias USB preparadas con este sistema que funcionan perfectamente en muchos ordenadores y en alguno no me funciona. Supongo que el problema está en la BIOS de esos ordenadores. La memoria USB usada también puede afectar.

  • Jose dice:

    Ok. por una parte me alegro porque como no tengo ni idea, procuro hacer las cosas como me indica gente como tú, que sabeis de lo hablais, y con cada ordenador y usb es una historia diferente. No entendía nada,volviendome loco revisando todo una y otra vez. Gracias, y un saludo

  • Arturo dice:

    Muy bueno gracias

  • topcat2009 dice:

    Me parece muy interesante el articulo, pero estoy aprendiendo de estos temas por mi cuenta y quisiera saber en que tipo de archivo se crean todas las instrucciones que detallas, en un archivo .ini .info o sys y que nombre llevan ¿me podrias dar un ejemplo aunque pequeño por favor? gracias….

  • @topcat2009 El procedimiento que detallo hay que ejecutarlo en Linux.

  • Turgon dice:

    No es la primera vez que buscando una solución por google acabo en tu página, muchas gracias. ¡Esta vez no se me olvida suscribirme al RSS!

  • Edu dice:

    Hola a todos,

    En primer lugar muchas gracias por tu página, Super Coco, la información que compartes es muy útil.

    He seguido el procedimiento que detallas pero con una memoria SD en vez de un lápiz USB. Todo ha ido bastante bien, he conseguido arrancar y cargar GRUB, pero al intentar cargar el DOS me suelta el famoso mensaje “Invalid system disk, replace and press any key when ready” (más o menos :P)

    ¿Qué he hecho mal? Sin GRUB me dice lo mismo.

    PD: Sé que este post tiene ya un tiempo y que es dificil que reciba respuesta, pero la esperanza está ahí :)

    Gracias de nuevo.

    Edu

  • @Edu ¡Gracias! Tengo comprobado que, aunque a menudo funciona bien, este método de usar el ms-sys también es menos fiable que el “formateador” de HP al que hago mención. Si tienes Windows para usarlo, te sugiero que le des una oportunidad. Ese “formateador” también lo hemos usado mucho para arrancar el BartPE con el grub4dos. Puedes leer al respecto en: Arrancar BartPE desde memorias USB en FAT32, ¡y mucho más rápido!

  • JULIO dice:

    Hola, necesito instalar windows XP en una laptop toughbook panasonic, que soll cuenta con una unidad de floppy 3.5 interna y un puerto USB2.0,, y tengo una lector de CD externo USb2.0, el cual intento instalar windows desde este CD-ROM externo USB pero no lo ejecuta,, ya entre al setup boot en donde primero arranca desde CD-ROM pero no funciona, al paracer esta opcion es solo para un CD-ROM interno,, Alguien me podra decir como hacerle para poder instalar el windows?? Estoy buscando alguna opcion usando un disco de 3.5 como disco de arranque y que este cuente con los drivers para butear desde MS DOS el CD-ROM Externo USB.

  • Joseda dice:

    Buenas!

    Ante todo, felicidades por tu post, es de mucha ayuda ;)

    Quisiera preguntarte unas cosas…
    Primero, descargué un programa que realizaba copias de seguridad de windows 98 en diskett y al crear uno, cogí de él los archivos necesarios y tal, pero es algo más raro, porque parece que carga windows 98 y luego para y entra en ms-dos…

    Si pudieras subir o pasarme los archivos justos y necesarios te lo agradecería, junto a los archivos que mencionas de la version 98 de windows, que no los encuentro por internet.

    Otra duda que tengo es como crear el grub en la USB, pero si me puedes solucionar lo anterior, me pondré a investigar yo mismo ;)

  • Joseda dice:

    Perdona por escribir de nuevo, lo del GRUB ya está solucionado, pero sigo esperando tu respuesta y tu ayuda a como cargarlo con el GRUB

  • Edu dice:

    Bueno, al final usé otra opción (CDROM externo) para solucionar mi problema. Tengo que decir que el mismo procedimiento que no funcionó para la tarjeta SD sí lo hizo con un lápiz USB (no sabría explicar por qué).

    Joseda: los discos de inicio que encontré yo también mostraban el logo de W98 durante un par de segundos: aparte del mal rollo que te entra, el entorno tiene plena funcionalidad. Los archivos necesarios (como se explica en el post) son io.sys, msdos.sys y command.com

    Feliz año nuevo, por cierto

  • Joseda dice:

    Para mis propósitos me gustaría algo más limpio como lo que se muestra en la imagen del post, pero eso es secundario.

    También debo utilizar una herramienta para poder trabajar en NTFS pero usando ntfs4dos tengo problemas en la copia de archivos superiores a 60kb desde mi USB en FAT32 a la particion NTFS y no tengo ni idea del porqué.

    En cuanto al GRUB, sigo sin poder bootear MS-DOS porque al cargar la propia USB carga del nuevo el GRUB en vez de MS-DOS…

    Por último tengo una una duda… ¿Hay alguna forma de utilizar Linux de la misma forma que MS-DOS? Es decir, ¿Hay alguna versión de linux en modo shell, por asi decirlo, que carge para realizar operaciones básicas? Esque asi tendría todas las ventajas que da linux, principalmente la de acceder a particiones en NTFS.

    Feliz Año nuevo ;)

  • Edu dice:

    Buenas,

    Sobre tu última pregunta, seguramente te sirva algo como Knoppix. Hay un post como estos que habla sobre el tema.

    Personalmente, a mí me hizo gracia Puppy Linux, que cabe en cualquier sitio aunque viene algo limitadilla.

  • Roberto dice:

    Saludos:
    Despues de intentar muchas veces con el metodo de prueba y error
    consegui siguiendo sus pautas crear un disco de arranque en Windows Vista en un FlashDrive 4 G:
    Este creo el disco automaticamente en la version “Windoss Millennium 4.98.3000.
    Pude arrancar mi vieja PC (Pentium 4 sin disco duro, con quemador de DVD, lector CD y 2G ram).
    Por lo menos hasta que compre disco de verdad voy a usar la pc a la antigua:
    en modo command.
    Gracias Muchachos. Son unos tigres todos Uds.

Trackbacks y pingbacks:

Tema LHYLE09, creado por Vicente Navarro