Meu USB não está fazendo imagens corretamente

3

Eu tenho um sistema de inicialização dupla (Windows 10 e Ubuntu, o Windows fast boot está desativado) e, portanto, tenho muitas partições no meu disco rígido. Na inicialização, o drive USB está fazendo uma boa imagem no Ubuntu e está funcionando de todas as maneiras que você esperaria também.

No entanto, quando montei a partição de dados do meu disco rígido da Microsoft (pelo menos tenho quase certeza de que essa é a causa), não é mais possível formatar o USB ou a imagem de qualquer forma.

Eu tentei dd , na verdade, é onde eu preciso trabalhar porque usar dd é muito mais fácil do que usar o criador do Ubuntu Startup Disk (estou projetando um sistema operacional no caso de alguém querer saber, e é difícil o suficiente sem problemas USB !!!). Não consigo montá-lo porque falta um sistema de arquivos da última imagem. Embora, se eu formatá-lo antes de eu acessar a Microsoft (ou o erro que ocorre que você verá daqui a pouco), ele funciona bem como um disco USB normal. Eu apenas não posso re-formatá-lo.

Aqui está uma captura de tela do erro:

Por favor, pergunte-me se você tiver alguma dúvida ou precisar ver mais detalhes.

Comandos:

root@my_comp:/# df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             6100104       0   6100104   0% /dev
tmpfs            1224076    9820   1214256   1% /run
/dev/sda5      382559396 9121780 353981616   3% /
tmpfs            6120368   51716   6068652   1% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs            6120368       0   6120368   0% /sys/fs/cgroup
/dev/sda1         262144   30636    231508  12% /boot/efi
tmpfs            1224076      48   1224028   1% /run/user/1000
/dev/sr0         4442656 4442656         0 100% /media/devepere/BOPC_1E1

Isso faz sentido, já que não há realmente um sistema de arquivos no disco: ele foi completamente sobrescrito e ainda não implementei uma tabela FAT no meu bootloader.

root@my_comp:/# parted -ls
Model: ATA HGST HTS721010A9 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system     Name                          
Flags
 1      1049kB  274MB   273MB   fat32           EFI system partition          
boot, esp
 2      274MB   290MB   16.8MB                  Microsoft reserved 
partition  msftres
 3      290MB   589GB   588GB   ntfs            Basic data partition          
msftdata
 5      589GB   987GB   398GB   ext4
 6      987GB   1000GB  12.8GB  linux-swap(v1)
 4      1000GB  1000GB  523MB   ntfs            Basic data partition          
hidden, diag


Model: Generic Flash Disk (scsi)
Disk /dev/sdb: 1028MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1028MB  1027MB  primary


Warning: Unable to open /dev/sr0 read-write (Read-only file system).  
/dev/sr0 has been opened read-only.
Error: /dev/sr0: unrecognised disk label
Model: TSSTcorp CDDVDW SU-228GB (scsi)
Disk /dev/sr0: 4549MB
Sector size (logical/physical): 2048B/2048B
Partition Table: unknown
Disk Flags: 

Eu também esqueci de mencionar que eu tenho um disco de jogo no meu computador, isso é sr0. E não deve estar lendo 'msdos', já que não há uma partição real nela.

root@my_comp:/# lsblk -f
NAME   FSTYPE  LABEL    UUID                                 
MOUNTPOINT
sda                                                          
├─sda1 vfat    SYSTEM   92EA-85A0                            /boot/efi
├─sda2                                                       
├─sda3 ntfs    OS       128AECEA8AECCAF5                     
├─sda4 ntfs    RECOVERY 18565C8D565C6D8E                     
├─sda5 ext4             d59773a2-e22e-4e57-945e-6d447600da16 /
└─sda6 swap             1ac79668-effe-46bc-9f71-6686c3ad8fcf [SWAP]
sr0    iso9660 BOPC_1E  2006-10-12-03-54-00-00               
/media/devepere/BOP

Novamente, não há um sistema de arquivos, então isso faz algum sentido.

root@my_comp:/# lsblk -m
NAME     SIZE OWNER       GROUP MODE
sda    931.5G YANN-MARTEL disk  brw-rw----
├─sda1   260M YANN-MARTEL disk  brw-rw----
├─sda2    16M YANN-MARTEL disk  brw-rw----
├─sda3   548G YANN-MARTEL disk  brw-rw----
├─sda4   499M YANN-MARTEL disk  brw-rw----
├─sda5 370.8G YANN-MARTEL disk  brw-rw----
└─sda6    12G YANN-MARTEL disk  brw-rw----
sr0      4.2G YANN-MARTEL cdrom brw-rw----

Só para esclarecer, estou completamente substituindo o disco regularmente porque é assim que eu testo meu sistema operacional. Não há tabela de partições. Meu problema é que não consigo mais escrever depois de receber este erro: é como se o sistema operacional perdesse toda a capacidade de gravar na unidade USB ou formatá-la de qualquer maneira.

E, a propósito, isso acontece para cada drive USB que eu imaginei, então é definitivamente local para o Ubuntu.

Outras edições ...

1:

Eu usei o aplicativo 'disk' que vem nativo com o linux para testar a formatação do usb. O erro geralmente aparece quando (ou antes) eu faço isso, embora tenha sido conhecido por aparecer algumas vezes logo após a inicialização, e consistentemente quando eu abro a partição da Microsoft no meu disco, caso em que estou usando nautilus, daí um gnome falha na aplicação.

