라즈 비안 부팅 프로세스 및 파티션 테이블


13

Raspberry Pi 부팅 프로세스 및 디스크 파티션 구조에 대한 좋은 설명이 있습니까?

각 파티션에 무엇이 저장되며 왜 그런가?

RPI가 SD 카드 (섹터 0)에서 부팅되거나 펌웨어가 디스크 구조에서 읽습니까?

나는 NOOBS가 O / S 하에서 몇 ​​개의 파일을 복사하여 생성되었다고 가정하고, RPI 펌웨어는 (높은 수준의) MS-DOS 디스크 구조를 알고 SD 메모리로 들어가는 길을 찾습니다.

사용 가능한 공간을 늘리기 위해 좋은 SD 카드를 더 큰 SD 카드로 복제하고 싶습니다.
새 SD를 만들어 파티션을 나누고 각 파티션을 새 장치에 DD 만 추가 할 수 있습니까? 어떤 파티션이 필요합니까?

'linux'새 장치 의 파티션이 원본보다 큰 다음 디스크 공간을 확장 하시겠습니까?

어쩌면 새 카드로 복제하고 사용 가능한 공간을 사용하기 위해 마지막 파티션 (p6) 만 확장하지만 시도 및 오류 방법을 사용하고 싶지 않습니다. 방법과 이유를 알고 싶습니다.

왜 내 질문?

대부분의 RPI SD 카드에는 .img에서 설치했을 때 두 개의 (fdisk) 파티션이 있습니다.

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

그러나 6 개의 파티션이있는 파티션이 하나 있습니다. 이것은 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

이 사진에 문제가 있다고 생각합니다. 두 개의 W95 파티션?

올바른 파티션 만 새 카드에 복제하고 싶습니다. 다시 실행하려면이 SD 실행에 많은 노력을 기울여야합니다! (BTW 몇 가지 좋은 백업이 있습니다).

몇 가지 메모.

분할 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

분할 p2

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

분할 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

파티션 p4이 존재하지 않습니다.

파티션 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
...

파티션 p6( 실제 라즈 비안 파티션)

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

최대 4 개의 '기본'파티션을 가질 수 있으며 총 파티션 수보다 더 많은 파티션이 필요한 경우 p2확장 파티션이 되어야합니다 ( 이 경우 "Linux"파티션이고 나머지 파티션은 컨테이너 임). 4 이상 필요-확장 된 파티션 안에 '논리적'파티션을 구성하는 방법은 여러 가지가 있습니다.
SlySven

답변:


6

멍청한 설정에서 더 큰 SD 카드로 마이그레이션 한 최종 결과는 다음과 같습니다.

원래 라이브 이미지를 임시 외장 드라이브에 백업하고 Windows 상자와 공유하면 여분의 메모리 스틱이이를 수행합니다.

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

win32DiskImager로 백업 할 수 있습니다. 이번에는 win32DiskImager를 사용하여 이미지를 더 큰 SD 카드 (8에서 16GB로갔습니다)에 레코딩했습니다.

새로 만든 SD를 부팅했습니다. 이 시점에서 SD는 여전히 동일한 파티션, 기본, 확장 및 논리를 유지했습니다. 따라서 부팅이 원활하게 작동합니다.

사용

fdisk /dev/mmcblk0

p명령을 사용하여 현재 파티션 테이블의 라이브 스크린 샷을 만듭니다.

