Pergunta geral sobre 'dd', imagens iso e dispositivos linux

1

Eu tenho uma imagem iso (é um disco de instalação do windows), mas eu não quero gravar o dvd. Eu quero criar uma unidade flash USB inicializável em seu lugar. E eu quero usar ferramentas do Linux para realizar essa tarefa.

Encontrei várias receitas, elas sugerem usar a ferramenta dd da seguinte forma:

dd if=/path/to/my.iso of=/dev/sdx

(por exemplo, link )

Outra receita sugere a criação de algumas partições no usb primeiro (fe Terminal: crie USB inicializável a partir de iso ) e isso parece muito estranho para mim.

Pelo que entendi, o flash drive é apenas um armazenamento. É apenas um hardware que armazena / retorna um bloco de dados, dado o índice desse bloco. Está correto?

O Linux fornece acesso a esse armazenamento via /dev/sdx device (onde x pode ser qualquer letra, no meu caso o nome do dispositivo é /dev/sdb ). Eu posso ter acesso a qualquer bit de dados no stick USB através deste dispositivo. Está correto?

O comando dd apenas lê o conteúdo do arquivo, bit por bit (bem, bloco por bloco) e grava os dados no dispositivo especificado. Se o arquivo de entrada for grande o suficiente, cada bit de dados no stick USB será sobrescrito. Nenhuma informação sobre partições, tipos de sistema de arquivos, etc. sobreviveria. Isso está correto? Se sim, o que é usado para particionar / formatar o stick USB antes do comando dd ?

O resultado do comando dd não é o que eu esperava. Após a conclusão, posso ver os arquivos no pendrive da minha máquina linux, mas o pendrive não é inicializável e minhas janelas não conseguem lê-lo (sugere-se formatar a unidade USB).

Vou usar alguma ferramenta para criar o stick usb inicializável (rufus ou yumi ou qualquer outra coisa), não é um problema agora. O problema é que eu não entendo porque não posso usar dd para esse propósito.

Podem as receitas acima mencionadas funcionar não para todas as imagens iso? Por favor me ajude a entender o que está acontecendo.

    
por lesnik 19.06.2018 / 15:10

3 respostas

2

Clonagem e extração

I have an iso image (it's a windows installation disk), but I do not want to burn dvd. I want to create a bootable usb flash drive instead. And I want to use linux tools to accomplish this task.

I have found several recipes, they suggest using dd tool as follows:

dd if=/path/to/my.iso of=/dev/sdx

Isso é clonagem (feita com dd e outras ferramentas de clonagem.

(f.e. here https://www.linux.com/blog/how-burn-iso-usb-drive)

Another recipe suggest to create some partitions on usb first (f.e. Terminal: create bootable USB from iso ) and this looks very strange to me.

Isso é feito com ferramentas de extração.

Tanto a clonagem quanto a extração são métodos possíveis e comuns. Existem várias ferramentas para ambos os métodos.

Se o arquivo iso é um arquivo iso híbrido, você pode fazer uma unidade de inicialização gravando em um disco de CD / DVD e clonando em um dispositivo de armazenamento em massa: USB pendrive, cartão de memória, HDD ou SSD. Se o arquivo iso não for um arquivo iso híbrido, você poderá criar uma unidade de inicialização gravando em um disco de CD / DVD, mas isso não funcionará em um dispositivo de armazenamento em massa. Mas você ainda pode usar uma ferramenta de extração para criar um dispositivo de inicialização (criando a tabela de partição correta e extrair o conteúdo relevante do arquivo iso para um dispositivo de armazenamento em massa).

As I understand the flash drive is just a storage. It's just a hardware which stores/returns a block of data given the index of this block. Is it correct?

Sim.

Linux provides access to this storage via /dev/sdx device (where x may be any letter, in my case device name is /dev/sdb). I can get access to any bit of data on usb stick via this device. Is this correct?

Sim.

The dd command just reads the contents of file bit by bit (well, block by block) and writes the data to specified device. If the input file is large enough every single bit of data on the usb stick will be overwritten. No information about partitions, filesystem's types, etc. would survive. Is this correct? If yes, what's use to partition/format usb stick before dd command?

Sim, e por esse motivo, você não precisa particionar / formatar o pendrive antes da clonagem. Todos os vestígios disso desaparecerão de qualquer maneira.

The result of dd command is not what I expected. After it's complete I can see the files on the usb stick from my linux machine, but the stick is not bootable and my windows can't read it at all (it suggest to format the usb drive).

A maioria das principais distribuições Linux fornece arquivos iso híbridos, que fazem unidades de boot USB quando clonadas. Mas nem todos eles, por exemplo, não o Knoppix (mas você pode tratar um arquivo iso do Knoppix com isohybrid ).

Os arquivos ISO do Windows 7-10 não são arquivos iso híbridos. Então você precisa de um método de extração (manual ou com uma ferramenta) para criar uma unidade de inicialização USB.

I'll use some tool to create the bootable usb stick (rufus or yumi or whatever else), it's not a problem now. The problem is that I do not understand why can't I use dd for this purpose.

May be the above-mentioned recipes work not for all iso images? Please help me to understand what's going on.

Links

help.ubuntu.com/community/Installation/iso2usb

  • Drives - dispositivos de armazenamento em massa
  • Clonagem e extração
  • Faça você mesmo (o que ajuda a entender o que está acontecendo)

A clonagem não precisa de preparação

  • dd merece o destruidor de discos dos apelidos 'e' destruidor de dados '
  • Ferramentas com um ponto de verificação final
  • Se a clonagem não funcionar
por 19.06.2018 / 18:13
1

Como você usa dd é determinado pela forma como o arquivo .iso é criado.

The dd command just reads the contents of file bit by bit (well, block by block) and writes the data to specified device. If the input file is large enough every single bit of data on the usb stick will be overwritten.

Isso está correto, mas e se eu executar dd if=/dev/sdb1 of=test.iso ao criar o .iso ? Ou talvez tenha executado algo como dd if=/dev/sdb of=test.iso bs=1M seek=1 fazendo com que ele pule o primeiro 1M de dados?

dd não se importa com o esquema de partição subjacente, isso significa que o modo como você o utiliza depende inteiramente da estrutura do dispositivo de bloco e dos dados que você está escrevendo.

    
por 19.06.2018 / 15:28
1

Se você dd para o dispositivo, perderá o espaço livre do usb, pois o dd'ing substituirá o MBR / GPT.

Particionar seu dispositivo pode permitir que você grave sua imagem em uma partição, permitindo que você mantenha seu espaço livre. Mas você precisará tweek seu gerenciador de inicialização (grub?) Para poder iniciar a partir dessa partição. Se você particionar sua unidade, você terá sdx1, sdx2, ... permitindo que você use dd if=your.iso of=/dev/sdx1 ou a partição desejada.

O problema aqui é que você quer fazer isso com um disco de instalação do Windows, e isso pode ser um problema. Se o Windows espera uma unidade de DVD para a instalação, ela pode não inicializar ou você pode precisar alterar essa imagem para evitar essa verificação. No Linux as coisas são mais fáceis já que muitas distribuições permitem iniciar o iso em si, outras podem precisar de alguns hacks para poder ter um único USB com muitas distros que você pode iniciar.

    
por 19.06.2018 / 16:19

Tags