Загрузка с внешнего USB-накопителя?

44

Я знаю, что невозможно напрямую загрузиться с внешнего USB-накопителя / накопителя, но вместо этого вам придется загружаться с SD-карты, и тогда внешнее устройство может вступить во владение. Какой самый простой и предпочтительный способ настройки, поэтому загрузитесь с SD-карты и затем включите внешнее устройство?

stefan.at.wpf
источник

Ответы:

37

Если у вас есть существующая ОС, работающая на Pi, то сначала было бы полезно узнать, поддерживается ли устройство USB. Вы можете сделать это, установив его как обычно:

mount /dev/sda1 /mnt 

Если это не удастся, вы не сможете использовать 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должно быть местоположение USB-накопителя при загрузке Pi, и поэтому он должен попытаться использовать это местоположение в качестве корневого. Этот rootwaitпараметр важен, поскольку он заставит процесс загрузки зависать до тех пор, пока USB-накопитель не будет распознан. Без этого Пи может жаловаться на то, что местоположение не существует.

Я предлагаю вам скопировать корневой раздел из существующего образа Raspberry Pi на USB-накопитель и использовать его для загрузки.

Дайте мне знать, если вам нужна дополнительная информация.

Jivings
источник
+1 Отличный ответ. console=...Уже не должно быть там?
Алекс Чемберлен
2
Кроме того, вы можете использовать UUID в командной строке?
Алекс Чемберлен
Да, я предоставил весь файл, и где вы говорите об использовании UUID?
Jivings
3
Большое спасибо Jivings, я «прошил» официальное изображение на свою флешку, затем скопировал материал с FAT partiiton на SD-карту и настроил cmdline.txt. В моем случае корневым разделом является / dev / sda2, потому что / dev / sda1 - это (неиспользуемый) загрузочный раздел на флешке. Мне не нужен rootwait в моем случае, но приятно знать этот параметр!
stefan.at.wpf
@ stefan.at.wpf (и Jivings) Вы можете использовать UUID вместо /dev/sdx- по крайней мере, в /etc/fstab/- тогда это не имеет значения, если xизменения.
Алекс Чемберлен
4

Самый простой способ настроить это - использовать BerryBoot . Он поддерживает установку или извлечение одного или нескольких изображений на USB-накопителе (или на самой SD-карте) из коробки через приятный графический интерфейс.

Чтобы настроить его, все, что вам нужно сделать, это скопировать ~ 70 МБ установочных файлов на SD-карту, отформатированную в FAT32, вставить ее в устройство и загрузить. У него даже есть список предварительно настроенных образов, которые он может автоматически загрузить и установить для вас через соединение Ethernet или Wi-Fi.

Затем вы выбираете операционную систему, которую вы хотите загрузить по умолчанию, из имеющихся у вас образов, и, если вы хотите добавить новые образы или изменить настройки по умолчанию позднее, вы просто нажимаете enter во время процесса загрузки, чтобы перенастроить!

Натан Данн
источник
переместить изображение на SD-карту? Я думал, что мы хотим установить его на флешку?
Сухайб
Как указывалось в ОП, загрузка Raspberry Pi с USB-накопителя невозможна. Вам нужна SD-карта с установленным загрузчиком, которая может перевести процесс на другое устройство после включения питания.
Натан Данн
2

хорошо, чтобы уточнить -

далее к ответу @Jivings -

Существует несколько способов обращения к диску в fstab. Использование / dev / sdXX не всегда может быть безопасным, так как порядок появления scsi-дисков может быть не гарантирован.

Чего я не знаю, так это того, понимает ли конфигурация загрузки что-либо кроме основных меток устройства. Однако root = / dev / sda1 - это абстракция, поэтому теоретически root = LABEL = TEST может работать. Мне нужно расследовать.

Я прошу прощения, если я не очень ясно. Очевидно, у меня есть некоторый опыт в объяснении Linux новым людям.

Nox
источник
1
Jivings: не могли бы вы объяснить некоторые параметры в вашем примере командной строки для нас, нубийцев? Спасибо.
Майкл Мориарти
Он никогда не упоминал fstab. Имя целевого устройства / раздела является параметром ядра. Я считаю, что другие соглашения об именах, такие как UUID, возможны в современных ядрах, особенно если они имеют модули initrd / initramfs.
jiggunjer