를 사용하여 물리적 '디스크'의 끝 (확장 파티션 # 2 뒤)에있는 사용하지 않고 불필요한 파티션 # 3 (p3)을 삭제합니다 d.

다음으로 파티션 # 2 (p2)를 용감하게 삭제하면 중첩 된 논리 파티션도 사라집니다.

사용 가능한 모든 공간을 사용하여 확장 파티션 # 2를 다시 만듭니다.
# 2를 다시 만들려면 정확히 같은 시작 원래 섹터 fdisk를 사용하고 종료 섹터를 제공하십시오. p확인을 사용 하고 유형이 '85'확장 유형이고 새 끝 섹터가 실제로 원래보다 큰지 확인하십시오.

두 개의 이전 논리 파티션을 다시 작성하십시오. 논리 파티션 # 5 (p5)로 시작하십시오. 시작 섹터의 경우 끝 섹터와 동일한 이전 섹터의 정확한 섹터를 사용하고 (이 논리 디스크는 커지지 않음) tID를 c(MS-DOS) 로 설정하십시오 . 그런 다음 이전과 동일한 시작 섹터를 사용하여 종료 섹터 fdiskp' id83`을 선택하여 파티션 # 6 (p6)을 다시 만듭니다 .

p만약에 if와 if로만 항목을 확인 하고, 괜찮다면 w^ C로 파티션 테이블을 작성하고 다시 시작하십시오.

다시 부팅하고 손가락을 교차시킵니다. Raspbian 이 두 번 재부팅 될 수 있습니다.

그런 다음 파일 시스템을 확장하여

resize2fs /dev/mmcblk0p6

이것은 이제 8gb를 더한 최종 결과입니다!

 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

이제 내 엔딩 섹터는 6,840,320에서 14,442,496입니다.

부팅

나는이 주제가 다른 곳에 있다는 것을 알고 있지만 이것은 알고있는 것이 좋다.

라즈베리에는 GPU (Graphic Processing Unit)와 ARM의 두 가지 온보드 프로세서가 있으며 각각 다른 작업을 수행합니다. GPU는 업계 표준 명령어 세트를 실행하는 매우 효율적인 범용 RISC (Reduced Instruction Set Computer) 프로세서 인 ARM과 메모리를 공유합니다. 모두 BCM2835 'SoC'(시스템 온 칩)에 동봉

전원을 켜면 먼저 GPU에 제어권이 부여되고 부팅 프로세스가 끝날 때 커널 만 ARM 프로세서에서 실행됩니다.

첫 번째 단계에서 GPU는 온칩 ROM 펌웨어를 실행 bootcode.bin하여 L2 캐시 메모리 에로드 하고 컨트롤을 전달합니다. bootcode.binSD 카드를 활성화하고 SDRAM을 활성화하며 첫 번째 MS-DOS 파티션을 사용하여 'start.elf'를 찾아로드하고 실행합니다.

이때 bootcode.binSD 카드의 첫 번째 MS-DOS 파티션에서 다음 파일이 고려됩니다 .

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

사용자 정의 할 수있는 많은 옵션이 있습니다 config.txt. 외부 컴퓨터에 SD를 마운트하는 파일을 편집하거나 실행중인 장치에서 편집 할 수 있습니다.

nano /boot/config.txt

에 전형적인 변화 를 config.txt가 관련되어 오버 클럭 , HDMI , 화면 크기 , 측면 , 카메라는 당신에게 설정 MAC 주소

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

보시다시피, 지정된 부팅 파티션. 여기서 kernel.img부팅은 / dev / mmcblk0p6이며 SD 카드에 필요한 두 번째 파티션으로 'ext4'(fdisk lingo의 Linux 또는 Id '83')로 포맷됩니다.

마지막으로 리눅스 커널을 start.elf로드하고 실행 kernel.img합니다.

커널을 rpi-update;로 업데이트 할 수있다 . 그렇지 않은 경우 apt-get install rpi-update).

참고 : sudo접두어가 간결하게 삭제되었습니다.


3

Raspberry PI Boot 프로세스를 위해 Google을 부팅 하면 부팅 순서 란 무엇입니까? (약간의 변경이있었습니다).

What is stored on each partition (and why)? 설정 방법 및 사용되는 배포판에 따라 다릅니다.

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

Can I create and partition a new SD and just DD each partition to the new device? 예. 카드를 복제하고 파티션을 확장하는 것이 좋습니다.

Most RPI SD cards have two (fdisk) partitions, perhaps when installed from a .img Raspbian은 FAT32 파티션을 8192에서 시작하는데 이는 SD 카드에 이상적입니다. (파티션은 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. 확장 파티션을 이해해야합니다. 위키를 사용해보십시오.


내 질문에 초점은 NOOBS의 SD에서 디스크 공간을 확장 할 때 필요한 파티션과 어떤 파티션이 아닌지에 있습니다.
fcm

1
당신은 그들 모두가 필요합니다. 복구 파티션에서 일부 파일을 삭제할 수 있습니다. NOOBS를 표준 Raspbian으로 변환하는 것은 가능하지만 약간의 실제 결과가 필요합니다. 표준 Raspbian FAT32 부팅 파티션으로 최소한의 변경 (/ etc / fstab으로)으로 Raspbian (p6)을 사용할 수 있습니다.
Milliways
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.