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つの問題がさらに発生します。
SDカードの起動フォルダの場所を設定するようにgrubに指示する方法は? grub.cfgにこれを指定できますか? /dev/mmcblk0p1パーティション上のすべてのファイルをUSBフラッシュドライブの/boot/bootsdにコピーしました。
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カードベースのシステムに/boot
USBスティックディレクトリが自動的にインストールされるように準備する必要があります。/boot
USBスティックにはすでに/bootディレクトリがあるため、/etc/fstab
USBスティックを別の場所にマウントするように設定し、/boot
それへのシンボリックリンクを作成する必要があるかもしれません/wherever_the_USB_is_mounted/boot
。
その後、実行してgrub-mkconfig -o /tmp/test-grub.cfg
/ tmp /にダミーテストgrub.cfgファイルを自動的に生成し、それをUSBスティックのアクティブファイルと比較し、結果がUSBスティックに適していることを確認します。テストするには、grub.cfg
USBスティックのファイルを横に移動して生成されたファイルに置き換えることができます。機能している場合は、「USBから起動、SDのルートファイルシステム」シナリオを使用するときにシステムがカーネルアップデートを実行できるようになります。これは、必要な変更を実行する最も保守的な(最も危険ではない)方法でなければなりません。
または、SDをルートファイルシステムとしてシステムを起動したら、カーネルファイルとinitramfsファイルを現在のディレクトリから/boot
USBスティックのルートディレクトリにコピーし、それを次のようにマウントしてから、次のように/boot
USBスティックにGRUBを再インストールできます。あります。次のコマンドgrub-install
。新しい状況に合わせて、新しいgrub.cfgファイル(現在のUSBスティックファイルシステムのルートにある)にさまざまなパスを自動的に作成する必要があります。update-initramfs -u
initramfsファイルを更新して、新しい設定と一致することを確認することもできます。テストが完了したら、/boot/boot
USBインストールの残りのサブディレクトリを削除できます。この方法は最も保守的な方法よりもきちんとした設定を作成しますが、GRUBをUSBに再インストールできない場合、起動に失敗する危険があります。
編集2に関して:
- SDカードの起動フォルダの場所を設定するようにgrubに指示する方法は? grub.cfgにこれを指定できますか? /dev/mmcblk0p1パーティション上のすべてのファイルをUSBフラッシュドライブの/boot/bootsdにコピーしました。
grub-mkconfig
カーネルとinitramfsファイルを含むディレクトリを探したいだけです/boot
。あなたの使命は、正しいファイルシステム/ディレクトリが存在するように状況を整理することです。これにより、すべてのカーネルとinitramfsの更新が自動的に正しく処理されます。
もう一つの解決策はにあります。その後、必要なパス名を使用できます。ただし、標準のカーネルパッケージは単にファイルをインストールし、同じディレクトリのinitramfsファイルにそのファイルを作成して実行するため、/etc/grub.d/40_custom
直接更新する必要があります。標準の場所にある構成ファイルを更新します。vmlinuz-<version>
/boot
grub-mkconfig
- 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がルートファイルシステムとして使用するファイルシステムを指定します。
答え2
私の状況
先週、新しい高速nvmeカードを搭載したコンピュータにXubuntuをインストールし、コンピュータが起動時にカードを認識しませんでした。
XubuntuはインストーラUbiquityを使用し、インストール中にパーティションウィンドウで手動パーティションを意味する「その他」を選択しました。
- ルートを分割しましたが、/、nvmeカードに
- ブートパーティションを分割しました。/開始する、SSDに接続すると起動時に認識されます。
あなたの状況
私の考えでは、現在Debianインストーラで非常に似たようなことができるようです。別のブートパーティションとプライマリパーティションを持つ既存のテキストモードDebianインストーラを使用して手動でパーティションを分割しました。新しいインストーラがそうしないと、古いテキストモードのインストーラに戻ることができます。
- ルートパーティションを配置し、/、メモリカードに保存します(PCIを介して接続されている場合は
mmcblk0
最初のパーティションと見なされますmmcblk0p1
)。 - ブートパーティションを配置し、/開始する、USBフラッシュドライブに。
その後、インストーラにタスクを実行させます。