Внешний жесткий диск raspberry pi

Raspberry Pi – подключение USB HDD

Пошаговая инструкция по подключению USB HDD к миникомпьютеру Raspberry Pi .

Не так давно купил себе USB жесткий диск на один терабайт и решил его подключить к Raspberry Pi, чтобы немного почистить ноутбук и дать больше места торренту. Я предполагал, что моей Micro-USB зарядки на 0,7 A не хватит для нормальной работы жесткого диска – это и подтвердилось на практике. Raspberry Pi просто отказывался загружаться, вываливая кучу ошибок.

Заказал себе новый источник питания током на 2 Ампера и повторил попытку – загрузка прошла успешно.

По инструкции, найденной в Интернете, установил пакет ntfs-3g и смонтировал USB HDD на Raspberry Pi. Диск определился нормально.

Настроил доступ к нему по сети через Samba и закинул парочку файлов. Все шло как по маслу.

На радостях перенастроил Torrent на новое место — вот тут и начались косяки. Torrent клиент Transmission отказывался качать файлы, выдавая ошибку:

Error: No data found! Ensure your drives are connected or use «Set Location». To re-download, remove the torrent and re-add it.

Не найдя в Интернете рабочего решения, я обратился к другу за помощью — он и помог решить мне эту проблему.

В результате представляю вашему вниманию пошаговую инструкцию по подключению USB HDD с файловой системой NTFS к миникомпьютеру Raspberry Pi.

1. Подключаем USB HDD к Raspberry Pi

2. Для поддержки NTFS необходимо установить пакет ntfs-3g. Для этого в консоли набираем команду:

sudo apt-get install ntfs-3g

3. Создаем каталог, в который будем монтировать наш USB HDD

sudo mkdir /mnt/usbdrive

4. Устанавливаем права на запись на этот каталог

sudo chmod 777 /mnt/usbdrive

5. Прописываем в конец файла /etc/fstab команду авто монтирования нашего USB HDD:

/dev/sda1 /mnt/usbdrive ntfs-3g defaults,rw 0 1

В результате файл /etc/fstab должен выглядеть примерно так:

rw — указан для того, чтобы USB HDD не монтировался в режиме “Read only”.

6. Перезагружаем Raspberry Pi командой:

sudo reboot

На этом процесс подключения USB HDD к миникомпьютеру Raspberry Pi завершен.

Источник

Сказ о Raspberry и внешнем HDD. Первый опыт разработки под платформу

Доброго времени суток, Хабр! Пару недель назад зачесались руки гика — захотелось мне приобрести довольно нашумевший и всем известный одноплатный мини-компьютер Raspberry Pi. Модель была выбрана самая «крутая» — версия «B» с 512Mb ОЗУ на борту.

Этот пост о другом. После всех манипуляций с настройкой захотелось попробовать машинку, так сказать, «в деле». Идея возникла практически сразу. Дома у меня имеется 3 компьютера, 2 смартфона, бюджетный роутер, и внешний жёсткий диск на 2Tb — Seagate Expansion External. Интерфейс подключения у HDD — USB. Роутер из разъёмов имеет только Ethernet и дырку для шнура электропитания. Все мои устройства соединяются с роутером только по WiFi, и ни одно не может работать в постоянном режиме. Но тут появляется Raspberry. Миниатюрные размеры платы позволяют разместить систему вида [HDD RPi DIR300NRU(роутер) LAN] прямо на подоконнике и использвать диск в локальной сети, а её мизерное энергопотребление позволяет держать включенной практически постоянно. RPi работает под управлением семейства ОС Linux, а именно я на неё установил Raspbian. Казалось бы, поставить сервер samba и расшарить диск… но это было бы слишком просто. Конечная задача усложнилась: необходимо делать внешний диск доступным в локальной сети, только в том случае, если мой смартфон к этой сети в данный момент подключён, иначе диск размонтировать, тем самым снижая на него нагрузку и его энергопотребление. Значит писать будем демон, и писать будем на Python. Поехали!

