Настройка загрузки Raspberry Pi с USB HDD и SSD накопителей

Raspberry Pi. Загрузка с USB-накопителя

Дата Автор 20 комментариев 39 316 просмотров

Не так давно я описывал процесс установки сервера Home Assistant на Raspberry Pi и упоминал недостаток подобной системы: работающий Home Assistant может довольно быстро «убивать» microSD-карточки интенсивными операциями чтения-записи.

Выход из ситуации — установка системы на внешний HDD или SSD диск и загрузка микрокомпьютера с него.

Что нам понадобится

Для осуществления описываемых в этой статье действий понадобится:

  • Raspberry Pi 3 / 4
  • Внешний накопитель с USB-интерфейсом
  • microSD-карта (только для Raspberry Pi 3)

Хорошая новость — все свежие модели микрокомпьютеров линейки Raspberry Pi «из коробки» поддерживают загрузку с USB-накопителей. И только на старых моделях эту возможность нужно активировать вручную.

Активация загрузки с USB на Raspberry Pi 2 / 3

Только для Raspberry Pi 2/3
Пропускайте этот пункт, если пользуетесь Raspberry Pi 3B+ или Raspberry Pi 4.

Для появления возможности загрузки с USB-накопителей на Raspberry Pi 3 нужно активировать опцию USB Boot Mode путем внесения значения в OTP-память.

Для нужно загрузиться в Raspberry Pi OS с microSD-карты и добавить строчку с командой в файл config.txt:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

А затем перезагрузить систему:

sudo reboot

Во время следующей загрузки команда будет обработана и пропишет активирующее возможность загрузки с USB-дисков значение в OTP-память микрокомпьютера. Данная операция необратима. Но волноваться по этому поводу не стоит: активация USB Boot Mode не лишит вас возможности запускать «малинку» с microSD-карты, а всего лишь добавит новую опцию, которая активна по умолчанию в более свежих моделях микрокомпьютера.

Также обращу внимание, что из config.txt строка program_usb_boot_mode=1 сама по себе никуда не денется, поэтому после перезагрузки ее желательно оттуда удалить.

Установка системы

Установка операционной системы для Raspberry Pi на USB-накопитель ничем принципиально не отличается от установки на microSD-карту: нам все также потребуется скачать образ нужной системы и записать его на подходящий диск.

Удобнее всего использовать для этого специальную утилиту Raspberry Pi Imager, доступную под Windows, Ubuntu и macOS. В отличие от универсальных приложений для записи образов (Rufus, Win32DiskImager, balenaEtcher и т.п.), она может работать не только с локально хранящимися файлами, но и выкачивать нужный образ с сайта Raspberry Pi Foundation прямо в процессе записи.

Выбираем нужный образ из списка:

Настройка загрузки Raspberry Pi с USB HDD и SSD накопителей

Выбираем накопитель для записи:

Настройка загрузки Raspberry Pi с USB HDD и SSD накопителей

И дожидаемся окончания процесса:

Настройка загрузки Raspberry Pi с USB HDD и SSD накопителей

На этом все. Но если в дальнейшем планируется использовать Raspberry Pi в headless-режиме, то стоит сразу закинуть в корень получившегося загрузочного диска пустой файл с названием «ssh» без расширения. А если для подключения к сети будет использоваться беспроводной интерфейс, то туда же в корень нужно добавить файл wpa_supplicant.conf с данными для подключения к точке доступа:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=RU
network={
ssid="ИМЯ_ТОЧКИ_ДОСТУПА"
psk="ПАРОЛЬ_ОТ_ТОЧКИ_ДОСТУПА"
key_mgmt=WPA-PSK
}

Загрузка

Извлекаем из Raspberry Pi microSD-карточку с системой, подключаем к USB наш внешний диск и подаем питание.

Начнется загрузка с внешнего диска и через десяток-другой секунд система будет готова к работе.

Важный момент №1
При подключении внешнего жесткого диска потребляемая Raspberry Pi 4 мощность возрастает. Чтобы не столкнуться с нехваткой мощности для полноценной работы микрокомпьютера заранее позаботьтесь о наличии хорошего блока питания и качественного кабеля.
Важный момент №2
В некоторых случаях Raspberry Pi 4 может некорректно грузиться с подключенных к порту USB 3.0 накопителей. Если операционная система не стартует более минуты или пытается войти в Emergency Mode - переподключите жесткий диск в любой из портов USB 2.0. Да, скорость передачи данных по USB 2.0 будет ниже, зато работать будет надежнее.

Заключение

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

Буквально 10 минут работы позволяют в разы повысить надежность системы, отказавшись от использования карточек памяти с ограниченным ресурсом в пользу твердотельных накопителей или обычных HDD.

Микрокомпьютер Raspberry Pi 4
Микрокомпьютер Raspberry Pi 4

