web-dev-qa-db-ja.com

MBRとブートパーティションをより小さいディスクにコピーする

Raspberry Piに32GB SDカードを使用しています。オペレーティングシステム(ArchlinuxARM)をUSBハードドライブに正常に転送しました。つまり、SDカードのブートパーティションだけが必要です。

約100MBしか使用しない32GBカードはひどいスペースの無駄であり、私は4GB前後のより小さなSDカードを持っています。

MBRと32GBカードの最初のパーティションを4GBカードにコピーするにはどうすればよいですか?

私はMBRとより大きいカードの最初のパーティションをddで保存してみました:

dd if=/dev/sdb of=mbr_image bs=446 count=1
dd if=/dev/sdb1 of=boot_image

次に、元の32GBカードのテーブルとまったく同じように見える、小さなカードに新しいパーティションテーブルを作成しました。

Device    Boot Start       End Blocks  Id System
/dev/sdc1 *     2048    194559  96256  c  W95 FAT32 (LBA)

最後に、以前に保存した画像を小さなカードにコピーしました。

dd if=mbr_image of=/dev/sdc bs=446 count=1
dd if=boot_image of=/dev/sdc1

fdiskではすべて正常に見えますが、機能しません。小さいカードから起動しようとすると、ラズベリーが何もしません。

エラーはどこにありますか?

4
ifschleife

私の場合、MBRをコピーするだけで問題が発生しました。私にとって次のステップはうまくいきました:

  1. fdisk必要なパーティションを持つ新しいカード。

  2. 新しいカードをマウントし、必要なパーティションファイルをcp(古いブートパーティションだと思います)を古いものから新しいものにマウントします。変更(grub2を使用している場合)/boot/grub/grub.cfgを新しいカードに追加して、ブートパーティションのUUIDが4GBカードの1つになるようにします(blkidを使用してUUIDを識別します)。

  3. 32GBカードでシステムを起動し、4GBカードをマウントします。
  4. mount --bind/dev、/ procおよび/ sysを古いカードから新しいカードに。
  5. chrootをマウントされた4GBカードに。
  6. grub-install 4GBカードに。

編集:ステップ4〜6はgrub-install --boot-directory=YourPathToMounted4GBBoot /dev/your4GBcard

1
YoMismo

この説明 によると、MBRをバックアップするときにbs=512を使用し、小さいカードにコピーするときにbs=446を使用します。

dd if=/dev/mmcblk0 of=mbr_image bs=512 count=1
dd if=mbr_image of=/dev/mmcblk0 bs=446 count=1

私はRaspberry Piを実際に使用したことがないため、デバイスラベルが重要かどうかはわかりません。 参照サイト は、MBRに/dev/mmcblk0を使用し、デバイスパーティションに/dev/mmcblk01を使用することをお勧めします。

編集:

以前見落としていた。試した手順と私が言及したリンクの両方に、ファイルシステムのフォーマットが不足しているようです。 fdiskを使用して/dev/sdc1を作成した後、使用する前にファイルシステムをフォーマットする必要があります。

mkfs.vfat -F 32 /dev/sdc1

この後、dd if=boot_image of=/dev/sdc1を実行すると動作するはずです。

0
Timothy Martin