Первым делом, первым делом. samba!

Сначала нужно настроить самбу и железо. Цепляем хард к Малине через USB, Малину к роутеру по Ethernet. Всё включаем в розетку. Коннектимся по SSH к RPi, я использую PuTTY под Windows в качестве клиента.
В Raspbian «из коробки» нет возможности подключить NTFS-раздел диска для записи, монтируется он только как Read-Only и не пускает к себе по локальной сети.
Не беда, сейчас установим нужный драйвер:

Дальше нам нужно знать имя раздела для монтирования, узнаём так:

И получаем примерно такой вывод:

Disk /dev/sda: 2000.4 GB, 2000398931968 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029164 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006573a

Device Boot Start End Blocks Id System
/dev/sda1 2048 409602047 204800000 83 Linux
/dev/sda2 409602048 419842047 5120000 82 Linux swap / Solaris
/dev/sda3 419842048 3907028991 1743593472 7 HPFS/NTFS/exFAT

Внешний HDD у меня имеет имя sda, раздел обзывается sda3, у вас может быть другое. Запоминаем его.
Дальше смотрим куда монтировать. По умолчанию диск автоматически монтируется в /media/Имя_тома. Я решил не заморачиваться и оставить его там. Путь к директории у меня: /media/DataR.

Теперь настраиваем сам сервер samba. Открываем файл конфигурации для записи:

Про настройку можно подробно прочитать в сети, я лишь приведу свой файл конфигурации:

Настроили? Идём дальше. Проверяем работоспособность всей конструкции. Монтируем раздел (сначала размонтируем, на всякий), перезапускаем сервер samba.

Если ошибок не наблюдается, то пробуем найти сервер в сети. Если и тут всё нормально, то идём дальше.

Пишем скрипт

Писать будем на Python. Интерпретатор нам уже доступен предустановленным на Raspbian. Я решил писать сразу в консоли:

Что нам нужно:

  • Проверять, доступен ли IP в локальной сети
  • Выполнять системные команды
  • Ждать некоторое время
  • Зациклить всё это дело

Итак, первым делом импортируем нужные модули:
Далее всё уместится в маленьком бесконечном цикле:

Это минимально работоспособный вариант, но я решил его чуть модифицировать, добавив возможность настройки и вывод отладочных сообщений в консоль. Готовый вариант выглядит вот так:

Итоги

Получилось, что можно настроить абсолютно всё, а также отключить (раз)монтирование раздела. Осталось прописать на устройстве статический IP для подключения к нашей локальной сети и всё, своеобразный ключ доступа к диску готов! Для полной автоматизации можно добавить скрипт в автозагрузку при старте системы. Открываем системный файл rc.local:

И дописываем в него следующую строчку:

Путь, конечно, указываете свой.
Вот и всё, спасибо за прочтение! Это был мой первый опыт разработки под Raspberry Pi, да и под Linux вообще.

UPD1: спасибо, что подсказали насчёт перезагрузки и автозапуска, первое выкинул, второе поправил

Источник

Raspberry Pi: файловая система на внешнем диске

Файловая система на SD карте — при некоторых обстоятельствах может стать большой головной болью владельцев Raspberry Pi. Дело в том, что современные бюджетные SD-карты (и SSD) имеют весьма ограниченный ресурс записи. В зависимости от типа: QLC — около 1 тыс, самые распространенные сегодня TLC 3D NAND — 3 тыс циклов перезаписи. И только однослойная версия SLC имеет до 100 тыс циклов.

Чем это плохо? Для обычного пользователя — ничем. Но если ваши приложения сильно нуждаются в оперативной памяти, они начинают активно использовать своп — участок накопителя, который становится расширением ОЗУ. Ясно, что этот своп будет интенсивно уменьшать ресурс NAND памяти.

