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?