Broadcom BCM2711 | 2Gb/4Gb/8Gb RAM | 10/100/1000Mbit Ethernet

Купить на AliExpress

Автор статьи:
Дмитрий
Руководитель отдела в IT-компании. Веду этот блог с 2013 года, пишу о гаджетах и домашней автоматизации, обозреваю одноплатные компьютеры, неспешно собираю «умный дом».

20 комментария на «Raspberry Pi. Загрузка с USB-накопителя»

  1. Цитата:
    Для нужно загрузиться в Raspberry Pi OS с microSD-карты и добавить строчку с командой в файл config.txt:
    echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
    ====================================================
    А если открыть /boot/config.txt непосредственно в корне SD-карты и записать в него данную команду? Так возможно?

  2. Народ, растолкуйте, пож-та, как RPI 4 найдёт, с какого партишна внешнего диска грузиться?

    • При записи образа системы всегда создается раздел /boot, загрузка происходит с него.

      • Спасибо за ответ. Но как быть, если я хочу записать ещё одну систему (типа добавить ubuntu к rasbian), то надо, кроме копирования ubuntu на новый раздел с помощью dd, ещё и его /boot переписать? У меня, кстати, /sda1 смонтирован на /boot, но он не совсем boot:
        e2label: Bad magic number in super-block while trying to open /dev/sda1
        /dev/sda1 contains a vfat file system labelled ‘BOOT’

        • Вот тут не смогу ответить, ни разу еще не пробовал настраивать мультизагрузку.

          • Помучившись, выяснил, что .img файлы, поставляемые ubuntu, являются образом всего диска, как Вы и написали, и содержат в себе 2 раздела — fat с именем system-boot и ext4 writable.
            Как я понимаю, записывать их можно с помощью dd, но на весь диск ( типа /dev/sdc ), а не на partition (dev/sdc1). Мне этот вариант не подошёл, и удалось найти (накопать) другое решение — с помощью fdisk -lu узнать структуру файла .img, а потом mount -t [vfat,ext4] -o loop,offset=?,sizelimit=? обеспечивает доступ к каждому разделу отдельно.
            Я пока только в начале пути, так что больших подробностей об этом пока не знаю. Спасибо за помощь!

        • а попробуй как нибудь установить загрузчик grub чтоб можно было выбирать на какую ос загружаться

  3. Вопрос — а если мне надо, чтобы на этом диске кроме /boot и / (16G) был ещё раздел в формате NTFS/FAT32 (484G, чтобы можно было читать-писать в Win10)? Будет ли он тоже читаться? По умолчанию, на USB можно подсоединять любые диски, в том числе и NTFS/FAT32, и они будут читаться как внешние в /media/pi/имя_диска. А вот при загрузке с USB-диска куда будет подключен новый раздел?

  4. Добрый день! Подскажите, а почему через юсб 2.0 работает загрузка, а через юсб 3.0 нет? В чем именно причина? Почему просто, если как жесткий диск, то видится через ЮСБ 3.0, а система грузиться не хочет и только через 2.0? Это как-то можно исправить вообще?

    • У меня было тоже самое. Насколько я понял, проблема в неправильной поддержке UAS контроллером USB3.0-SSD
      Для исправления нужно узнать VID и PID вашего USB SSD
      Открыть /boot/cmdline.txt и добавить в начале строки текст вида:
      usb-storage.quirks=aaaa:bbbb:u, где aaaa — idVendor вашего устройства, а bbbb — idProduct

      https://forums.raspberrypi.com/viewtopic.php?t=245931

  5. А как быть, если имеется установленная и настроенная система на карте памяти и не хочется её переустанавливать? Как перенести систему с карты памяти на USB-SSD, отказавшись полностью от карты памяти?

    • Полностью скопировать содержимое карты памяти на SSD. Можно воспользоваться для этого утилитой dd, только пути к смонтированным устройствам надо будет поменять на правильные.

  6. А как использовать все пространство жесткого диска, если образ который сняли с флешки гораздо меньше объема диска, диск при записи образа становится объемом как та флешка, с которой сняли образ?

    • Расширить его через Raspberry Pi Software Configuration Tool:

      sudo raspi-config

      В Advanced Options надо выбрать выбрать пункт Expand Filesystem.

  7. Спасибо, для 3b+ проблем с переносом ОС на жесткий диск не возникло, а вот 3b ни как не получается запустить с диска…. все манипуляции уже провел. На 3b установлен Home Assistant.

    • В отсутствие интенсивных процессов создания-удаления файлов TRIM не нужен. Если сохранять не менее 20% свободного дискового пространства, то контроллер SSD и без TRIM эффективно проводит процедуры обслуживания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

[Хамство, оскорбления и попытки крауд-маркетинга будут удалены]