Как загрузить Raspberry Pi 3 с USB-накопителя
TL;DR
Raspberry Pi 3 можно настроить для загрузки с USB-накопителя: включите USB-boot через OTP-флаг, скопируйте Raspbian на разделы USB-диска и поправьте конфигурационные файлы. Подходит для флешек, USB-SSD и внешних HDD; полезно для повышения надёжности и скорости по сравнению с microSD.

Raspberry Pi — универсальная плата для проектов: медиасерверы, ретро-игры, вещание FM и многое другое. До недавнего времени у неё была одна ограничение — загрузка с USB не была доступна прямо «из коробки». На моделях Raspberry Pi 3 это ограничение можно обойти: плата позволяет загрузиться с USB-устройства после включения соответствующего OTP-флага. Ниже — пошаговая инструкция, советы по совместимости и устранению проблем.
Подготовка: установите Raspbian и обновите файлы загрузчика
Лучше начинать с чистого образа Raspbian (в примере — Raspbian Jessie). Запишите образ на microSD, вставьте карту в выключенный Pi, подключите питание и зайдите по SSH.
Выполните обновление и установку актуальных файлов загрузчика. Это заменит файлы start.elf и bootcode.bin в /boot на свежие версии:
sudo apt-get update
sudo BRANCH=next rpi-updateОбновлённые файлы будут размещены в каталоге /boot. Затем включите режим загрузки с USB, добавив команду в конфигурацию:
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txtЭта команда добавляет строку program_usb_boot_mode=1 в конец /boot/config.txt.
Важно: после этого потребуется перезагрузка Pi.
Перезагрузите плату. Далее проверьте, установился ли OTP-флаг (one-time programmable memory):
vcgencmd otp_dump | grep 17:Если вывод содержит значение, похожее на 17:3020000a (например, 17:3020000a), значит флаг установлен. Можно удалить строку program_usb_boot_mode=1 из config.txt, если вы планируете использовать эту microSD-карту в другом Pi 3.
Откройте файл для редактирования, если нужно:
sudo nano /boot/config.txtЗакомментируйте или удалите строку (поставьте # перед строкой), чтобы не оставлять лишних настроек на карте.
Подготовка USB-накопителя для загрузки
Подключите USB-накопитель к свободному порту Pi 3. Диск будет отформатирован — убедитесь, что на нём нет нужных данных.
Определите имя устройства командой:
lsblkВ примере microSD — mmcblk0, а USB-флешка — sda (раздел sda1). У вас устройство может называться sdb, sdc и т. д.
Отмонтируйте диск и создайте таблицу разделов и два раздела: 100 МБ FAT32 (BOOT) и оставшееся пространство под ext4 (root):
sudo umount /dev/sda
sudo parted /dev/sdaВ интерактивном (parted) введите:
mktable msdos
mkpart primary fat32 0% 100M
mkpart primary ext4 100M 100%
printЕсли parted сообщает, что диск используется, выберите Ignore и подтвердите, что содержимое будет уничтожено. При необходимости можно переключиться в графическую среду и убедиться, что диск не монтирован.
Затем создайте файловые системы:
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2Теперь смонтируйте целевые разделы и скопируйте текущую систему на USB-диск с сохранением прав и метаданных:
sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/
sudo apt-get update; sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/targetКоманда rsync скопирует корневую систему и /boot — это может занять длительное время в зависимости от скорости диска.
Обновление SSH-ключей и chroot
Чтобы после перезагрузки не получить конфликт ключей SSH, обновите host-ключи в новой системе. Для этого используйте chroot и перегенерацию ключей:
cd /mnt/target
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount procПримечание: после sudo chroot вы будете под root (приглашение изменится с pi@raspberrypi на root@raspberrypi) до ввода команды exit.
Подготовка к перезагрузке с USB
Перед выключением нужно изменить параметры, указывающие корневой раздел и fstab. Измените cmdline.txt так, чтобы root указывал на /dev/sda2 вместо /dev/mmcblk0p2:
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txtПотом подправьте /etc/fstab:
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstabОтмонтируйте целевые файловые системы и выключите плату:
cd ~
sudo umount /mnt/target/boot
sudo umount /mnt/target
sudo poweroffОтключите питание, выньте microSD-карту, затем снова подайте питание — Raspberry Pi должна загрузиться с USB-накопителя.
Примечание: при проблемах подключите SD-карту обратно — она служит удобным инструментом восстановления.
Типичные проблемы и решения
- Устройство не загружается: убедитесь, что OTP-флаг действительно установлен (vcgencmd otp_dump). Если флаг не выставлен, повторите шаг с echo program_usb_boot_mode=1 и перезагрузите.
- Некорректный root в cmdline.txt: проверьте, что там ровно одна строка и root=/dev/sda2 заменил root=/dev/mmcblk0p2.
- USB-накопитель требует больше времени для инициализации: попробуйте другой корпус/адаптер USB, используйте активный USB-хаб или SSD с отдельным питанием.
- Совместимость: не все USB-флешки и адаптеры поддерживают загрузку; флешки китайских контроллеров или WD Green/Blue в некоторых конфигурациях могут не загружаться.
Когда этот способ не подходит
- Если требуется PXE/сетевой загрузчик — используйте сетевую загрузку или специализированные решения.
- На Raspberry Pi 4 механизм загрузки с USB другой: у Pi 4 есть собственные опции загрузки в EEPROM, инструкция для Pi 3 здесь не применима напрямую.
Альтернативы и варианты
- Сетевая (PXE) загрузка — полезна для централизованного управления большим парком плат.
- Использование USB-SSD через отдельный контроллер с хорошей совместимостью — заметно ускоряет работу.
- На Pi 4 используйте встроенную поддержку USB-boot и обновление EEPROM вместо OTP-флага.
Краткие рекомендации и эвристики
- Для стабильности предпочитайте качественные SSD в корпусе USB и проверенные кабели.
- Всегда делайте резервную копию данных перед изменением таблицы разделов.
- Если миграция выполняется на рабочем устройстве, сначала протестируйте процедуру на отдельной плате.
Контрольный список (для хоббиста и администратора)
Хоббист:
- Имеется резервная microSD-карта с оригинальным образом Raspbian
- USB-накопитель готов к форматированию
- Подключение по SSH настроено
- Выполнен rpi-update и выставлен program_usb_boot_mode
Администратор/внедрение:
- Проверена совместимость USB-накопителя с массовыми образцами
- Автоматизирован процесс копирования образа (скрипт)
- Тесты восстановления и отката отработаны
- Документированы serial/SSH ключи и сетевые настройки
Небольшой глоссарий в одну строку
- OTP: одноразово программируемая память, флаг в контроллере загрузки, который включает USB-boot.
- cmdline.txt: файл с параметрами ядра и указателем корневого раздела.
- /boot: раздел, содержащий загрузочные файлы Raspberry Pi.
FAQ
Работает ли этот метод на Raspberry Pi 4?
Нет — у Pi 4 другой механизм загрузки (EEPROM). Для Pi 4 используйте официальные инструкции по обновлению EEPROM и включению USB-boot.
Нужно ли оставлять program_usb_boot_mode=1 в config.txt после установки?
Нет, после того как OTP-флаг установлен, запись в config.txt можно убрать — флаг хранится в аппаратной памяти.
Какие USB-накопители лучше использовать?
Лучше SSD в качественном USB-корпусе или проверенные USB-накопители от известных производителей. Избегайте дешёвых контроллеров без отзывов о совместимости.
Итог
Перенос загрузки Raspberry Pi 3 на USB даёт преимущества по надёжности и скорости по сравнению с microSD. Основные шаги: обновить загрузочные файлы, включить USB-boot через OTP, подготовить разделы USB-накопителя, скопировать систему и изменить cmdline.txt с fstab. Проведите тесты и имейте резервные копии.
Краткие выводы:
- Процедура необратима для одной платы (OTP), но безопасна при правильном выполнении.
- Не все USB-устройства совместимы — проверяйте заранее.
- Для Pi 4 используйте отдельную инструкцию.
Если нужно, подготовлю сценарий автоматизации (bash-скрипт) для клонирования и настройки USB-boot или рекомендации по выбору SSD/адаптера.
Похожие материалы
Оплата при доставке в WordPress — подключение COD
Где смотреть плей‑офф MLB: каналы и стримы
Как полностью закрыть приложение на Android
Фильтровать диаграмму в Excel — Windows и Mac
Как поделиться местоположением в Facebook Messenger