Raspbianブートプロセスとパーティションテーブル


13

Raspberry Piのブートプロセスとディスクパーティション構造の良い説明はありますか?

各パーティションには何が保存されていますか(そしてその理由)?

RPIはSDカードからブートしますか(セクター0)、またはファームウェアはディスク構造から読み取りますか?

NOOBSがO / Sの下にいくつかのファイルをコピーして作成したと仮定すると、RPIファームウェアは(高レベルの)MS-DOSディスク構造を認識し、SDメモリへの道を見つけます。

使用可能なスペースを拡張するために、優れたSDカードをより大きなSDカードに複製したい。
新しいSDを作成し、各デバイスのパーティションを新しいデバイスに分割することはできますか?どのパーティションが必要ですか?

'linux'新しいデバイスのパーティションは元のデバイスよりも大きくなり、ディスク容量が増えますか?

新しいカードにクローンを作成し、最後のパーティション(p6)のみを拡張して使用可能なスペースを使用することもできますが、試行錯誤の方法を使用したくありません。方法と理由を知りたいです。

なぜ私の質問ですか?

ほとんどのRPI SDカードには、おそらく.imgからインストールされた場合、2つの(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

この写真には何か問題があると思います。2つのW95パーティション?

正しいパーティションのみを新しいカードにクローンします。最初からやり直すには、この実行中のSDで多くの作業を行う必要があります。(ところで、いくつかの適切なバックアップがあります)。

いくつかのメモ。

パーティション 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実際の 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

最大4つの「プライマリ」パーティションしか持てず、その合計数を超えるパーティションが必要な場合p2は、拡張パーティション(この場合は「Linux」パーティション)になり、残りのコンテナになります。 4より上で必要なもの-拡張されたパーティション内にこれらの「論理」パーティションを整理する方法は複数あります。
SlySven

回答:


6

noobs設定でより大きなSDカードに移行する私の最終的な結果は次のとおりです。

元のライブイメージを、Windowsボックスと共有されている一時的な外部ドライブにバックアップします。予備のメモリスティックがそれを行います。

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

win32DiskImagerを使用してバックアップすることもできます。次に、win32DiskImagerを使用して、イメージをより大きなSDカード(今回は8 GBから16GBに変更)に書き込みました。

新しく作成したSDを起動しました。この時点で、SDはまだ同じパーティション、プライマリ、拡張および論理を保持していました。したがって、ブートはスムーズに動作するはずです。

を使用して

fdisk /dev/mmcblk0

pコマンドを使用して、現在のパーティションテーブルのライブスクリーンショットを撮ります。

を使用して、物理 'ディスク'の最後(拡張パーティション#2の後)にある未使用および不要なパーティション#3(p3)を削除しdます。

次に、パーティション#2(p2)を大胆に削除します。ネストされた論理パーティションも消滅します。

拡張パーティション#2を再作成しますが、ここで、使用可能なすべてのスペースを使用します。
#2を再作成するには、まったく同じ開始元のセクターを使用してfdisk、終了セクターを指定します。pverifyを使用して、タイプが拡張タイプ '85'であり、新しい終了セクターが実際に元のセクターよりも大きいことを確認してください。

前の2つの論理パーティションを再作成します。論理パーティション#5(p5)から開始します。開始セクターには、前のスクリーンショットの正確なセクターを使用し、終了セクターと同じ(この論理ディスクは成長しません)を使用tして、IDをc(MS-DOS)に設定します。次に、パーティション#6(p6)を以前と同じ開始セクターで再作成しますが、終了セクターはfdiskp' id83`で選択します。

エントリを確認しp、そうである場合に限り、パーティションテーブルにw^ C を書き込むだけで問題がなければ、もう一度開始します。

再起動して、指を交差させます。Raspbianは2回再起動する場合があります。

次に、次のコマンドでファイルシステムを展開します。

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です。

ブーツ

このトピックは他の場所にあることは知っていますが、知っておくと良いでしょう。

Raspberryには、GPU(グラフィックプロセッシングユニット)とARMの2つのオンボードプロセッサがあり、それぞれ異なるタスクを備えています。GPUは、業界標準の命令セットを実行する非常に効率的な汎用RISC(Reduced Instruction Set Computer)プロセッサであるARMとメモリを共有します。BCM2835「SoC」(システムオンチップ)にすべて同封

電源がオンになると、最初にコントロールがGPUに提供され、ブートプロセスの最後にカーネルのみがARMプロセッサで実行されます。

最初の段階で、GPUはオンチップROMファームウェアを実行bootcode.binしてL2キャッシュメモリにロードし、制御を渡します。 bootcode.binSDカードを有効にし、SDRAMを有効にし、最初のMS-DOSパーティションを使用して、 'start.elf'を検索、ロード、実行します。

この時点でbootcode.bin、SDカードの最初の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カードに必要な2番目のパーティションであり、 'ext4'(fdisk lingoのLinuxまたはId '83)としてフォーマットされています。

最後に、Linuxカーネルstart.elfをロードして実行kernel.imgします。

でカーネルを更新できます(すべきですか?)rpi-update。存在しない場合のみapt-get install rpi-update)。

注:sudo簡潔にするためにプレフィックスを削除しました。


3

Raspberry PIブートプロセスを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カードに最適です。(パーティションは、消去ブロックグループ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. 拡張パーティションを理解する必要があります。Wikiをお試しください。


私の質問に焦点を当てるのは、NOOBSのSDのディスク領域を拡張するときに必要なパーティションとそうでないパーティションです。
fcm

1
それらすべてが必要です。リカバリパーティション上のファイルの一部を削除できます。NOOBSを標準のRaspbianに変換することはできますが、多少の(実際にはかなりの)手間がかかります。標準のRaspbian FAT32ブートパーティションでは、最小限の変更(/ etc / fstab)でRaspbian(p6)を使用できます。
ミリウェイズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.