Загрузка Raspberry Pi 3 с USB вместо microSD

Raspberry Pi — универсальная платформа для медиаплееров, ретро-эмуляторов, проектных контроллеров и радиопередатчиков. Одно из её ограничений для моделей до Pi 3 — отсутствие штатной загрузки с USB‑устройств. Для Raspberry Pi 3 можно включить «USB boot» через одноразовую настройку в OTP (one-time programmable) памяти и затем перенести образ Raspbian на USB‑накопитель. Ниже — подробная инструкция и рекомендации.
Начало: установка Raspbian и обновление файлов загрузки
Рекомендуется начинать с чистой копии Raspbian (в примере использовалась Raspbian Jessie). Установите систему на microSD обычным способом. После первого запуска подключитесь по SSH или через консоль и выполните команды, которые заменят стандартные файлы загрузчика
start.elfи
bootcode.binна актуальные версии:
sudo apt-get update
sudo BRANCH=next rpi-updateЭти команды поместят обновлённые файлы в каталог
/bootДалее включите режим USB‑загрузки командой, которая добавит параметр в конец файла config.txt:
echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txtПосле этого перезагрузите плату.
Проверьте, что новый флаг записался в одноразовую память (OTP):
vcgencmd otp_dump | grep 17:Если вы увидите что‑то вроде
17:3020000a— значит всё успешно. После этого параметр program_usb_boot_mode=1 можно удалить из /boot/config.txt, чтобы использовать microSD в другом устройстве без побочных эффектов.
sudo nano /boot/config.txtУдалите или закомментируйте строку, добавив # в начале.

Подготовка USB‑накопителя для загрузки
Подключите USB‑накопитель к свободному порту Raspberry Pi 3. Все данные на нём будут уничтожены — используйте накопитель, готовый к форматированию.
Определите имя диска в системе:
lsblkВ примере microSD — mmcblk0, USB — sda (раздел sda1). Если подключены другие USB‑устройства, имя может быть sdb, sdc и т.д.
Отмонтируйте диск и запустите parted для создания двух разделов: загрузочного (FAT32) 100 МБ и основного (ext4) — остальное пространство:
sudo umount /dev/sda
sudo parted /dev/sdaВ интерактивном режиме parted введите:
mktable msdosЕсли будет предупреждение о занятом диске — выберите Ignore и подтвердите удаление данных. Затем создайте разделы:
mkpart primary fat32 0% 100M
mkpart primary ext4 100M 100%
printВыйдите из parted (Ctrl+C или quit), затем создайте файловые системы:
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2Смонтируйте целевые разделы и подготовьтесь к копированию системы:
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 скопирует текущую установленную систему и займет некоторое время. Наберитесь терпения — можно сделать кофе.

Обновление ключей SSH и конфигурации chroot
Чтобы SSH‑ключи хоста обновились и соединение после перезагрузки оставалось корректным, выполните привязку виртуальных файловых систем и войдите в 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 приглашение сменится с pi@raspberrypi на root@raspberrypi.

