Grub:USBドライブから起動し、SDカードから引き続き起動しますか?

Grub:USBドライブから起動し、SDカードから引き続き起動しますか?

SDカードリーダーを内蔵した古いノートパソコンがありますが、起動時に機能しません。

ただし、小さな8GB USBフラッシュドライブ(USB 2.0)からLinux(Debian)を起動できますが、非常に遅いです。 SDカードははるかに高速で、別のインターフェイスになければなりません。

grubはSDカードにアクセスできませんが、USBフラッシュドライブからDebianカーネルお​​よび/またはvmlinuzをロードしてからSDカードドライバをコア?

grub設定ファイルを編集しないように明示的に指定しているので、混乱していますが、カーネル/ vmlinuzとinitramfsに別のディスクを指定できるようです。どうすればいいのか分かりません。 USBフラッシュドライブからSDカードを起動しますか?

以下は、USBディスクの/boot/grub.cfgにある関連コードです。

USBスティックから起動するには:

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
    set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-aaaa-aaaa-a’ {
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd2,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd2,msdos1 --hint-efi=hd2,msdos1 --hint-baremetal=ahci2,msdos1  aaaa-aaaa-a
    else
      search --no-floppy --fs-uuid --set=root aaaa-aaaa-a
    fi
    echo    'Loading Linux 4.19.0-6-amd64 ...'
    linux   /boot/vmlinuz-4.19.0-6-amd64 root=UUID=aaaa-aaaa-a ro  quiet
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-4.19.0-6-amd64
}

SD/MMC カードから起動:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Debian GNU/Linux 10 (buster) (on /dev/mmcblk0p1)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-XXXX-XXXX-X’ {
    insmod part_msdos
    insmod ext2
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root  XXXX-XXXX-X
    else
      search --no-floppy --fs-uuid --set=root XXXX-XXXX-X
    fi
    linux /vmlinuz root=/dev/mmcblk0p1
    initrd /initrd.img
}

それらを組み合わせる方法があるべきだと思いますか?

私はSDカードを起動するために使用します。

LVMパーティションにSDカードを設定したため、デフォルトのMBRパーティションにのみ設定されていたため、USBフラッシュドライブにlvm2をインストールする必要がありました。

私は以下を追加しました:

insmod lvm
insmod ext2

到着する:

### BEGIN /etc/grub.d/05_debian_theme ###

そして:

root=/dev/mapper/debian--vg-root

対応するメニュー項目に移動します。

ただし、initramfsファイルはUSBとSDで異なるため、SDから起動するとすべてが正しくロードされるわけではありません。

USBインストールは起動のみ可能な非常に小さなシェルですが、SDはデスクトップマネージャなどを含むフルインストールです。

私がやりたいことは、2つを分離し、それぞれのinitramfsファイルを使用して起動できることです。 USBカードに対してこれを行い、SDカードに対して別々のエントリを起動できますが、最小限のUSB initramfsファイルを使用してください。

SD カードは /dev/mmcblk0p1 をブートパーティションとして認識します。

これにより、2つの問題がさらに発生します。

  1. SDカードの起動フォルダの場所を設定するようにgrubに指示する方法は? grub.cfgにこれを指定できますか? /dev/mmcblk0p1パーティション上のすべてのファイルをUSBフラッシュドライブの/boot/bootsdにコピーしました。

  2. USBフォルダ/boot/bootsdをSDカードの/bootに設定するには? fstabとシンボリックリンクを使用していますか?

編集3:

今調べたと思います。今変更しました。

initrd /initrd.img

到着する:

initrd /bootsd/initrd.img

その後、UUIDを使用してUSB sdc1用のSDカードにfstabエントリを作成しました。次に、/media/usbboot/boot/bootsd から SD システムの /boot として ln エイリアスを作成します。

まだ無料ではないWi-Fiを設定していないので、まだapt-getアップデートを実行していませんが、うまくいくとします。

ベストアンサー1

GRUBはすべてのディスクI / O操作にシステムファームウェアルーチン(BIOSなど)を使用するため、BIOSがSDカードを読み取れない場合、GRUBはこれを実行できません。

GRUBの使命は、LinuxカーネルとinitramfsファイルをRAMにロードしてから、コントロールをLinuxカーネルに渡すことです。この時点で、GRUBの作業は完了し、それ以上の作業には関与しません。それ以降のすべての作業は、Linuxカーネルとinitramfsファイルに含まれるドライバとツールによって行われます。

root=したがって、USBスティックのinitramfsにSDカードドライバが含まれている場合は、次の行を使用して起動パラメータを編集するだけです。

