O Linux pode ser usado para criar uma unidade flash USB inicializável com o SO freedos?

0

Eu tenho um utilitário de HDD baseado em DOS chamado spinrite. Eu quero criar uma unidade flash inicializável com o SO freedos e, uma vez criado, copiar para a unidade o utilitário executável.

Eu tentei usar o gparted para particionar a unidade, formatá-la como Fat32 e definir o sinalizador de inicialização. Uma vez feito, não consigo ver como instalar o sistema operacional e adicionar o executável. Eu tenho um arquivo de imagem do Freedos, se eu tentar fazer o pen drive com ele, então não é inicializável. Qualquer ajuda é muito apreciada.

    
por Guy D'Amico 06.01.2018 / 19:54

1 resposta

1

Veja o que eu faço para personalizar as imagens do FreeDOS:

  1. inicie com uma imagem de disquete inicializável que eu baixei do site do Freedos. Infelizmente, ele está cheio de coisas que eu não preciso apenas para executar algum utilitário único, como um atualizador de BIOS.

  2. monte uma cópia dele com:

    mkdir -p ./floppy
    cp -a ./freedos-1440kb.img freedos-empty.img
    mount -o loop,rw freedos-empty.img ./floppy
    
  3. cd ./floppy e exclua tudo o que não for necessário. Isso deve acabar com cerca de 1,2 ou 1,3 MB livres na imagem de 1,44 MB.

  4. cd .. ; umount ./floppy

  5. Isso me dá uma imagem inicializável quase vazia, que posso usar para fazer quantas imagens personalizadas eu quiser. Eu então faço uma cópia disso e então copio o que eu preciso para isso. por exemplo,

    cp -a ./freedos-empty.img ./freedos-spinrite.img
    mount -o loop,rw freedos-spinrite.img ./floppy
    cp spinrite.exe ./floppy
    umount ./floppy
    

Esta imagem pode então ser copiada para uma unidade de disquete, unidade flash, etc. cat freedos-spinrite.img > /dev/sdX (onde sdX é o nó do dispositivo para seu stick USB). Eu quase nunca me incomodo de fazer isso porque eu nunca consigo encontrar um flash drive usável e vazio quando eu preciso de um .... é também mais trabalho e leva mais tempo do que usar menus grub ou tftp. E é mais lento para inicializar um stick USB do que uma imagem de disco armazenada no disco rígido local ou no meu servidor tftp.

No meu caso, copio para o diretório /boot/images/ e executo update-grub ... e, em seguida, uso scp para copiá-lo para outras máquinas onde ele possa ser necessário e executar update-grub neles também via ssh.

Eu também copio para o meu /var/lib/tfptboot/freedos/ e executo um script que escrevi para gerar entradas de menu para todos os arquivos *.img nesse diretório.

Isso me permite inicializar a imagem freedos do menu grub na inicialização, E pela rede via ipxe e tftp em qualquer máquina que tenha uma opção "inicializar da placa de rede" no momento da inicialização (ou seja, quase todas as máquinas atualmente. Tudo isso se você incluir o fato de que ipxe também pode ser inicializado a partir do grub).

Eu usei isso para criar imagens inicializáveis para atualização de BIOS em placas-mãe, reflash cartões LSI SAS para o modo de TI e aplicar atualizações de firmware a, por exemplo, alguns discos rígidos da Seagate.

BTW, é por isso que eu gosto de fazer partições /boot "superdimensionadas" (1 ou 2GB ou mais) - para que eu possa inicializar qualquer imagem de qualquer tamanho "razoável". Também para que eu não fique sem espaço em / boot e tenha que limpar minhas imagens antigas do kernel o tempo todo. Também é útil para, por exemplo, inicializar gparted ou clonezilla images.

Coisas extras: configurando o grub

Configurar tftp para isso é um bom trabalho inicialmente, então não vou entrar nisso aqui (tenho certeza que descrevi o processo em outra resposta neste site, e meus scripts tftp são na minha conta github - mas eu não fiz o upload dos scripts memdisk / freedos), mas há muito pouco que precisa a ser feito para grub :

  1. instale syslinux (ou, pelo menos, obtenha uma cópia do binário memdisk a partir dele).
  2. cp memdisk /boot
  3. mkdir -p / boot / images
  4. copie seus arquivos de imagem *.img , *.iso inicializáveis para /boot/images .
  5. copie o script 42_memdisk (veja abaixo) em /etc/grub.d/ e torne-o executável com chmod +x /etc/grub.d/42_memdisk
  6. execute update-grub como raiz

Nota: os trabalhos acima para o Debian e a maioria das distribuições relacionadas / derivadas como Ubuntu e Mint. Outras distros têm configurações ligeiramente diferentes para grub , então você teria que ajustar o procedimento de acordo.

memdisk pode inicializar qualquer imagem de disco que seja inicializável - de imagens de disquete a imagens de CD-ROM / DVD, a imagens de disco rígido.

42_memdisk (este é o script que faz o trabalho de gerar entradas de menu para o grub):

#!/bin/sh
set -e

IMAGES=/boot/images
. /usr/lib/grub/grub-mkconfig_lib
if test -e /boot/memdisk ; then
  echo "Found memdisk: $MEMDISKPATH" >&2
  MEMDISKPATH="$( make_system_path_relative_to_its_root "/boot/memdisk" )"

  find "$IMAGES" -name '*.img' -o -name '*.iso' | sort | 
  while read image ; do
      IMAGEPATH="$( make_system_path_relative_to_its_root "$image" )"
      echo "Found image: $IMAGEPATH" >&2
      cat << EOF
menuentry "Bootable image: $(basename $IMAGEPATH | sed -E -e 's/\.(img|iso)$//i')" {
EOF
      prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e 's/^/\t/'
      cat << EOF
        linux16 $MEMDISKPATH bigraw
        initrd16 $IMAGEPATH
}
EOF
  done
fi

IIRC, isso é modificado a partir de um script que encontrei em algum lugar anos atrás enquanto pesquisava como fazer coisas assim (não me lembro onde).

Exemplo de saída:

# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.14.0-2-amd64
Found initrd image: /boot/initrd.img-4.14.0-2-amd64
Found linux image: /boot/vmlinuz-4.14.0-1-amd64
Found initrd image: /boot/initrd.img-4.14.0-1-amd64
Found linux image: /boot/vmlinuz-4.12.0-2-amd64
Found initrd image: /boot/initrd.img-4.12.0-2-amd64
Found iPXE image: /boot/ipxe.lkrn
Found memtest86 image: /memtest86.bin
Found memtest86+ image: /memtest86+.bin
Found memdisk:
Found image: /images/LSI.img
Found image: /images/Seagate-PH-CC49.img
Found image: /images/fd-asus-m5a97.img
Found image: /images/freedos-empty.img
done
    
por 09.01.2018 / 01:09