Загрузка с SSD
Проблема с Raspberry Pi 3B (именно старой версии, не 3B+) при загрузке с SSD, когда с флешки загрузка идет нормально, — это классическая ситуация. Тот факт, что плата начинает обращаться к диску (индикатор мигает один раз) и зависает, указывает на одну из трех проблем: нехватка питания (Voltage Drop), проблема с драйвером UAS или ошибки в старом Boot ROM самой платы.
Поскольку с флешки плата грузится, значит OTP-бит (program_usb_boot_mode=1) у вас уже активирован, и повторно его прописывать не нужно.
Вот пошаговое решение от самого надежного к более сложным.
Решение 1: Метод "SD-карта помощник" (Самое надежное для Pi 3B)
Встроенный в процессор Pi 3B загрузчик (Boot ROM) имеет ошибки и плохо работает с инициализацией SSD, которые «просыпаются» медленнее флешек. Самый простой способ обойти это — использовать пустую SD-карту только для старта.
Возьмите любую ненужную MicroSD карту (можно даже маленького объема, 512 МБ хватит). Отформатируйте её в FAT32. Скопируйте на неё с вашего SSD (или из образа системы) только один файл: bootcode.bin. Вставьте эту карту в Raspberry Pi, подключите SSD и включите питание. Как это работает: Pi 3B сначала обратится к SD-карте (это происходит мгновенно), считает оттуда более новую и "умную" версию bootcode.bin, которая затем корректно инициализирует USB SSD и передаст управление ему. Это решает 90% проблем с зависанием на старте.
Решение 2: Увеличение тайм-аута ожидания диска
SSD диски требуют больше времени на инициализацию контроллера, чем обычные флешки. Встроенный загрузчик Pi 3B ждет всего 2 секунды.
Загрузитесь с обычной SD-карты (или подключите SSD к компьютеру). Откройте файл config.txt в разделе boot. Добавьте в конец файла строку:
program_usb_boot_timeout=1
Сохраните и попробуйте загрузиться с SSD. Важно: Эта команда прошивает OTP-бит (One Time Programmable) в процессоре, увеличивая время ожидания до 5 секунд навсегда. Для Pi 3B это безопасная и рекомендуемая процедура при переходе на SSD.
Решение 3: Проблема с кабелем SATA-USB (Quirks / UAS)
Если индикатор на SSD мигает один раз и гаснет, а система виснет намертво, скорее всего, ваш переходник SATA-USB использует чипсет (часто JMicron), который некорректно работает с протоколом UAS (USB Attached SCSI) в Linux.
Вам нужно перевести драйвер в режим совместимости (Mass Storage).
Подключите SSD к ПК и откройте файл cmdline.txt (находится в корне загрузочного раздела, где и config.txt).
- Внимание: это одна длинная строка, не добавляйте переносы строк!
В начало строки добавьте параметр:
usb-storage.quirks=VID:PID:u
- Где VID:PID — это идентификаторы вашего USB-переходника.
Как узнать VID и PID:
На Windows: Диспетчер устройств -> Контроллеры USB -> Ваше запоминающее устройство -> Свойства -> Сведения -> ИД оборудования. Вы увидите что-то вроде USB\VID_152D&PID_0578.... В этом примере VID=152d, PID=0578.
На Linux (или загрузившись с SD на той же Pi): Введите команду lsusb. Найдите ваш диск, формат будет ID 152d:0578.
Пример готовой строки для cmdline.txt
usb-storage.quirks=152d:0578:u console=serial0,115200 console=tty1 root=... (далее старый текст)
Буква :u на конце отключает UAS для этого устройства.
Решение 4: Питание (Power Drop)
SSD потребляют в пике (при старте) значительно больше тока, чем флешки. Raspberry Pi 3B имеет лимит тока на USB около 1.2А на все порты суммарно.
Если у вас слабый блок питания (меньше честных 2.5А) или тонкий кабель питания — напряжение проседает в момент инициализации SSD, и контроллер диска отключается.
Решение: Попробуйте запитать SSD через USB-хаб с собственным питанием. Если через хаб загрузится — проблема 100% в блоке питания Raspberry Pi.
Резюме: что делать в первую очередь?
Попробуйте Решение 1 (bootcode.bin на пустой SD). Это специфическое "лекарство" именно для модели 3B, которое обходит большинство проблем с таймингами и инициализацией без правки конфигов.