Proces rozruchu Raspbian i tablica partycji

13

Dobry opis procesu rozruchu Raspberry Pi i struktury partycji dysku?

Co jest przechowywane na każdej partycji (i dlaczego)?

Czy rozruch RPI z karty SD (sektor zero) lub oprogramowanie układowe odczytuje ze struktury dysku?

Zakładam, że będąc stworzonym przez NOOBS kopiowaniem kilku plików w dowolnym systemie operacyjnym, oprogramowanie układowe RPI wie o strukturze dysku MS-DOS (wysokiego poziomu) i znajduje drogę do pamięci SD.

Chcę sklonować dobrą kartę SD na większą kartę SD, aby zwiększyć dostępną przestrzeń.
Czy mogę utworzyć nową kartę SD i podzielić ją na partycje i po prostu dodać każdą partycję do nowego urządzenia? Które partycje są potrzebne?

'linux'Partycji na nowym urządzeniu być większy niż oryginał, a następnie rozszerzenie przestrzeni dyskowej?

Może sklonuj na nową kartę i rozszerz tylko ostatnią partycję (p6), aby użyć dostępnego miejsca, ale nie chcę używać metody prób i błędów, chcę wiedzieć, jak i dlaczego.

Dlaczego moje pytanie

Większość kart SD RPI ma dwie partycje (fdisk), być może po zainstalowaniu z .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

Mam jednak jedną z 6 partycjami, jest to struktura odziedziczona po 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

Myślę, że coś jest nie tak z tym obrazem. Dwie partycje W95?

Chciałbym sklonować tylko odpowiednie partycje na nową kartę. Muszę dużo pracy nad tym działającym SD, aby zacząć wszystko od nowa! (BTW, mam kilka dobrych kopii zapasowych).

Kilka notatek.

Przegroda 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

Przegroda p2

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

Przegroda 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

Partycja p4nie istnieje.

Partycja 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
...

Partycja p6( prawdziwa partycja raspbian )

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
źródło
Możesz mieć maksymalnie cztery partycje „podstawowe”, a jeśli potrzebujesz więcej niż ta całkowita liczba partycji, musisz stać się (podobnie jak p2ma) partycją rozszerzoną - w tym przypadku partycją „Linux” i jest to pojemnik na pozostałe te potrzebne powyżej 4 - i istnieje więcej niż jeden sposób na zorganizowanie tych „logicznych” partycji wewnątrz rozszerzonej.
SlySven,

Odpowiedzi:

6

Mój końcowy wynik migracji na większą kartę SD przy ustawieniu noob jest następujący.

Wykonuję kopię zapasową oryginalnego obrazu na żywo na tymczasowym dysku zewnętrznym, współdzielonym z oknem systemu Windows, wystarczy zapasowa pamięć.

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

możesz również wykonać kopię zapasową za pomocą win32DiskImager, a następnie nagrałem obraz na większą kartę SD (zwiększyłem z 8 do 16 GB) tym razem, używając win32DiskImager.

Uruchomiłem nowo utworzony SD. W tym momencie SD nadal zachowywał te same partycje, podstawowe, rozszerzone i logiczne. Więc boot powinien działać płynnie.

Za pomocą

fdisk /dev/mmcblk0

Wykonaj zrzut ekranu na żywo z bieżącej tabeli partycji za pomocą ppolecenia.

Usuń nieużywaną i niepotrzebną partycję nr 3 (p3) znajdującą się na końcu fizycznego „dysku” (po partycji rozszerzonej nr 2) za pomocą d.

Następnie, odważnie usuwając partycję 2 (p2), zagnieżdżona partycja logiczna również zniknie.

Odtwórz partycję rozszerzoną nr 2, ale teraz, korzystając z całej dostępnej przestrzeni.
Aby odtworzyć numer 2, użyj dokładnie tego samego początkowego sektora początkowego i daj fdisksektor końcowy. Użyj psprawdzenia i czy typ jest rozszerzony, wpisz „85”, a nowy sektor końcowy jest rzeczywiście większy niż oryginał.

Utwórz ponownie dwie poprzednie partycje logiczne: zacznij od partycji logicznej nr 5 (p5); dla sektora początkowego użyj dokładnego sektora z poprzedniego zrzutu ekranu, tak samo jak sektor końcowy (ten dysk logiczny nie powiększy się), użyj, taby ustawić identyfikator na c(MS-DOS). Następnie odtwórz partycję # 6 (p6) z tym samym sektorem początkowym niż poprzednio, ale z sektorem końcowym wybranym przez fdiski p' id83`.

