Recentemente tive que criar um usb bootável do Windows 10. Sei que existe programas e processos para este procedimento, mas achei que valia a pena fazer um pequeno script para isso.
versão 0.4
- modificado o link do fórum
- agora o awk mexe direto com o arquivo /proc/mounts
- o script detecta se tem algum disco conectado na porta usb
- detecta se o usb esta montado, se não estiver ele monta
- mostra o disco que será montado, perguntando se quer continuar ou não
- pega o tamanho do disco montado antes de continuar a cópia
- o sudo agora só pergunta uma vez até que o script seja finalizado, independente do tempo de execução
- o script aceita o crtl+c
- caso não queira copitar e responda não, o script remove a montagem da imagem Windows10.iso e sai
- agora trabalho com awk, lsblk, cut, sort e uniq
versão 0.3
- apenas adicionado o link do fórum
versão 0.2
- removido partes não necessárias
- retirado sudo para cópia
- adicionado comando para remover pasta do /mnt
Para o script funcionar, tenha certeza só exista uma partição no pen drive
O que fiz até o momento:
- Trabalha com a imagem do Windows10 montada na pasta /mnt
- Funciona com um ou mais driver removíveis. Caso exista mais de um o script pede para você escolher o usb
- Desmonta, formata e monta o pen drive coma label WINDOWS10
- Copia o conteúdo com o rsync, exibindo assim a porcentagem do progresso da cópia para o usb
- Ao finalizar, desmonta a imagem na pasta /mnt
- É utilizado o /dev/null para ocultar determinadas saídas de comandos. Se quiser pode ser retirado ( só remover &> /dev/null). Isso foi feito para deixar o processo de instalação mais limpo.
- O script está comentado
- Trabalha com /run/media
- Detecta se existe drive removível ou não
- Monta o drive se não estiver
- Mostra o drive selecionado que irá trabalhar
- Trabalha com sudo para algumas tarefas
- Captura o tamanho da partição selecionada
O nome deixei como criarusbwindows. Se quiser escolha outro nome.
Para chamar o script de modo fácil copie pare pasta /usr/local/bin/
sudo cp criarusbwindows /usr/local/bin/
Para funcionar de a permissão de executar
sudo chmod +x criarusbwindows
**Segue o script **
#!/bin/bash
# Cria usb bootável Windows 10
## versão 0.4
## https://plus.diolinux.com.br/t/22231
# Se teclar CTRL+C sair
trap "exit" INT
# Função para pegar o tamanho do disco removível
pegartamanho(){
TAMANHO=`lsblk -n -r -o FSSIZE $DEVUSB`
}
# Usar sudo com tempo infinito enquanto roda o script
while :; do sudo -v; sleep 259; done &
infiloop=$!
# Se não for root use o sudo
[ "$UID" != 0 ] && SU=sudo
# Texto de exibição antes de pedir senha sudo
echo "O script precisa de permissão root para executar algumas tarefas na pastas /mnt e também na formatação do disco removível que será usado."
# Cria a pasta de ISO na /mnt
$SU mkdir -p /mnt/ISO
# Monta uma imagem tipo CD/DVD na /mnt/ISO
echo "Montando imagem do Windows 10"
$SU mount -o loop "$1" /mnt/ISO &> /dev/null
# Detecta o usb
# Conta as o número de montagens em /run/ de discos
CONTAGEM=`awk -e '$1 ~ /^\/dev/ && $2 ~ /^\/run/' /proc/mounts | wc -l `
# Se não existir montagem em /run
if [[ "$CONTAGEM" == 0 ]]; then
# DISCOUSADO (sem partição) e PARTICAO (com partição)
DISCOUSADO=`awk -F "/" '$2=="dev" && $1=="" {print $3}' /proc/mounts | cut -c-3 | sort | uniq`
DISCONAOUSADO=`lsblk | awk -e '$1 ~ /^sd/ {print $1}' | grep -v "$DISCOUSADO"`
if [[ -z "$DISCONAOUSADO" ]]; then
echo "Desmontando imagem do Windows 10 no /mnt"
$SU umount /mnt/ISO
$SU rm -r /mnt/ISO
echo "Pronto."
echo -e "[\e[1m Atenção: Nenhum disco removível inserido \e[0m]"
exit 0
else
PARTICAO=`lsblk -n -r -o NAME "/dev/$DISCONAOUSADO" | awk '$1~/s.*[[:digit:]]/'`
fi
# Se tiver partição ou não
if [[ -z "$PARTICAO" ]]; then
NAOMONTADO="$DISCONAOUSADO"
else
# Caso exista partição
NAOMONTADO="$PARTICAO"
fi
# Montar partição
udisksctl mount -b "/dev/$NAOMONTADO" &> /dev/null
DEVUSB="/dev/$NAOMONTADO"
pegartamanho
echo "USB não montada. A montagem será em /dev/$NAOMONTADO com $TAMANHO"
# Se existir 1 partição montada
elif [[ "$CONTAGEM" == 1 ]] ; then
DEVUSB=`awk -e '$1 ~ /^\/dev/ && $2 ~ /^\/run/ {print $1}' /proc/mounts`
pegartamanho
echo "A partição que será usada é $DEVUSB com $TAMANHO"
else
# Detecta mais de uma montagem para usar
echo "Informação extra"
awk -e '$1 ~ /^\/dev/ && $2 ~ /^\/run/ {print $1 " -----> " $2 }' /proc/mounts
echo -e Informe o número do usb para ser usado:
OPCOES=($(awk -e '$1 ~ /^\/dev/ && $2 ~ /^\/run/ {print $1}' /proc/mounts))
select USBSELEC in "${OPCOES[@]}"
do
DEVUSB="$USBSELEC"
pegartamanho
echo "A partição que será usada é $DEVUSB com $TAMANHO"
break;
done
fi
# Pergunta se quer continuar na montagem seleciona
while read -p "O disco ou partição está correto? [S/n]" RESP ; do
if [[ $RESP = "" ]]; then
RESP="S"; break
elif [[ $RESP = [SsNn] ]]; then
break
fi
done
# Se a reposta for sim, então continuar
if [[ $RESP = [Ss] ]]; then
# Desmonta e formata para FAT32
echo "Desmontando para formatar"
udisksctl unmount -b "$DEVUSB" &> /dev/null
echo "Formatando USB para FAT32"
$SU mkfs.vfat -n WINDOWS10 "$DEVUSB" &> /dev/null
# Copia arquivos para o pen drive
# Montando unidade
echo "Montando para copiar para a unidade"
udisksctl mount -b "$DEVUSB" &> /dev/null
MEDIA=`df | grep "$DEVUSB"| awk '{print $6}'`
# Copiando arquivos para o USB
echo "Copiando para $MEDIA"
rsync -rtpl --info=progress2 /mnt/ISO/. "$MEDIA"
# Desmontar imagem iso
echo "Desmontando imagem do Windows 10"
$SU umount /mnt/ISO
$SU rm -r /mnt/ISO
echo "Pronto."
# Se a reposta for não, desmontar e finalizar
elif [[ $RESP = [Nn] ]]; then
echo "Desmontando imagem do Windows 10 no /mnt"
$SU umount /mnt/ISO
$SU rm -r /mnt/ISO
echo "Pronto."
fi
# Finalizar tempo infinito do sudo
kill "$infiloop"
exit 0
Inicia com a partição não montada
Quando finaliza respondendo não
Quando se tem mais de um drive ou partição USB
Quando não tem nenhum drive correndo USB ( ou correndo no /run/)