从外部USB记忆棒/驱动器启动?


44

我知道不可能直接从外部USB记忆棒/驱动器引导,而是必须从SD卡引导,然后外部设备才能接管。设置此方式最简单,首选的方法是什么,因此从SD卡启动然后由外部设备接管?

Answers:


37

如果您在Pi上运行了现有的操作系​​统,那么首先了解是否支持USB设备会很有用。您可以像平常一样通过安装它来做到这一点:

mount /dev/sda1 /mnt 

如果失败,那么您将无法在不启用USB内核模块的情况下将USB设备用作根分区。为此,您可能需要编译自己的内核。

如果成功,则可以通过对Pi使用的启动参数进行一些调整来正常工作:

在现有映像上,打开cmdline.txt,可以在引导分区上找到它,然后输入以下行:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 
root=/dev/sda1 rootfstype=ext4 rootwait text

然后,您所要做的就是将该映像刷新到SD卡并启动Pi。如果一切正常,/dev/sda1则应在Pi启动时将其放置在USB驱动器的位置,并因此应尝试使用该位置作为root用户。该rootwait参数很重要,因为它将使引导过程挂起,直到识别出USB驱动器为止。没有它,Pi可能会抱怨该位置不存在。

我建议您将根分区从现有的Raspberry Pi映像复制到USB驱动器,然后使用该分区从中启动。

让我知道您是否需要其他信息。


+1好答案。不应该console=...在那里吗?
亚历克斯·张伯伦

2
另外,您可以在命令行上使用UUID吗?
亚历克斯·张伯伦

是的,我提供了整个文件,您在哪里谈论使用UUID?
Jivings 2012年

3
非常感谢Jivings,我将正式图像“刷”到了USB记忆棒中,然后将内容从FAT分区复制到SD卡并调整了cmdline.txt。在我的情况下,根分区就是/ dev / sda2,因为/ dev / sda1是USB记忆棒上的(未使用的)启动分区。在我的情况下,我不需要rootwait,但是很高兴知道这个参数!
stefan.at.wpf 2012年

@ stefan.at.wpf(和Jivings)您可以使用UUID而不是/dev/sdx-至少在/etc/fstab/-中使用,然后x更改没有关系。
亚历克斯·张伯伦

4

进行此设置的最简单方法是使用BerryBoot。它支持通过美观的GUI界面直接从USB棒(或SD卡本身)上的一个或多个图像进行安装或从中进行安装。

要对其进行设置,只需将〜70MB的安装文件复制到FAT32格式的SD卡上,然后将其插入设备并启动即可。它甚至包含预配置映像的列表,它可以通过以太网或wi-fi连接自动为您下载并安装。

然后,从可用映像中选择要默认启动的操作系统,如果要添加新映像或在以后更改默认设置,只需在启动过程中按Enter键即可重新配置!


将图像移至SD卡?我以为我们想将其安装在USB记忆棒上?
Suhaib

正如OP所述,无法直接从Raspberry Pi上的USB记忆棒引导-您需要安装了引导加载程序的SD卡,一旦启动该程序即可将该过程移交给另一台设备。
内森·邓恩

2

好,请澄清-

进一步@Jivings答案-

您可以通过多种方式在fstab中引用磁盘。使用/ dev / sdXX可能并不总是安全的,因为无法保证scsi磁盘出现的顺序。

我不知道的是,启动配置是否了解基本设备标签以外的任何内容。但是,“ root = / dev / sda1”是一个抽象,因此从理论上讲root = LABEL = TEST可能有效。我需要调查

如果我不太清楚,我深表歉意。很明显,我在向新手介绍linux方面有一定的技巧。


1
Jivings:您能为我们的nubies解释一下comand行示例中的一些参数吗?谢谢。
Michael Moriarty

他从未提到过fstab。目标设备/分区名称是内核参数。我相信现代内核也可以使用其他命名约定,例如UUID,特别是如果它们具有initrd / initramfs模块。
jiggunjer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.