Sprawdź swoje wpisy za pomocą pi czy i tylko wtedy, gdy wygląda to dobrze, po prostu napisz tabelę partycji, w wprzeciwnym razie po prostu ^ C i zacznij od nowa.

Uruchom ponownie i skrzyżuj palce. Raspbian może zostać ponownie uruchomiony dwukrotnie.

Następnie rozwiń system plików za pomocą

resize2fs /dev/mmcblk0p6

To wynik końcowy, teraz z dodatkowymi 8 GB!

 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

Tak więc teraz mój sektor końcowy to 14 442 496 z 6 840 320.

Rozruch

Wiem, że ten temat jest gdzie indziej, ale dobrze jest wiedzieć.

Raspberry ma dwa wbudowane procesory: GPU (Graphic Processing Unit) i ARM, każdy z innym zadaniem. Procesor graficzny współużytkuje pamięć z ARM, bardzo wydajnym procesorem RISC (komputer z ograniczonym zestawem instrukcji) ogólnego zastosowania, obsługującym standardowy zestaw instrukcji. Wszystko zamknięte w BCM2835 „SoC” (System on a Chip)

Po włączeniu sterowania formant jest najpierw przekazywany do GPU, tylko jądro, pod koniec procesu rozruchu, będzie działało na procesorze ARM.

W pierwszym etapie GPU uruchomi wbudowane oprogramowanie ROM ROM, aby załadować bootcode.bindo pamięci podręcznej L2 i przekazać kontrolę. bootcode.binwłączy kartę SD, włączy SDRAM i użyje pierwszej partycji MS-DOS, aby znaleźć, załadować i uruchomić „start.elf”.

W tym momencie rozważane są następujące pliki bootcode.binz pierwszej partycji MS-DOS na karcie SD:

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

Istnieje wiele opcji, które można dostosować config.txt. Możesz edytować plik mocujący kartę SD na komputerze zewnętrznym lub po prostu edytować na uruchomionej jednostce:

nano /boot/config.txt

Typowe zmiany w config.txt dotyczą podkręcania , HDMI , rozmiaru ekranu , proporcji , kamery , ustawiania adresu MAC itp.

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

Jak widać, wyznaczoną partycją rozruchową, w której kernel.imguruchomi się system, jest / dev / mmcblk0p6 i jest to druga partycja wymagana na karcie SD, sformatowana jako „ext4” (Linux lub Id „83” w języku fdisk lingo).

Wreszcie start.elfzaładuje się i uruchomi kernel.imgjądro Linuksa.

Możesz (powinieneś?) Zaktualizować jądro za pomocą rpi-update; jeśli nie tylko apt-get install rpi-update).

Uwaga: sudoprzedrostek został usunięty ze względu na zwięzłość.

fcm
źródło
3

Jeśli korzystasz z procesu rozruchu Raspberry PI, znajdziesz wiele, w tym jaka jest sekwencja rozruchowa? (zaszły niewielkie zmiany).

What is stored on each partition (and why)? Różni się to w zależności od konfiguracji i zastosowanej dystrybucji.

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

Can I create and partition a new SD and just DD each partition to the new device? Tak. Chociaż może być lepiej sklonować kartę i rozwinąć partycję.

Most RPI SD cards have two (fdisk) partitions, perhaps when installed from a .img Podczas gdy Raspbian tak robi, partycja FAT32 zwykle zaczyna się od 8192, co jest idealne dla kart SD. (Partycje powinny znajdować się na granicy wymazywania grupy bloków 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. Musisz zrozumieć rozszerzone partycje. Wypróbuj Wiki.

Milliways
źródło
Skupiam się na moim pytaniu, jakie partycje są potrzebne, a które nie są, gdy powiększam przestrzeń dyskową na karcie SD NOOBS.
fcm
1
Potrzebujesz ich wszystkich. Możesz usunąć niektóre pliki z partycji odzyskiwania. Konwersja NOOBS do standardowej wersji Raspbian może być wykonana, ale wymaga trochę (właściwie całkiem) kłótni. Możesz używać Raspbian (p6) z minimalnymi zmianami (do / etc / fstab) ze standardową partycją rozruchową Raspbian FAT32.
Milliways,