No Ubuntu ISO MBR, por que uma partição GPT se sobrepõe à partição de inicialização e torna o MBR não editável?

5

Pergunta e contexto:

Na tabela de partição de MBR de distros, como por exemplo, ubuntu-16.04-desktop-amd64.iso, por que uma partição GPT parece sobrepor-se à partição de inicialização principal? Isso parece gerar erros se eu tentar, de alguma forma, editar a tabela de partições.

Eu quero editar o MBR para adicionar persistência de USB (como descrito em outro lugar), e deve adicionar uma partição ou ampliar a partição de inicialização.

Acredito que isso costumava funcionar, mas a partição GPT # 2 sobreposta nesta e em outras distros parece confundir mal fdisk, sfdisk, parted, gparted e partprobe.

Minha máquina é uma MBR e não uma bios GPT.

O que estou perdendo?

Aqui está a tabela de partições MBR da distribuição (diretamente do arquivo ISO):

cat ubuntu-16.04-desktop-amd64.iso | xxd | head -32 | tail -5

dá:

00001b0: 28db 2b00 0000 0000 708e 0e0e 0000 8000  (.+.....p.......
00001c0: 0100 0058 e0fa 0000 0000 6048 2c00 00fe  ...X......'H,...
00001d0: ffff effe ffff 4411 2c00 8012 0000 0000  ......D.,.......
00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.

(Para decodificar, veja link .)

  • A tabela começa no endereço 01be, onde você vê "80", para a partição de inicialização primária # 1.

  • Em seguida, observe o "ef" no endereço 01d2, que denota a partição primária # 2 como sendo type = GPT.

Aqui está um detalhamento da tabela por partição (little endian):

partition#1 (normal MBR):
  80        = 'boot' partition flag
  00 01 00  = starting HSC (head, sector, cylindar)
  00        =  partition type ("Empty partition entry")
  58 e0 fa  = last     HSC (head, sector, cylindar)

  0000 0000 = LBA (logical block address) of first absolute sector in the 
  6048 2c00 = number of sectors in partition

partition #2 (GPT):
  00        = non-boot partition
  fe ff ff  = starting HSC (head, sector, cylindar)
  ef        = partition type ("EFI system partition")
  fe ff ff  = last HSC

  4411 2c00 = LBA (logical block adr) of first abs sector in part.
  8012 0000 = number of sectors in partition

Tenta editar a tabela de partições:

  • fdisk informa que essas partições se sobrepõem. Observe como o início de sdb2 [2927216] está dentro de sdb1 [0-2955679] de

    sudo fdisk -l /dev/sdb
    

    dá:

      Disk /dev/sdb: 14.5 GiB, 15527313408 bytes, 30326784 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: dos
      Disk identifier: 0x40a863e7
    
      Device     Boot   Start     End Sectors  Size Id Type
      /dev/sdb1  *          0 2955679 2955680  1.4G  0 Empty
      /dev/sdb2       2927216 2931951    4736  2.3M ef EFI (FAT-12/16/32)
    
  • Pelo que li, não há problema em ter uma partição GPT, mas não em as partições se sobreporem.

  • Quando tento inserir o iso em um pendrive, o problema começa. O stick inicializa o Ubuntu em tempo real, mas não consigo editar a tabela de partição sem erros (ou seja, quando não inicializado e não montado), não importa qual editor de partição eu tente.

  • Além disso, não posso nem mesmo excluir a tabela de partições e retornar o pendrive para o normal sem o seguinte procedimento demorado:

    dd if=/dev/zero of=/dev/sdb bs=[something like 512 or 2048; doesn't matter] count=[some large number like 100000^]
    

    ^ Números menores nem sempre parecem corrigir isso. Eu suspeito que você precisa não apenas eliminar os blocos fs primários, mas também os secundários.

    e, em seguida, use fdisk para criar uma nova tabela de partição ms-dos no bastão.

    Note, se eu não fizer o dd acima para limpar antes de criar uma nova tabela de partição, recebo a seguinte mensagem de erro ou similar quando tento editar o mapa de partição (do debian8 ou ubuntu-16):

    Libparted Warning The driver descriptor says the physical block size
    is 2048 bytes, but Linux says it is 512 bytes.
    
  • Também do ubuntu-12, recebo esta mensagem mais esclarecedora :

    gparted -l /dev/sdb:  libparted : 2.3 Could not stat device -l -- No
    such file or directory. /dev/sdb contains GPT signatures, indicating
    that it has a GPT table.  However, it does not have a valid fake msdos
    partition table, as it should.  Perhaps it was corrupted -- possibly
    by a program that doesn't understand GPT partition tables.  Or perhaps
    you deleted the GPT table, and are now using an msdos partition table.
    Is this a GPT partition table?  Both the primary and backup GPT tables
    are corrupt.  Try making a fresh table, and using Parted's rescue
    feature to recover partitions.
    

Então, como edito o MBR da distribuição?

BTW, eu não estou perguntando como consertar a sobreposição, já que esta é a maneira que a distro realmente é, e pela aparência dela, tem sido por algum tempo, (eu também olhei para Ub-v16, 14 e 12), estou procurando descobrir como editá-lo, se possível.

Idéias:

  • Isso pode ser causado por muitos aplicativos de isohybrid (usados para adicionar um MBR ms-dos a um CDROM 9660 iso para que ele possa inicializar em um USB)?

  • Existe outro editor de tabela de partições, possivelmente mais recente, para usar?

  • Existe uma distro Ubuntu diferente, talvez mais antiga, que não tem esse problema?

por Eliptical view 20.08.2016 / 23:55

2 respostas

2

Solução alternativa

Você pode ajustar os tamanhos das partições do seu pen drive, se ao invés de usar uma ferramenta USB para criar o stick, você constrói seu pen drive a partir do zero usando apenas terminal comandos. Aqui estão instruções detalhadas que funcionam se o seu sistema usa o BIOS:

Como criar uma unidade USB Ubuntu ao vivo com persistência para BIOS usando apenas o terminal

Uso Dicas para fazer backup usando um pendrive: Eu mantenho dois sticks USB-backup idênticos que eu uso para fazer backup do meu sistema principal de boot duplo W10 da Debian. Eu quero que meu sistema não seja executado quando eu estiver fazendo o backup. Eu também quero dois bastões idênticos, porque às vezes um pendrive se desgasta. Isso permite que eu faça facilmente um novo apenas por uma cópia do restante do stick para um novo stick.

Eles me salvaram mais de uma vez quando meu sistema ficou tão quebrado que não consegui consertá-lo! E os procedimentos incrementais de backup e restauração que incluo neste link acima também são bem rápidos. Você deve, no entanto, fazer um backup completo de tempos em tempos, já que é possível que o seu incremental atual não funcione quando você quiser, porque uma falha do sistema foi gravada nele, corrompendo-o. Eu agora tento fazer um backup completo semanalmente.

    
por Eliptical view 30.10.2016 / 13:54
9

Os arquivos de imagem .iso do Ubuntu usam o formato Monster de Frankenstein, projetado para dar suporte a vários métodos e dispositivos de inicialização:

  • Mídia de inicialização
    • Escrevendo a imagem em um DVD para inicializar usando ISO-9660 e El Torito
    • Copiando a imagem "raw" para uma unidade flash USB ou mídia similar para inicializar usando sistemas convencionais de particionamento de disco
  • Modo de inicialização
    • Inicialização no modo BIOS
    • Inicialização no modo EFI

Para trabalhar com tantos formatos e métodos de inicialização, os desenvolvedores jogam com as estruturas de dados. Essas imagens realmente não devem ser tratadas como imagens de disco "normais" e, em particular, você deve enfaticamente NÃO tentar modificar as imagens de qualquer maneira, a menos que você seja um especialista de alto nível nessas estruturas de dados. FWIW, eu escrevi a ferramenta de particionamento fdisk ( gdisk , cgdisk e sgdisk ) da GPT, e I não tentaria o que você diz que está tentando!

Em vez disso, se você precisar modificar a mídia de instalação, deverá fazer uma das duas coisas:

  • Use uma ferramenta como Rufus , Pen Drive Linux ou UNetbootin para gravar o arquivo de imagem em uma unidade flash USB e modificar a unidade flash USB. A razão pela qual isso funciona é que essas ferramentas não fazem uma simples cópia do conteúdo da imagem para o disco em dd ; em vez disso, eles pegam os arquivos da imagem e os copiam para um disco particionado convencionalmente com um sistema de arquivos pré-existente (ou às vezes um que o ferramenta cria). O resultado é um disco mais normal que pode ser modificado com editores de tabelas de partição normais e outros utilitários.
  • Prepare sua própria imagem personalizada. Eu não tenho ponteiros para documentação sobre como fazer isso, mas as imagens do Ubuntu são, obviamente, criadas por ferramentas automatizadas, não pela edição manual de tabelas de partição com editores hexadecimais. Se você rastrear as ferramentas e os scripts usados para criar as imagens, poderá criar uma imagem que seja modificada da maneira desejada. Essa abordagem é usada por pessoas que criam "spins" do Ubuntu, então você pode querer começar procurando documentação sobre como fazer isso.

Destas duas abordagens, a primeira é provavelmente a melhor para o que você deseja. Na verdade, tenho certeza que algumas ferramentas desse tipo oferecem uma opção para fazer exatamente o que você deseja. (Eu não lembro quais ferramentas oferecem esse recurso, no entanto.) A segunda abordagem é mais provável de ser útil para tarefas como adicionar pacotes a uma imagem de instalação personalizada.

Se você já foi capaz de fazer esse tipo de coisa antes, é provável que tenha mudado porque os desenvolvedores descobriram a necessidade de fazer um hack mais monstruoso de uma estrutura de dados para resolver problemas com sistemas específicos. Por exemplo, se os computadores da Brand X não conseguem analisar a tabela de partições do Frankenstein's Monster, os desenvolvedores podem ajustá-la para funcionar com computadores da marca X, mesmo que isso signifique que a estrutura de dados é ainda mais estranha do que antes. Isso é apenas especulação da minha parte, e eu certamente não posso falar com os detalhes que você descreveu.

    
por Rod Smith 21.08.2016 / 02:13