Processo de inicialização Raspbian e a tabela de partição

13

Alguma boa descrição do processo de inicialização do Raspberry Pi e da estrutura da partição do disco?

O que é armazenado em cada partição (e por que)?

O RPI inicializa a partir do cartão SD (setor zero) ou o firmware lê da estrutura do disco?

Suponho que, sendo o NOOBS criado copiando alguns arquivos sob qualquer sistema operacional, o firmware do RPI conhece a estrutura de disco do MS-DOS (alto nível) e encontra o caminho para a memória SD.

Quero clonar um bom cartão SD para um cartão SD maior para aumentar o espaço disponível.
Posso criar e particionar um novo SD e apenas DD cada partição para o novo dispositivo? Quais partições são necessárias?

A 'linux'partição no novo dispositivo deve ser maior que o original e aumentar o espaço em disco?

Talvez clone em um novo cartão e estenda apenas a última partição (p6) para usar o espaço disponível, mas eu não quero usar um método de tentativa e erro, gostaria de saber como e por quê.

Por que minha pergunta?

A maioria dos cartões RPI SD possui duas partições (fdisk), talvez quando instaladas a partir de um arquivo .img

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        2048   155647   153600   75M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      157696 15351807 15194112  7.3G 83 Linux

No entanto, eu tenho um com até 6 partições, essa é a estrutura herdada do NOOBS.

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192     1675781      833795    e  W95 FAT16 (LBA)
/dev/mmcblk0p2         1679360    15499263     6909952   85  Linux extended
/dev/mmcblk0p3        15499264    15564799       32768   83  Linux
/dev/mmcblk0p5         1687552     1810431       61440    c  W95 FAT32 (LBA)
/dev/mmcblk0p6         1818624    15499263     6840320   83  Linux

Eu acho que algo está errado com essa imagem. Duas partições W95?

Eu gostaria de clonar apenas as partições corretas para um novo cartão. Eu tenho muito trabalho neste SD em execução para começar tudo de novo! (BTW eu tenho alguns bons backups).

Algumas notas.

Partição p1

-rwxr-xr-x 1 root root  18K 2015-03-09 04:45 bootcode.bin
-rwxr-xr-x 1 root root 2.2K 2015-03-09 04:45 INSTRUCTIONS-README.txt
drwxr-xr-x 4 root root  32K 2015-03-09 04:45 os
...
-rwxr-xr-x 1 root root 542K 2015-03-09 04:45 recovery.elf
-rwxr-xr-x 1 root root    0 2015-03-09 04:45 RECOVERY_FILES_DO_NOT_EDIT
-rwxr-xr-x 1 root root 2.1M 2015-03-09 04:45 recovery.img
-rwxr-xr-x 1 root root  20M 2015-03-09 04:45 recovery.rfs
-rwxr-xr-x 1 root root 9.5K 2015-03-09 04:45 riscos-boot.bin
drwxr-xr-x 2 root root 8.0K 2015-12-05 18:13 System Volume Information

Partição p2

mount: /dev/mmcblk0p2: can't read superblock

Partição p3

-rw-r--r-- 1 root root 274 1969-12-31 19:18 installed_os.json
drwx------ 2 root root 12K 1969-12-31 19:00 lost+found
-rw-r--r-- 1 root root  86 1969-12-31 19:18 noobs.conf

Partição p4não existe.

Partição p5:

-rwxr-xr-x 1 root root 9.7K 2015-12-01 20:17 bcm2708-rpi-b.dtb
...
-rwxr-xr-x 1 root root  18K 2015-12-01 20:17 bootcode.bin
-rwxr-xr-x 1 root root  120 1979-12-31 19:00 cmdline.txt
-rwxr-xr-x 1 root root 1.5K 2015-11-23 09:01 config.txt
-rwxr-xr-x 1 root root  19K 2015-10-14 05:43 COPYING.linux
...
-rwxr-xr-x 1 root root 9.5K 2015-12-01 20:17 fixup_x.dat
-rwxr-xr-x 1 root root  137 2015-02-16 09:57 issue.txt
-rwxr-xr-x 1 root root 3.9M 2015-12-01 20:17 kernel7.img
...
-rwxr-xr-x 1 root root 591K 2015-12-01 20:17 start_cd.elf
...

Partição p6(a partição raspbian real )

drwxr-xr-x   2 root     root     4.0K 2015-07-28 21:40 bin
drwxr-xr-x   2 root     root     4.0K 2015-02-15 09:09 boot
drwxr-xr-x 119 root     root     4.0K 2015-12-23 15:36 etc
drwxr-xr-x   4 root     root     4.0K 2015-12-19 20:53 home
drwxr-xr-x  15 root     root     4.0K 2015-12-20 22:08 lib
drwx------   2 root     root      16K 2015-02-15 06:21 lost+found
....
drwxr-xr-x  12 root     root     4.0K 2015-11-04 15:18 var
fcm
fonte
Você pode ter apenas um máximo de quatro partições 'primárias' e se você precisar de mais do que o número total de partições que uma deve se tornar (como a p2possui) uma partição estendida - neste caso, uma partição "Linux" e é um contêiner para as restantes aquelas necessárias acima de 4 - e há mais de uma maneira de organizar essas partições 'lógicas' dentro da extensão.
SlySven

Respostas:

6

Meu resultado final para migrar para um cartão SD maior em uma configuração de noobs é o seguinte.

Eu faço backup da imagem original ao vivo em uma unidade externa temporária, compartilhada com uma caixa do Windows; um cartão de memória sobressalente fará isso.

dd if=/dev/mmcblk0 of=~/backup.img

