Как правильно подключить USB HDD или флешку к Raspberry Pi

Raspberry Pi 3. Правильное монтирование USB HDD и флешек

Дата Автор 48 комментариев 67 275 просмотров

В этой публикации из цикла статей о Raspberry Pi и Arduino я хочу рассказать о том, как правильно подключать внешние жесткие диски (USB HDD) к Raspberry Pi.

Монтирование жесткого диска обязательно потребуется, если «малину» планируется использовать для работы с контентом в домашней сети. Поэтому я хочу вынести инструкцию по монтированию HDD и флешек в отдельную статью, дабы иметь возможность ссылаться на нее в своих последующих публикациях.

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

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

Установке и настройке Raspbian на Raspberry Pi 3 посвящена статья «Raspberry Pi 3. Обзор и начало работы». В этой статье подразумевается, что OS Raspbian уже установлена и готова к работе.

Добавление в Raspbian поддержки NTFS

Скорее всего, используемый жесткий диск будет отформатирован в NTFS.

В OS Raspbian нет поддержки NTFS «из коробки», поэтому нужно установить соответствующий пакет:

sudo apt-get update
sudo apt-get install ntfs-3g

После этого можно приступить непосредственно к монтированию HDD.

Вариант 1. Монтирование USB HDD через fstab

fstab — конфигурационный файл, в котором описывается каждое из подключенных к компьютеру устройств хранения информации.

Добавлением строк в этот файл в *nix-системах совершается монтирование жестких дисков и других устройств.

Структура записей fstab выглядит так:

# <file system>        <dir>         <type>    <options>          <dump> <pass>

   /dev/cdrom         /mnt/cd         iso9660     ro,user,noauto,unhide   0      0

Наша цель — в правильной форме создать и записать строку для монтирования подключенного по USB жесткого диска (или флешки).

Настоятельно рекомендую перед редактированием файла fstab сделать бэкап системы, потому что ошибки в редактировании этого файла могут привести к тому, что Raspbian перестанет загружаться до конца, выдавая в процессе сообщение об ошибке. Новичка в *nix-системах это может сильно смутить.

Для начала найдем нужное нам значение <file system> для жесткого диска. Для этого при подключенном жестком диске нужно выполнить команду:

ls -l /dev/disk/by-uuid

В ответ на которую мы увидим нечто примерно такое:
Как правильно подключить USB HDD или флешку к Raspberry PiСтрока с /sda1 — наш жесткий диск. А написанное синим шрифтом — это как раз то, что мы ищем. Копируем эти символы куда-нибудь.

Теперь создадим точку монтирования:

sudo mkdir /mnt/usbstorage

Я решил, что мой смонтированный жесткий диск будет доступен по пути /usbstorage, но этот параметр может быть любым.

Ничто не мешает назвать точку монтирования /hdd1, /500gb, /media, /data или любым другим ранее не задействованным именем.

Название точки монтирования — это наше будущее значение <dir> в структуре записи fstab.

Теперь разбираемся со значением <type>.

Поле <type> — тут нужно будет указать файловую систему, в которой отформатирован наш накопитель. Если мы ранее пользовались Windows, то скорее всего жесткий диск отформатирован в NTFS. Менее вероятно — FAT32. Практически невероятно — EXT4 и другие применяемые в *nix-системах файловые системы.

Если ошибиться в указании файловой системы монтируемого жесткого диска, то это гарантированно приведет к ошибке во время загрузки Raspbian.

Далее идут опции монтирования (<options>). Они перечисляются через запятую. Рекомендую просто написать как у меня: «nofail,uid=pi,gid=pi».

И последними в структуре идут <dump> и <pass>.

Первый используется утилитой dump для создания резервных копий. Этот параметр нужно выставить «0».

Второй определяет приоритет, с которым утилита для сканирования и исправления ошибок fsck будет приступать к сканированию данного диска. Значением этого параметра может быть «0», «1» или «2», где «1» и «2» — приоритеты, а «0» — отключение. Я выставил «0», но можно поставить и «1» — особо это ни на что не влияет.

Таким образом, у меня формируется следующая строка для добавления в fstab:

UUID=E2CCEF5FCCEF2D0B /mnt/usbstorage ntfs nofail,uid=pi,gid=pi 0 0

Набор символов после UUID= нужно вставить свой, остальную часть строки можно использовать в таком виде без изменений.

Вставляем строку в fstab и сохраняем его:

sudo nano /etc/fstab

Как правильно подключить USB HDD или флешку к Raspberry Pi