Второй пример — Raspberry Pi в качестве видерегистратора или системы журналирования. Та же история. На носитель ведется непрерывная запись данных: видеопотоки раз за разом записываются поверх своих старых версий.

Дополнительный шок — смерть файловой системы на SD-карте после аварийного отключения питания. На своих Raspberry Pi, используемых для учебных целей мы наблюдали такое не раз.

Как с этим бороться? Заставить Raspberry Pi работать с внешним HDD накопителем. В отличие от NAND памяти, классические жесткие диски трудятся десятилетиями при интенсивной нагрузке. Этим и займемся!

Перенос файловой системы на внешний USB накопитель

К сожалению, полностью избавиться от SD-карты на Raspberry Pi проблематично, так как без неё операционная система не сможет загрузиться. Как минимум, на SD-карте должен остаться раздел boot. А вот всё остальное — rootfs, можно и нужно вынести на внешний USB накопитель. Делаем по шагам.

1. Скачиваем образ Raspbian с официального сайта

2. Копируем его на внешний диск при помощи программы balenaEtcher или Raspberry Pi Imager

3. Теперь нам нужно подготовить загрузочную SD-карту. Операцию будем проводить из Linux с помощью утилиты parted. Подойдет карта размером 4 Гб — меньше уже трудно найти. Если нет машины с linux, можно использовать raspberry pi с USB-картридером.

С помощью команды lsblk выводим список всех носителей и ищем там нашу карту.

Обнаружить карту можно по размеру. При написании этой статьи была использована карта размером 4Гб. Вот она, в самом низу списка — sdc.

Создаем новую таблицу разделов (disk label):

Затем создаём раздел с файловой системой fat32:

Форматируем созданный раздел:

Наконец, копируем файлы из директории /boot внешнего диска на SD карту с помощью команды rsync:

Готово. Теперь у нас есть SD-карта с загрузочным разделом.

4. Выясняем UUID внешнего диска и SD карты с помощью команды

В ответ получим список разделов, подключенных к машине, например:

Нам нужны идентификаторы PARTUUID. Здесь идентификатор boot раздела SD-карты: 7c077b54-01, а PARTUUID раздела rootfs внешнего USB-накопителя: ea7d04d6-02

5. Редактируем файл /boot/cmdline.txt на SD карте:

5.1. В строке запуска заменим идентификатор хранилища rootfs, подставив туда UUID USB-диска из пункта №4.

5.2. В конце добавим rootdelay=5 (чтобы у Kernel было больше времени на ожидание готовности USB устройства)

6. На внешнем USB диске редактируем /etc/fstab:

6.1. Удаляем строчку, в которой директория /boot ассоциируется с USB диском, например, такую:

6.2.Вместо этой строчки добавляем свою:

Здесь 7c077b54-01 — это PARTUUID SD-карты из пункта №4.

Готово. Перезапускаем Raspberry Pi и пользуемся.

Важно! Все описанные работы потенциально опасны для ваших данных, рекомендуем сделать резервные копии.

Источник

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

Не так давно я описывал процесс установки сервера 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

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

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

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

Во время следующей загрузки команда будет обработана и пропишет активирующее возможность загрузки с 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 в headless-режиме, то стоит сразу закинуть в корень получившегося загрузочного диска пустой файл с названием «ssh» без расширения. А если для подключения к сети будет использоваться беспроводной интерфейс, то туда же в корень нужно добавить файл wpa_supplicant.conf с данными для подключения к точке доступа:

Загрузка

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

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

Заключение

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

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

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

Уведомления о статьях. 0% рекламы.

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

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

Да, так тоже можно

Народ, растолкуйте, пож-та, как 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 чтоб можно было выбирать на какую ос загружаться

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

Не проверял, но наверняка также в /media/.

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

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

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

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

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

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

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

Вы озабачивались функцией TRIM при переезде на SSD?

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

В статье ошибка, raspberry pi 2 не может загрузиться с USB.

Источник

Adblock
detector