Tudo o que sei é que depois que recebo o erro, o USB não responde às tentativas de gravação. dd será executado e concluído, mas leva muito menos tempo para ser executado e não grava no disco.

2:

Minha imagem contém o setor MBR com o final usual de 0xAA55 , mas NÃO CONTÉM UM SISTEMA DE ARQUIVOS (OU TABELA DE PARTIÇÃO) DE QUALQUER TIPO . Estou criando um SISTEMA OPERACIONAL COMPLETAMENTE NOVO (e bootloader), e ainda não implementei uma tabela de partições porque teria que GRAVÁ-LA MESMO.

3:

Para o registro, lsblk sem flags na verdade mostra o USB como um bloco antes e depois do erro:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
[...]
sdb      8:16   1   980M  0 disk 
[...]

E sim, o tamanho está correto; esta é uma unidade USB bastante antiga. Eu plugo meus 32 gig, eu recebo algo que parece 32 shows.

E aqui está lsblk -f ANTES de o erro mostrado ser acionado por qualquer motivo:

NAME   FSTYPE  LABEL    UUID                              MOUNTPOINT
sda                                                          
├─sda1 vfat    SYSTEM   92EA-85A0                            /boot/efi
├─sda2                                                       
├─sda3 ntfs    OS       128AECEA8AECCAF5                     
├─sda4 ntfs    RECOVERY 18565C8D565C6D8E                     
├─sda5 ext4             d59773a2-e22e-4e57-945e-6d447600da16 /
└─sda6 swap             1ac79668-effe-46bc-9f71-6686c3ad8fcf [SWAP]
sdb                
sr0    iso9660 BOPC_1E  2006-10-12-03-54-00-00    
/media/devepere/BOP

Você pode ver claramente que o disco (sdb) é reconhecido e não possui um sistema de arquivos associado a ele.

Para mais explicações, aqui está o que acontece quando eu tento montar meu disco USB não formatado:

mount: wrong fs type, bad option, bad superblock on /dev/sdb,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

4:

Esta unidade, que usa um carregador de inicialização MBR e não tem nenhum tipo de tabela de partição, é muito difícil de reconhecer pelo meu PC de inicialização de jogos UEFI (que estou usando agora). Como tal, tenho um computador de 'teste' muito mais antigo que só precisa da assinatura de boot para carregar o bootloader na memória, já que eu quero realmente ter algo para inicializar antes de torná-lo inicializável em todas as máquinas.

Como tal, não pode arrancar na maioria das máquinas.

No entanto, eu escrevo código no meu computador normal, compilo-o em uma imagem binária e, em seguida, escrevo a imagem na minha unidade USB. O que eu quis dizer é que, antes de o erro ser acionado, esse processo de criação de imagens funciona bem.

Embora quando o erro ocorre, no entanto, ocorre, a partir desse ponto não consigo escrever para o USB. Este é um problema MAIOR em desenvolvimento, porque praticamente não consigo escrever 10 linhas de código assembly sem testá-lo primeiro, senão gastarei o dobro do tempo depurando o código, porque simplesmente não tenho idéia de onde deu errado.

Obrigado pelo seu tempo, sei que este post é extremamente longo.

    
por user2624583 11.10.2017 / 03:34

1 resposta

0

Descobri que a causa do problema é que às vezes eu esqueci de conectar meu USB ao usar dd , ou a porta USB estava solta.

Eu adicionei as seguintes linhas ao script de shell que eu estava usando que compilou meu programa e executei o comando dd :

lsusb -d 0781:5530
! [[ $? = 0 ]] && { echo "please plug in the sandisk cruzer usb before proceeding"; exit 1; }

Uma explicação longa e detalhada:

lsusb lista todos os USBs disponíveis, ou um subconjunto deles dependendo dos seus argumentos. Eu recebo o usb pelo número específico do produto, o que significa que só posso usar um usb específico, a menos que eu mude o valor. Por exemplo, esse número em particular corrales com meu sandisk cruzer, então eu só posso conectar aquele em menos que eu execute lsusb sem argumentos, verifique onde meu usb está, e pegue o ID e o substitua pelo antigo. / p>

Se lsusb não encontrar o dispositivo específico, ele retornará com um código de erro. O $? contém esse código de erro e, em geral, é em script de shell que o código de saída do processo foi executado pela última vez. Processos Linux (e outros, como eu imagino) retornam 0 em sucesso, então em uma execução malsucedida (o usb não está conectado), ele retornará algo diferente de 0.

O [[ (condition) ]] representa um condicional no bash scripting, e o ! representa o operador NOT, em outras palavras, se a condição retornou true ou false, o ! retornará o oposto. Nota: não use == ao comparar.

O operador && basicamente diz executar o que estiver à direita do programa, se a condicional anterior for verdadeira. || funciona da mesma maneira, exceto quando a condição retorna false, a propósito.

{ (command); (command); ... } é um bloco de comandos para executar um após o outro. A saída do primeiro comando não alimenta o segundo; é como uma lista. Você também pode fazer uma função atingir o mesmo propósito.

echo é o mesmo que sempre foi: apenas mostra o texto usado como argumento.

exit 1 termina o programa com um código de erro de 1 (porque falhou). Ele vem por último porque você quer que o eco seja executado ANTES de terminar o programa.

    
por user2624583 22.10.2017 / 19:39