Загрузка с SSD

Материал из КРАТКАЯ СПРАВОЧНАЯ DIGITAL-ORGY
Перейти к навигации Перейти к поиску

Проблема с 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, которое обходит большинство проблем с таймингами и инициализацией без правки конфигов.