linux   /boot/vmlinuz-4.19.0-6-amd64 root=UUID=aaaa-aaaa-a ro  quiet

これに関して:

linux   /boot/vmlinuz-4.19.0-6-amd64 root=/dev/mmcblk0p1 ro  quiet

しかし、これは最初のステップです。

あなたのシステムも修正するカーネルお​​よび/またはブートローダに必要な場合は、デフォルトのSDカードベースのシステムに/bootUSBスティックディレクトリが自動的にインストールされるように準備する必要があります。/bootUSBスティックにはすでに/bootディレクトリがあるため、/etc/fstabUSBスティックを別の場所にマウントするように設定し、/bootそれへのシンボリックリンクを作成する必要があるかもしれません/wherever_the_USB_is_mounted/boot

その後、実行してgrub-mkconfig -o /tmp/test-grub.cfg/ tmp /にダミーテストgrub.cfgファイルを自動的に生成し、それをUSBスティックのアクティブファイルと比較し、結果がUSBスティックに適していることを確認します。テストするには、grub.cfgUSBスティックのファイルを横に移動して生成されたファイルに置き換えることができます。機能している場合は、「USBから起動、SDのルートファイルシステム」シナリオを使用するときにシステムがカーネルアップデートを実行できるようになります。これは、必要な変更を実行する最も保守的な(最も危険ではない)方法でなければなりません。

または、SDをルートファイルシステムとしてシステムを起動したら、カーネルファイルとinitramfsファイルを現在のディレクトリから/bootUSBスティックのルートディレクトリにコピーし、それを次のようにマウントしてから、次のように/bootUSBスティックにGRUBを再インストールできます。あります。次のコマンドgrub-install。新しい状況に合わせて、新しいgrub.cfgファイル(現在のUSBスティックファイルシステムのルートにある)にさまざまなパスを自動的に作成する必要があります。update-initramfs -uinitramfsファイルを更新して、新しい設定と一致することを確認することもできます。テストが完了したら、/boot/bootUSBインストールの残りのサブディレクトリを削除できます。この方法は最も保守的な方法よりもきちんとした設定を作成しますが、GRUBをUSBに再インストールできない場合、起動に失敗する危険があります。

編集2に関して:

  1. SDカードの起動フォルダの場所を設定するようにgrubに指示する方法は? grub.cfgにこれを指定できますか? /dev/mmcblk0p1パーティション上のすべてのファイルをUSBフラッシュドライブの/boot/bootsdにコピーしました。

grub-mkconfigカーネルとinitramfsファイルを含むディレクトリを探したいだけです/boot。あなたの使命は、正しいファイルシステム/ディレクトリが存在するように状況を整理することです。これにより、すべてのカーネルとinitramfsの更新が自動的に正しく処理されます。

もう一つの解決策はにあります。その後、必要なパス名を使用できます。ただし、標準のカーネルパッケージは単にファイルをインストールし、同じディレクトリのinitramfsファイルにそのファイルを作成して実行するため、/etc/grub.d/40_custom直接更新する必要があります。標準の場所にある構成ファイルを更新します。vmlinuz-<version>/bootgrub-mkconfig

  1. USBフォルダ/boot/bootsdをSDカードの/bootに設定するには? fstabとシンボリックリンクを使用していますか?

まさに。追加のbootsdフォルダがあると、操作は少し複雑になりますが、可能です。項目fstabは次のとおりです。

UUID=aaaa-aaaa-a /usbkey <filesystem type> defaults 0 2

これにより、フォルダへの非記号的なリンクパスが/usbkey/boot/bootsd

/bootその後、SDファイルシステムの現在のディレクトリを別々に移動し、シンボリックリンクに置き換えることができます。

mv /boot /boot.old
ln -s /usbkey/boot/bootsd /boot

set root=<something>search ... --set=root ...GRUBがGRUB自体の目的のためのルートファイルシステムについて話すとき、これは単にGRUBがファイルをロードするファイルシステムのルートを意味することに注意してください。起動時に、GRUBはLinuxの単一の統合ディレクトリツリーを表示しません。デフォルトでは、一度に1つのファイルシステムのみを調べます。

GRUBの場合、この行root=のオプションはlinux <somewhere>/vmlinuz-<version> root=...Linuxカーネルのもう1つの起動オプションです。ただし、カーネルファイルおよび/またはinitramfsファイルの起動スクリプトの場合、このオプションはLinuxがルートファイルシステムとして使用するファイルシステムを指定します。

おすすめ記事