Установка прав доступа

В завершении процедуры монтирования жесткого диска нужно выставить права доступа:

sudo chmod 777 /mnt/usbstorage

777 — полный доступ на чтение, запись и запуск файлов для всех пользователей. Рискованное с позиции безопасности разрешение, но гарантированно беспроблемное.

Если «малина» находится в домашней сети, то ничего страшного от выставления полного доступа для всех к примонтированному к ней жесткому диску не произойдет. Но в локальных сетях на предприятиях и на интернет-серверах полный доступ к файлам выставлять нельзя.

На этом процесс монтирования можно считать завершенным и остается только перезагрузить систему:

reboot

Вариант 2. Автоматическое монтирование через pmount

добавлено 08.01.2020

При использовании данного способа все подключаемые к «малинке» USB-накопители будут монтироваться автоматически.

Для этого нам потребуется установить утилиту pmount:

sudo apt-get install pmount

Затем создадим файл с правилами монтирования накопителя:

sudo nano /etc/udev/rules.d/usbstick.rules

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

ACTION=="add", KERNEL=="sd[a-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k"

Затем создадим новый сервис:

sudo nano /lib/systemd/system/usbstick-handler@.service

Впишем в него следующее содержимое:

[Unit]
Description=Mount USB sticks
BindsTo=dev-%i.device
After=dev-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/cpmount /dev/%I
ExecStop=/usr/bin/pumount /dev/%I

Создадим файл скрипта для монтирования:

sudo nano /usr/local/bin/cpmount

Со следующим содержимым:

#!/bin/bash
if mountpoint -q /media/usb1
then
   if mountpoint -q /media/usb2
   then
      if mountpoint -q /media/usb3
      then
         if mountpoint -q /media/usb4
         then
             echo "No mountpoints available!"
             #You can add more if you need
         else
             /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb4
         fi
      else
         /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb3
      fi
   else
      /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb2
   fi
else
   /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb1
fi

Сделаем скрипт исполняемым:

sudo chmod u+x /usr/local/bin/cpmount

И перезагрузимся:

sudo reboot

После этого все подключаемые к системе устройства будут автоматически монтироваться по адресам /media/usbX/, где X — порядковый номер устройства.

Заключение

Если с самого начала разобраться в процессе монтирования устройств в *nix-системах, то процесс подключения USB HDD к Raspberry Pi займет не более 5 минут.

Raspberry Pi 3B (английская сборка)в интернет-магазине GearBest Raspberry Pi 3B (китайская сборка)в интернет-магазине GearBest

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

