É possível gravar uma imagem ao vivo em um pendrive danificado?

1

Eu tenho um pendrive de 16G que tem alguns blocos ruins:

# f3read /media/morfik/224e0447-1b26-4c3e-a691-5bf1db650d21
                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.h2w ... 2097112/       40/      0/      0
Validating file 2.h2w ... 2097120/       32/      0/      0
Validating file 3.h2w ... 2097098/       54/      0/      0
Validating file 4.h2w ... 2097148/        4/      0/      0
Validating file 5.h2w ... 2097114/       38/      0/      0
Validating file 6.h2w ... 2097152/        0/      0/      0
Validating file 7.h2w ... 2097152/        0/      0/      0
Validating file 8.h2w ... 2097152/        0/      0/      0
Validating file 9.h2w ... 2097152/        0/      0/      0
Validating file 10.h2w ... 2097152/        0/      0/      0
Validating file 11.h2w ... 2097152/        0/      0/      0
Validating file 12.h2w ... 2097152/        0/      0/      0
Validating file 13.h2w ... 2097152/        0/      0/      0
Validating file 14.h2w ... 2097152/        0/      0/      0
Validating file 15.h2w ...   90664/        0/      0/      0

  Data OK: 14.05 GB (29450624 sectors)
Data LOST: 84.00 KB (168 sectors)
             Corrupted: 84.00 KB (168 sectors)
      Slightly changed: 0.00 Byte (0 sectors)
           Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 18.77 MB/s

Como você pode ver, apenas os primeiros cinco shows tiveram setores danificados. O resto está bem. O problema é quando eu tento gravar uma imagem ao vivo para este pendrive, a ação pára depois de transferir 50 MiB.

Existe uma maneira de pular o 5G desde o começo e colocar a imagem após o espaço danificado, para que ela possa ser inicializada sem problemas?

    
por Mikhail Morfikov 10.06.2015 / 21:08

2 respostas

1

Consegui resolver este problema, mas ainda me pergunto se existe uma solução melhor e mais fácil.

De qualquer forma, se você tiver blocos ruins no início do dispositivo e não conseguir gravar uma imagem ao vivo, faça duas partições:

Em seguida, você faz o download de uma imagem e verifica o deslocamento da primeira partição:

# parted  /home/morfik/Desktop/debian-live-8.1.0-amd64-mate-desktop.iso
(parted) unit s

(parted) print
Model:  (file)
Disk /home/morfik/Desktop/debian-live-8.1.0-amd64-mate-desktop.iso: 2015232s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End       Size      Type     File system  Flags
 1      64s    2015231s  2015168s  primary               boot, hidden

Portanto, são 64 setores, o que significa 64 * 512 = 32768 bytes. Agora podemos montar esta imagem:

# mount -o loop,offset=32768 /home/morfik/Desktop/debian-live-8.1.0-amd64-mate-desktop.iso /mnt
 mount: /dev/loop0 is write-protected, mounting read-only

# ls -al /mnt
total 593K
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:09:57 ./
drwxr-xr-x 24 root root 4.0K 2015-06-08 20:54:43 ../
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:08:34 .disk/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 15:59:10 dists/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:09:41 install/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:08:29 isolinux/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:08:29 live/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 15:59:00 pool/
dr-xr-xr-x  1 root root 2.0K 2015-06-06 16:09:37 tools/
-r--r--r--  1 root root  133 2015-06-06 16:09:44 autorun.inf
lr-xr-xr-x  1 root root    1 2015-06-06 15:59:10 debian -> ./
-r--r--r--  1 root root 177K 2015-06-06 16:09:44 g2ldr
-r--r--r--  1 root root 8.0K 2015-06-06 16:09:44 g2ldr.mbr
-r--r--r--  1 root root  28K 2015-06-06 16:09:57 md5sum.txt
-r--r--r--  1 root root 360K 2015-06-06 16:09:44 setup.exe
-r--r--r--  1 root root  228 2015-06-06 16:09:44 win32-loader.ini

Temos acesso aos arquivos para que possamos copiá-los para a segunda partição do prendrive:

# cp -a /mnt/* /media/morfik/good

O comando a seguir codificará a segunda partição no MBR para inicializar a partir dela:

printf '\x2' | cat /usr/lib/SYSLINUX/altmbr.bin - | dd bs=440 count=1 iflag=fullblock conv=notrunc of=/dev/sdb

Eu estou usando o sistema de arquivos ext4 na segunda partição, então eu tenho que usar o extlinux, mas a imagem tem o isolinux. Eu não tenho que remover essa pasta, eu posso mudar o nome dela:

# mv isolinux extlinux

A mesma coisa que tenho a fazer com o arquivo de configuração dentro dessa pasta:

# mv isolinux.cfg extlinux.conf

Não tenho certeza se essa etapa é necessária, mas sempre copio todos os arquivos de qualquer maneira:

# cp /usr/lib/syslinux/modules/bios/* /media/morfik/good/extlinux/

A última coisa é instalar o VBR do extlinux na segunda partição:

# extlinux -i /media/morfik/good/extlinux/
/media/morfik/good/extlinux/ is device /dev/sdb2 

E isso é muito bonito. Eu testei a imagem, ele inicializa e o sistema ao vivo funciona bem. Esta solução deve funcionar para todos os tipos de imagens ao vivo.

    
por 10.06.2015 / 22:50
1

Se houver espaço suficiente no início da unidade para instalar o GRUB (ou qualquer outro carregador de inicialização realmente) e o LiveCD suportar ISO de montagem em loop, você poderá criar um sistema de arquivos com os blocos defeituosos mapeados ou você pode particionar para evitar maus bloqueios em primeiro lugar.

Exemplo de entrada de inicialização grub.cfg para um Live CD do Ubuntu:

menuentry "Ubuntu 15.04 Desktop amd64" {
    set isofile="ubuntu-15.04-desktop-amd64.iso"
    loopback loop (hd0,msdos3)/$isofile
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=/$isofile noprompt noeject
    initrd (loop)/casper/initrd.lz
}

Então, o GRUB2 é muito chique, pois extrai até mesmo o kernel e o initramfs diretamente do arquivo ISO. Mas esse recurso é totalmente supérfluo se, além do ISO, você montar o próprio laço e copiar o kernel e os arquivos initramfs autônomos, para que você tenha três arquivos no arquivo /boot : kernel, initramfs e iso.

Dessa forma, você pode usar qualquer gerenciador de inicialização de sua escolha, portanto, em outro gerenciador de inicialização, pode ser assim:

linux vmlinuz.efi boot=casper iso-scan/filename=ubuntu-15.04-desktop-amd64.iso noprompt noeject
initrd initrd.lz

Os parâmetros são diferentes para cada tipo de CD, já que a montagem de loop e a busca de arquivo iso são gerenciadas pelo próprio initramfs do Live CD.

Normalmente, essa técnica é usada para colocar um grande número de CDs ao vivo em um único pendrive. Acontece que ele também trabalha para evitar regiões de bloqueio incorretas (se particionado / formatado corretamente).

    
por 10.06.2015 / 21:24