você também pode fazer backup com o win32DiskImager, então, gravei a imagem em um cartão SD maior (passei de 8 para 16 GB) dessa vez, usando o win32DiskImager.

Eu inicializei o SD recém-criado. Nesse ponto, o SD ainda mantinha as mesmas partições, primárias, estendidas e lógicas. Portanto, a inicialização deve funcionar sem problemas.

Usando

fdisk /dev/mmcblk0

Faça uma captura de tela ao vivo da tabela de partição atual usando o pcomando

Exclua a partição não utilizada e desnecessária nº 3 (p3) localizada no final do 'disco' físico (após a partição estendida nº 2) com d.

Em seguida, exclua bravamente a partição 2 (p2), a partição lógica aninhada também desaparecerá.

Recrie a partição estendida nº 2, mas agora, usando todo o espaço disponível.
Para recriar o número 2, use exatamente o mesmo setor original inicial e deixe fdisk-o fornecer o setor final. Use pverifique e se o tipo é estendido, digite '85' e se o novo setor final é realmente maior que o original.

Recrie as duas partições lógicas anteriores: comece com a partição lógica nº 5 (p5); para o setor inicial, use o setor exato da captura de tela anterior, igual ao setor final (este disco lógico não aumentará), use tpara definir o ID como c(MS-DOS). Em seguida, recrie a partição nº 6 (p6) com o mesmo setor inicial que antes, mas com o setor final selecionado por fdiske p' id83`.

Verifique suas entradas com pe se e somente se, parece ok, basta escrever a tabela de partição com wapenas ^ C e iniciar novamente.

Reinicie e cruze os dedos. Raspbian pode reiniciar duas vezes.

Em seguida, basta expandir o sistema de arquivos com

resize2fs /dev/mmcblk0p6

Este é o resultado final, agora com 8GB extras!

 Device Boot             Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192     1675781      833795    e  W95 FAT16 (LBA)
/dev/mmcblk0p2         1679360    30703615    14512128   85  Linux extended
/dev/mmcblk0p5         1687552     1810431       61440    c  W95 FAT32 (LBA)
/dev/mmcblk0p6         1818624    30703615    14442496   83  Linux

Então, agora meu setor final é 14.442.496 de 6.840.320.

A bota

Eu sei que este tópico está em outro lugar, no entanto, é bom saber.

O Raspberry possui dois processadores internos: a GPU (Unidade de processamento gráfico) e o ARM, cada um com uma tarefa diferente. A GPU compartilha a memória com o ARM, um processador RISC (Reduced Instruction Set Computer) de uso geral muito eficiente, executando o conjunto de instruções padrão do setor. Tudo incluído em um SoC BCM2835 (Sistema em um Chip)

Quando o controle é dado primeiro à GPU, apenas o kernel, no final do processo de inicialização, será executado no processador ARM.

No primeiro estágio, a GPU executará o firmware da ROM no chip para carregar bootcode.binna memória cache L2 e passar o controle. bootcode.binhabilitará o cartão SD, habilitará a SDRAM e usará a primeira partição do MS-DOS para encontrar, carregar e executar 'start.elf'.

Neste ponto, os seguintes arquivos são considerados pela bootcode.binprimeira partição do MS-DOS no cartão SD:

/boot/config.txt,  
/boot/cmdline.txt  (kernel parameters)
/boot/bcm????-rpi-*.dtb  (device dependent) 

Há um bom número de opções que podem ser personalizadas config.txt. Você pode editar o arquivo que monta o SD em um computador externo ou apenas editar em uma unidade em execução:

nano /boot/config.txt

As alterações típicas no config.txt estão relacionadas a overclock , HDMI , tamanho da tela , aspecto , câmera , configuração do endereço MAC etc.

nano cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait

Como você pode ver, a partição de inicialização designada, onde kernel.imga inicialização será / dev / mmcblk0p6 e esta é a segunda partição necessária no seu cartão SD, formatada como 'ext4' (Linux ou Id '83' no idioma do fdisk).

Por fim, start.elfcarregará e executará kernel.imgseu kernel linux.

Você pode (deveria?) Atualizar o kernel com rpi-update; se não houver apenas apt-get install rpi-update).

nota: o sudoprefixo excluído por brevidade.

fcm
fonte
3

Se você pesquisar no processo de inicialização do Raspberry PI, encontrará muitos, incluindo o que é a sequência de inicialização? (houve algumas pequenas alterações).

What is stored on each partition (and why)? Isso varia, dependendo de como foi configurado e de qual distribuição é usada.

Does the RPI boot from the SD card (sector zero) or the firmware reads from the disk structure? Não.

Can I create and partition a new SD and just DD each partition to the new device? Sim. Embora seja melhor clonar o cartão e expandir a partição.

Most RPI SD cards have two (fdisk) partitions, perhaps when installed from a .img Enquanto o Raspbian faz, a partição FAT32 normalmente inicia em 8192, o que é ideal para cartões SD. (As partições devem estar localizadas no limite do Erase Block Group 4M.)

However I have one with as many as 6 partitions, some overlapping other sectors, perhaps this is the structure when started/inherited from NOOBS. Você precisa entender partições estendidas. Experimente o Wiki.

Milliways
fonte
O foco na minha pergunta é quais partições são necessárias e quais não são ao expandir o espaço em disco no SD do NOOBS.
fcm
1
Você precisa de todos eles. Você pode excluir alguns dos arquivos na partição de recuperação. A conversão de NOOBS para Raspbian padrão pode ser feita, mas requer algumas (na verdade, bastante) mexidas. Você PODE usar o Raspbian (p6) com alterações mínimas (para / etc / fstab) com uma partição de inicialização padrão do Raspbian FAT32.
Milliways