48 комментария на «Raspberry Pi 3. Правильное монтирование USB HDD и флешек»

  1. Поправил в fstab строку, теперь она выглядит так
    UUID=B32738CA56783E6FF32 /mnt/usbdisk ntfs nofail,permissions,uid=pi,gid=pi 0 0
    Перегрузился
    Но всё равно не могу поменять права, так и висят 777

  2. К сожалению, не написано, как открыть для редактирования непосредственно сам файл fstab. А это самое важное тут.

    • Написано же:
      sudo nano /etc/fstab

      nano — консольный текстовый редактор, sudo — запуск от имени суперпользователя, /etc/fstab — путь к файлу

      • Для полных новичков с не установленным nano, может поставить их в тупик. Поэтому думаю стоило упомянуть про ее установку.

        sudo apt-get install nano

        Вот тогда редактор откроется.

        За туториал спасибо!

        • В обычном Raspbian Jessie он предустановлен по умолчанию уже). Хотя может в Lite-редакции его и нет, не проверял.

  3. Добрый день.
    У меня USB-HDD подключен к роутеру как медиахранилище.
    Возможно ли подключить к нему Raspberry?

    • Добрый день. Если роутер этот диск по Samba расшаривает, то можно к нему подключиться:
      https://www.opennet.ru/docs/HOWTO-RU/SMB-HOWTO-8.html

      А вот если роутер Xiaomi и у него какая-то хитрая система с доступом к медиахранилищу через свои приложения, то скорее всего нет.

      • zyxel giga II
        у него на борту transmission
        он качает из инета на себя всякое-разное и раздает в локальную сеть
        также есть возможность включить на роутере DLNA сервер
        будет через DLNA забирать?

        • Да, будет. Но по DLNA можно получать только медийный контент. Т.е. не софт, не архивы, не документы. Фильмы, музыка, фотографии — это можно.

  4. Здравствуйте. Есть проблема.
    Сделал все как написано в статье, но все равно сети не отображается сетевое хранилище и не могу понять почему, единственное что изменил в файле /etc/fstab вместо ntfs nofail,uid=pi,gid=pi, поставил rw,force,exec,users 0 0, но пробывал оставлять и так и так все равно сеть не видит хранилище также доступ 777 сделал, ничего не помогает, может из маршрутизатора Zexel

    • Может сетевое обнаружение в Windows отключено?

      Кроме того можно зайти напрямую, введя «\\raspberrypi» (или другое сетевое имя устройства, если оно менялось) в адресной строке проводника. Там должны отобразиться расшаренные ресурсы, на них можно создать ярлыки для быстрого доступа.

  5. А как восстановить обратно файлик fstab если распбери перестала загружаться после его редактирования?

    • Подключить монитор и клавиатуру, и открыть файл на редактирование после того как загрузка застопорится (sudo nano /etc/fstab). Удалить добавленные строки (после которых появились проблемы с загрузкой), сохранить изменения и перезагрузиться.

      Если команды в консоли не выполняются, то заново установить систему на карточку из файла образа или последнего бэкапа.

  6. Добрый день. Подключаю жесткий диск (NTFS), ввожу команду ls -l /dev/disk/by-uuid, но среди устройств жесткого диска нет. Что может служить причиной? Питание на RPI 2 Ампера, жесткий диск пробовал кидать на USB хаб с доп. питанием, но никаких изменений нет. Спасибо

    • Попробуйте вместо диска подключить что-то другое, например, флешку.

      Так будет понятнее в чем причина, в самом диске или у вас вообще дисковые носители почему-то не определяются.

      • Флешки определяет нормально. Если ввести команду sudo fdisk -l, то есть какая-то инфа по поводу HDD
        PS файлик fstab выглядит немного иначе, нежели у вас. У меня там нет UUID’ов

  7. Спасибо!
    Статья помогла, выполнил лишь
    apt-get update
    apt-get install ntfs-3g
    и проблемы исчезли.
    Теперь я могу сохранять файлы на внешнем носителе.

  8. Привет,
    Cпасибо за наводку про plex и hdd. Вопос скорее теоретического толка — что будет быстрее работать в контексте стриминга? Подмонтированный по smb диск, подключенный к usb роутера или диск подключенный по usb к малине?

    • На малине USB 2.0 и 10/100Mbit Ethernet, если на роутере так же, то разницы не будет.
      Если на роутере USB 3.0 и гигабитная LAN, то тяжелые файлы будут лучше проигрываться к подключенному к неу диска.

  9. Спасибо. Познавательно. Вопрос, если я подключаю флешку с несколькими разделами, два из которых нтфс и два ехт3, как быть в этом случае?

    • Если на флешке несколько разделов, то они все отобразятся при выполнении команды ls -l /dev/disk/by-uuid.
      Просто монтировать их по отдельности на разные пути, и для ext3 раздела прописать в fstab соответствующий тип файловой системы.

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

    • Есть платное приложение VirtualHere Linux USB Server, расшарить USB-порт можно через него. Других способов я не знаю, средствами самой ОС это вроде бы не делается.

  11. Привет всем!
    Сегодня решил проделать это, и есть изменения в схеме, так как эта схема не работает =//
    в файле, что изменяется нужно ставить не UUID имя переменной, а PARTUUID, почему… хз)
    Но есть момент, который поможет увидеть успешный результат ДО перезагрузки малинки — прописать команду: `sudo mount -a`. И если ничего не ругалось — то все ок и все работает.

    Вот так :)

    после перезагрузки чтоб понять, что все точно ок — можно зайти на этот носитель
    `
    cd /mnt/usbstorage
    ls
    `

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

    • Ещё заметил что при использовании transmission демона процесс mount.ntfs грузит процессор под 100%, настраивал всё по вашим гайдам. Насколько я понял из инета проблема в том, что торрент клиент постоянно делает мелкие записи, что очень нагружает проц потому как ntfs сам по себе очень ресурсо затратен под линукс. Может ли стать решением отформатировать внешний винт в exfat и полностью отказаться от ntfs, как думаете?

      • Добрый день, если диск планируется использовать постоянно подключенным к Raspberry Pi, то действительно лучше отформатировать его в ext4 вместо NTFS.

        А вот как сделать автомонтирование при переподключении USB-накопителя пока не могу ответить.

  13. День добрый! Совсем новичок в Линуксе, поэтому объясните, если не трудно. В чем необходимость/преимущества такого монтирования через fstab по сравнению с просто подключением диска без всего?
    Использую Raspberry pi 4 с Raspbian Buster. Подключил внешний жёсткий и он сразу стал доступен. Но в fstab записей никаких не появилось, конечно же. Интересно просто, что меняется при правильном монтировании? Или в Buster’e это просто уже не актуально и все монтируется автоматом как нужно?
    Заранее благодарен за ответ!

  14. Добрый день. Потянет ли pi3b 4 диска (2,5) подключенных по usb? или нужно организовывать для дисков отдельное питание? (остались 4 диска *500гб при переходе на ssd. хочется использовать).

    • Добрый день.
      Сомневаюсь. 2 диска без доп.питания еще может потянуть, но сразу 4 точно нет. Так что, да, нужно будет организовывать отдельное питание.

  15. Спасибо, так и думал. Подыскиваю что можно прикупить не сильно дорогое и с доп питанием.
    За статьи спасибо. Реально выручили!.

  16. Руководство обновлено, добавлено описание настройки автоматического монтирования накопителей через pmount.

  17. Как сделать что бы устройства монтировались в папку отличную от /media/usbX/
    заменил media на storage в файле cpmount, но смонтировалось все равно в папку /media/usbX/…???

  18. При монтировании SSD вторым способом скорость записи очень низкая.
    sudo dd if=/dev/mmcblk0 of=/media/usb1/Backup.img bs=8M conv=sync,noerror
    14.9747 s, 560 kB/s
    sudo umount /dev/sda1
    sudo mount /dev/sda1 /home
    sudo dd if=/dev/mmcblk0 of=/home/Backup.img bs=8M conv=sync,noerror
    23.4198 s, 12.2 MB/s
    Почему так? Можно исправить?

  19. Давай, может быть, как-то например так перепишем скрипт монтирования? :)

    #!/bin/bash

    AVAIL_MPOINTS=4
    MPOINT_NAM_TAMPL=udisk

    for (( i=1; i<=$AVAIL_MPOINTS; i++ ))
    do
    if ! mountpoint -q /media/$MPOINT_NAM_TAMPL$i
    then
    /usr/bin/pmount —umask 000 —noatime -w —sync $1 $MPOINT_NAM_TAMPL$i
    break
    fi

    echo No available mountpoints
    done

  20. Дмитрий, спасибо вам огромное за ваши подробные инструкции, благодаря вам я купил малинку 4ю — очень доволен!
    По вашей статье, так и не смог победить монтирование флешки после перезагрузки или внезапного отключения электричества, НО гугл помог)
    http://tdkare.ru/sysadmin/index.php/Usbmount
    Usbmount — для автоматического монтирования устройств USB
    Может кому то пригодиться.

  21. День добрый.
    raspberry pi 4. По USB подключаем винт NTFS и он прекрасно опознается.
    Только когда пропадает / появляется питание, raspberry не может стартовать с подключенным винтом.
    Приходится вытаскивать винт из USB, запускать raspberry и только потом снова подключать винт.
    Как это побороть? Чтобы после восстановления питания Raspberry нормально запускалась?
    Спасибо

  22. Добрый день! У меня чуть другой зверек. но это сути дела не меняет. в fstab монтирую флешку по дефолту. файловая система exfat. флешка тупо не хчет форматироваться в другую файловую систему. повторяю не хочет зависает при создании журнала ext4. поэтому только exfat. раздаю самбой. ресурс виден. но запись запрещена. куда рыть? 68 лет и голова не хочет отдупляться. неделю сижу. нужен тихий домашний серверок без крутилок типа харда. 2 тб ссд в продаже нет. да и затея по цене потеряет смысл.

    • Добрый день. Я бы предложил отформатировать флешку из Windows. Системная утилита в ext4 не форматирует, но есть много программ, которые это умеют — PartitionGuru, Partition Assistant и т.п.

      Если нет аппаратных проблем в самой флешке, то это решит проблему.

  23. Добрый день.
    Использую Raspberry pi 4. Установлено Volumio и подключена USB флешка, на которой имеется
    плейлист m3u для Web радио Radio Caprice.
    Как правильно указать URL этого плейлиста: 192.168.1.39… и что написать далее?

    • Добрый день, я не пользовался Volumio. Думаю, что надо посмотреть в документации по системе как вообще в нее подгружаются плейлисты. Думаю, что там есть какие-то стандартные папки для хранения медиафайлов, и нужно либо менять пути к ним, либо размещать файлы по этим стандартным путям.

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

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

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