sábado, 23 de novembro de 2013

Dual boot em UEFI: Windows não oculta partições Linux

Com BIOS e o particionamento MBR, os instaladores das distribuições, através da libparted, configuram o identificador das partições Linux como 83 ou 82 (swap). O Windows oculta no Explorer esses volumes pois sabe não tratarem-se de sistemas de arquivos que ele conheça.

O particionamento GPT também tem um identificador de tipo, no formato GUID, que a libblkid chama de PART_ENTRY_TYPE (blkid -p /dev/<partição>).

Até a versão 3.1 — no momento, última estável —, a libparted, ao serem criadas partições em GPT para sistemas de arquivos Linux, configura seus identificadores com o mesmo GUID do Windows: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 ("Microsoft Basic Data"). Por isso, o Windows exibe os volumes Linux no Explorer e diz que o sistema de arquivos é "Raw", pois simplesmente não entende EXT4, XFS, ou qualquer coisa que não seja FAT ou NTFS (ou ReFS a partir do Windows 8.1).

Partições Linux swap não são problema, pois a libparted cria-as com o GUID exclusivo 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F.

Foi padronizado que o identificador para partições Linux em GPT é 0FC63DAF-8483-4772-8E79-3D69D8477DE4 ("Linux Filesystem"). A libparted 3.2 ou superior usará esse GUID automaticamente ao criar partições. Para voltar a usar o GUID "Microsoft Basic Data", a flag msftdata foi adicionada (parted -s /dev/<disco> -- set <partição> msftdata on).

Já que o parted 3.2 ainda não foi lançado, precisamos usar outra ferramenta para consertar esse comportamento inadequado. Perigoso até, pois o Windows Explorer pergunta se você quer formatar o volume por ele desconhecido ao clicar na unidade. Entra o (s)gdisk para o resgate.

Aqui um dual boot Windows 7/Fedora 20 (sem swap):

# gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2029 sectors (1014.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  EFI system partition
   2          206848          468991   128.0 MiB   0C01  Microsoft reserved part
   3          468992       894853119   426.5 GiB   0700  Basic data partition
   4       894853120       976773119   39.1 GiB    0700

A segunda e terceira partições são do Windows. A quarta é onde está o Fedora (em EXT4). Veja que o identificador (coluna "Code") é o mesmo do volume NTFS do Windows. Use, se necessário para ajudar a identificação, parted -l /dev/<disco> para obter o sistema de arquivos de cada partição.

O (s)gdisk, para facilitar, mapeia cada GUID a um código hexadecimal de quatro caracteres. Liste-os com:

$ sgdisk -L
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE          
4100 PowerPC PReP boot     4200 Windows LDM data      4201 Windows LDM metadata
7501 IBM GPFS              7f00 ChromeOS kernel       7f01 ChromeOS root       
7f02 ChromeOS reserved     8200 Linux swap            8300 Linux filesystem    
8301 Linux reserved        8302 Linux /home           8400 Intel Rapid Start   
8e00 Linux LVM             a500 FreeBSD disklabel     a501 FreeBSD boot        
a502 FreeBSD swap          a503 FreeBSD UFS           a504 FreeBSD ZFS         
a505 FreeBSD Vinum/RAID    a580 Midnight BSD data     a581 Midnight BSD boot   
a582 Midnight BSD swap     a583 Midnight BSD UFS      a584 Midnight BSD ZFS    
a585 Midnight BSD Vinum    a800 Apple UFS             a901 NetBSD swap         
a902 NetBSD FFS            a903 NetBSD LFS            a904 NetBSD concatenated 
a905 NetBSD encrypted      a906 NetBSD RAID           ab00 Apple boot          
af00 Apple HFS/HFS+        af01 Apple RAID            af02 Apple RAID offline  
af03 Apple label           af04 AppleTV recovery      af05 Apple Core Storage  
be00 Solaris boot          bf00 Solaris root          bf01 Solaris /usr & Mac Z
bf02 Solaris swap          bf03 Solaris backup        bf04 Solaris /var        
bf05 Solaris /home         bf06 Solaris alternate se  bf07 Solaris Reserved 1  
bf08 Solaris Reserved 2    bf09 Solaris Reserved 3    bf0a Solaris Reserved 4  
bf0b Solaris Reserved 5    c001 HP-UX data            c002 HP-UX service       
ea00 Freedesktop $BOOT     eb00 Haiku BFS             ed00 Sony system partitio
ef00 EFI System            ef01 MBR partition scheme  ef02 BIOS boot partition 
fb00 VMWare VMFS           fb01 VMWare reserved       fc00 VMWare kcore crash p
fd00 Linux RAID

Então, para resolver o problema, veja o número da partição Linux reportado por gdisk -l /dev/<disco> (coluna "Number") e rode:

# sgdisk -t <partição>:<tipo> /dev/<disco>

No meu caso:

# sgdisk -t 4:8300 /dev/sda

Versões recentes do fdisk (parte da suíte util-linux) suportam GPT e poderiam ser usadas para a tarefa. Prefiro, contudo, o gdisk até o suporte ficar mais maduro no fdisk. Sem contar que o sfdisk, sua versão scriptável, não foi portado ainda para usar a libfdisk e, portanto, não suporta GPT.

Assim, o Windows não exibirá mais os volumes contendo sistemas de arquivos Linux no Explorer.

Nenhum comentário:

Postar um comentário