Подготовка к перезагрузке с USB
Перед выключением нужно изменить параметры загрузки, чтобы корневой раздел указывал на USB‑диск.
Отредактируйте cmdline.txt, заменив указание на mmcblk0p2 на sda2:
sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txtАналогично правка для fstab — замените префикс /dev/mmcblk0p на /dev/sda:
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‑устройства.
Критерии приёмки
- Pi включается и проходит POST без microSD.
- Файловая система корня монтируется с /dev/sda2.
- Службы, включая SSH, стартуют успешно и принимают соединения.
- Файлы в /boot (config.txt, cmdline.txt) остались корректными и содержат нужную конфигурацию.
Чек‑лист перед началом (администратор)
- Сделать резервную копию microSD.
- Иметь под рукой USB‑накопитель с достаточным объёмом для образа.
- Доступ по SSH или консоли к Raspberry Pi.
- [ ] Обновить систему (
sudo apt-get update && sudo apt-get upgrade). - Иметь доступ к интерфейсу пользователя для проверки ошибок.
Чек‑лист для хобби‑пользователя
- Подготовить запасной microSD на случай отката.
- Использовать USB‑накопитель, на котором не жалко потерять данные.
- Следовать инструкциям последовательно, не пропуская шаги.
Короткая методика (мини‑план)
- Установить Raspbian и обновления.
- Выполнить
rpi-updateи добавитьprogram_usb_boot_mode=1в /boot/config.txt. - Перезагрузить и проверить OTP через
vcgencmd otp_dump. - Подготовить USB: parted → два раздела (100 МБ FAT32 + ext4).
- Скопировать систему через rsync на /dev/sda2 и /dev/sda1 (BOOT).
- Обновить SSH‑ключи через chroot.
- Правка cmdline.txt и /etc/fstab, выключение и извлечение microSD.
- Запустить Pi от USB и проверить логи.
Советы по устранению неполадок
Pi отказывается загружаться с USB:
- Убедитесь, что в OTP действительно записан флаг (
vcgencmd otp_dump | grep 17:→17:3020000a). - Проверьте, что разделы на USB размечены и отформатированы правильно (
sda1— FAT32,sda2— ext4). - Попробуйте другой USB‑порт (иногда питание/контроллер влияет).
- Для некоторых внешних накопителей может потребоваться отдельный источник питания.
- Убедитесь, что в OTP действительно записан флаг (
После загрузки проблемы с сетью или SSH:
- Обновите/пересоздайте SSH‑ключи в chroot, как описано выше.
- Проверьте
/etc/fstabиcmdline.txtна опечатки.
При ошибках rsync или прав доступа:
- Запустите rsync от root и используйте флаги
-axдля сохранения прав и ссылок. - Убедитесь, что /mnt/target/boot смонтирован и доступен.
- Запустите rsync от root и используйте флаги
Если устройство медленно загружается с USB:
- Некоторые флеш‑накопители имеют медленную скорость I/O; используйте SSD или качественный USB‑накопитель.
- Проверьте скорость командой
sudo hdparm -t /dev/sda(если доступно).
Альтернативные подходы и когда они подходят
- Сетевая загрузка (PXE): подходит для большого парка устройств и для централизованного управления. Требует настройки DHCP/TFTP/BOOTP.
- Использовать Raspberry Pi 4: у Pi 4 USB‑загрузка поддерживается нативно в новых прошивках, без необходимости правки OTP (проверьте версию прошивки).
- Оставить microSD как загрузчик, а основную систему хранить на USB: полезно, если вы хотите быстрый и гарантированный bootloader, оставив корень на внешнем диске.
Факт‑бокс: ключевые значения
- Размер загрузочного раздела: 100 МБ (FAT32).
- Формат корневого: ext4.
- Команды проверки OTP:
vcgencmd otp_dump | grep 17:. - Копирование системы:
sudo rsync -ax --progress / /boot /mnt/target.
Модель принятия решения
Если ваш проект требует высокой надёжности и скорости диска (медиа, БД, ретро‑эмуляторы) — USB‑SSD предпочтителен. Для простых проектов microSD остаётся актуальным и удобным. Если у вас много устройств — рассмотрите сетевую загрузку.
Советы по безопасности и конфиденциальности
- После клонирования системы обновите пароли и SSH‑ключи, чтобы избежать риска использования старых ключей на новом устройстве.
- Убедитесь, что сервисы, доступные извне, защищены (firewall, fail2ban, актуальные пакеты).
Резюме
Перевод Raspberry Pi 3 на загрузку с USB даёт преимущество использования быстрых накопителей и снижает износ microSD. Процесс занимает время, но технически прост: обновить загрузчик, записать флаг в OTP, подготовить USB‑разделы, скопировать систему и отредактировать конфигурации. Если возникнут проблемы — используйте чек‑листы и раздел «Устранение неполадок».
Готовы попробовать Raspberry Pi 4? У этой модели USB‑загрузка реализована более гибко, ознакомьтесь с её возможностями и спецификациями.
Важно: перед началом всегда делайте резервные копии и проверяйте команды — ошибка в разделе/форматировании может привести к потере данных.
Похожие материалы
Автоматическая отправка счетов из Google Sheets
Приложение камеры на Python с OpenCV и tkinter
Как удалить файл и папку в Linux — команды и советы
Как распознать вредоносный EXE‑файл
Автоответ в Gmail перед отпуском — настройка и шаблоны