Eu tenho um sistema de inicialização dupla com este layout de partição:
# fdisk -l
Disk /dev/sda: 596.2 GiB, 640135028736 bytes, 1250263728 sectors
Disk model: SAMSUNG HM640JJ
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: 0x08c427b9
Device Boot Start End Sectors Size Id Type
/dev/sda1 80325 30800324 30720000 14.7G 7 HPFS/NTFS/exFAT
/dev/sda2 30800325 440400559 409600235 195.3G 7 HPFS/NTFS/exFAT
/dev/sda3 440403966 1132820479 692416514 330.2G f W95 Ext'd (LBA)
/dev/sda4 * 1132820480 1250263039 117442560 56G 83 Linux
/dev/sda5 440403968 1116043263 675639296 322.2G 7 HPFS/NTFS/exFAT
/dev/sda6 1116045312 1132820479 16775168 8G 82 Linux swap / Solaris
Partition table entries are not in disk order.
e é MBR de acordo com parted
e gdisk
. Depois de instalar o linux, nunca inicializei no Windows novamente e fiz backup regularmente de toda a partição 60G do linux e dos primeiros 63 setores do HDD usando dd
um HDD externo enquanto inicializo a partir de uma imagem linux ao vivo.
dd if=/dev/sda4 of=linux.img bs=4096 conv=fdatasync
dd if=/dev/sda of=boot.img bs=512 count=63 conv=fdatasync
depois que meu linux quebrou (pela primeira vez), tentei restaurá-lo usando o inverso acima da inicialização do live então
dd if=linux.img of=/dev/sda4 bs=4096 conv=fdatasync
dd if=boot.img of=/dev/sda bs=512 conv=fdatasync
dd
não relatou nenhum erro e a partição linux foi recuperada conforme o esperado. no entanto, não consegui inicializar (o sistema estava mantendo a reinicialização, pois havia algo errado com o Grub, um cursor piscando e uma reinicialização repentina repetidamente). Finalmente inicializado novamente usando live then chroot
e grub-install
. depois disso, consegui inicializar novamente normalmente.
Eu faço backup dos primeiros 63 setores porque o Grub usa lá para a imagem principal (se não estiver errado). e a primeira coisa que fiz após a inicialização foi despejar lá para um arquivo newboot.img, então:
diff boot.img newboot.img
não retornou nada, o que significa que mesmo após a reinstalação do grub, essa área é a mesma.
- Qual é a causa raiz de não poder inicializar neste caso?
- Como devo fazer o backup (evitando terceiros)?
Até onde eu sei, nenhuma partição muda, nenhum UUID... ambas as imagens criadas juntas. O código grub pode continuar em algum lugar após o setor 63? onde e quanto tempo?
Obrigada.
Você está fazendo backup do Master Boot Record e de 62 outros setores, portanto, 31,5 kilobytes. Mas a parte do GRUB2 incorporada na primeira faixa do disco após o MBR pode facilmente ser maior que isso.
Sim, você pode ter verificado o tamanho
/boot/grub/i386-pc/core.img
e encontrado menor do que isso. Mascore.img
não é tudo o que fica embutido no espaço entre o MBR e o início da primeira partição. No mínimo, o GRUB2 moderno também incorpora alguns módulos GRUB:fshelp.mod
, um módulo de suporte genérico para vários sistemas de arquivospart_msdos.mod
, suporte à tabela de partição MBR/boot
diretório Linux.No meu sistema, o tamanho total
core.img
e desses módulos mínimos, assumindo que seu/boot
sistema de arquivos é ext2/3/4 (ou seja, suportado porext2.mod
que é bem pequeno) chega a um pouco mais de 36 kilobytes. Sua distribuição Linux pode optar por incorporar mais módulos para fornecer mais funcionalidades: os módulos listados acima são um conjunto muito básico.Os módulos podem ser compactados com o algoritmo LZMA para manter o tamanho total baixo, mas o GRUB2 moderno também usa códigos de correção de erros Reed-Solomon para proteger o código incorporado de erros de bits, o que aumenta o tamanho novamente.
Eu tenho tentado desenvolver um programa para detectar vários gerenciadores de inicialização e ler sua configuração de baixo nível para fins de diagnóstico/forense. Como se vê, tenho duplicado essencialmente a funcionalidade de
bootinfoscript
(com algumas diferenças). Mas se eu estiver lendo as estruturas no disco corretamente, o tamanho total do código GRUB2 embutido no meu sistema é de 102 setores, então 51 kilobytes.