В этой публикации из цикла статей о Raspberry Pi и Arduino я хочу рассказать о том, как правильно подключать внешние жесткие диски (USB HDD) к Raspberry Pi.
Монтирование жесткого диска обязательно потребуется, если «малину» планируется использовать для работы с контентом в домашней сети. Поэтому я хочу вынести инструкцию по монтированию HDD и флешек в отдельную статью, дабы иметь возможность ссылаться на нее в своих последующих публикациях.
Содержание
Что нам понадобится
Для осуществления описываемых в этой статье действий понадобится:
- Raspberry Pi 3 Model B
- Внешний жесткий диск
Установке и настройке 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
В ответ на которую мы увидим нечто примерно такое:
Строка с /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
Установка прав доступа
В завершении процедуры монтирования жесткого диска нужно выставить права доступа:
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
Поправил в fstab строку, теперь она выглядит так
UUID=B32738CA56783E6FF32 /mnt/usbdisk ntfs nofail,permissions,uid=pi,gid=pi 0 0
Перегрузился
Но всё равно не могу поменять права, так и висят 777
Ну ntfs-систем нет особо понятия прав доступа как в ехт, поэтому там все как 777 для линуха)
К сожалению, не написано, как открыть для редактирования непосредственно сам файл fstab. А это самое важное тут.
Написано же:
sudo nano /etc/fstab
nano — консольный текстовый редактор, sudo — запуск от имени суперпользователя, /etc/fstab — путь к файлу
Для полных новичков с не установленным nano, может поставить их в тупик. Поэтому думаю стоило упомянуть про ее установку.
sudo apt-get install nano
Вот тогда редактор откроется.
За туториал спасибо!
В обычном Raspbian Jessie он предустановлен по умолчанию уже). Хотя может в Lite-редакции его и нет, не проверял.
Добрый день.
У меня USB-HDD подключен к роутеру как медиахранилище.
Возможно ли подключить к нему Raspberry?
Добрый день. Если роутер этот диск по Samba расшаривает, то можно к нему подключиться:
https://www.opennet.ru/docs/HOWTO-RU/SMB-HOWTO-8.html
А вот если роутер Xiaomi и у него какая-то хитрая система с доступом к медиахранилищу через свои приложения, то скорее всего нет.
zyxel giga II
у него на борту transmission
он качает из инета на себя всякое-разное и раздает в локальную сеть
также есть возможность включить на роутере DLNA сервер
будет через DLNA забирать?
Да, будет. Но по DLNA можно получать только медийный контент. Т.е. не софт, не архивы, не документы. Фильмы, музыка, фотографии — это можно.
Если используемый жесткий диск будет отформатирован не в NTFS, а в ext4. Что изменится?
Особо ничего. Только нужно будет в fstab вместо «ntfs nofail,uid=pi,gid=pi» указать «ext4 defaults».
Подозреваю, что для ext4 сойдёт и «auto defaults» :)
Здравствуйте. Есть проблема.
Сделал все как написано в статье, но все равно сети не отображается сетевое хранилище и не могу понять почему, единственное что изменил в файле /etc/fstab вместо ntfs nofail,uid=pi,gid=pi, поставил rw,force,exec,users 0 0, но пробывал оставлять и так и так все равно сеть не видит хранилище также доступ 777 сделал, ничего не помогает, может из маршрутизатора Zexel
Может сетевое обнаружение в Windows отключено?
Кроме того можно зайти напрямую, введя «\\raspberrypi» (или другое сетевое имя устройства, если оно менялось) в адресной строке проводника. Там должны отобразиться расшаренные ресурсы, на них можно создать ярлыки для быстрого доступа.
А как восстановить обратно файлик fstab если распбери перестала загружаться после его редактирования?
Подключить монитор и клавиатуру, и открыть файл на редактирование после того как загрузка застопорится (sudo nano /etc/fstab). Удалить добавленные строки (после которых появились проблемы с загрузкой), сохранить изменения и перезагрузиться.
Если команды в консоли не выполняются, то заново установить систему на карточку из файла образа или последнего бэкапа.
Добрый день. Подключаю жесткий диск (NTFS), ввожу команду ls -l /dev/disk/by-uuid, но среди устройств жесткого диска нет. Что может служить причиной? Питание на RPI 2 Ампера, жесткий диск пробовал кидать на USB хаб с доп. питанием, но никаких изменений нет. Спасибо
Попробуйте вместо диска подключить что-то другое, например, флешку.
Так будет понятнее в чем причина, в самом диске или у вас вообще дисковые носители почему-то не определяются.
Флешки определяет нормально. Если ввести команду sudo fdisk -l, то есть какая-то инфа по поводу HDD
PS файлик fstab выглядит немного иначе, нежели у вас. У меня там нет UUID’ов
Спасибо!
Статья помогла, выполнил лишь
apt-get update
apt-get install ntfs-3g
и проблемы исчезли.
Теперь я могу сохранять файлы на внешнем носителе.
Привет,
Cпасибо за наводку про plex и hdd. Вопос скорее теоретического толка — что будет быстрее работать в контексте стриминга? Подмонтированный по smb диск, подключенный к usb роутера или диск подключенный по usb к малине?
На малине USB 2.0 и 10/100Mbit Ethernet, если на роутере так же, то разницы не будет.
Если на роутере USB 3.0 и гигабитная LAN, то тяжелые файлы будут лучше проигрываться к подключенному к неу диска.
Спасибо. Познавательно. Вопрос, если я подключаю флешку с несколькими разделами, два из которых нтфс и два ехт3, как быть в этом случае?
Если на флешке несколько разделов, то они все отобразятся при выполнении команды ls -l /dev/disk/by-uuid.
Просто монтировать их по отдельности на разные пути, и для ext3 раздела прописать в fstab соответствующий тип файловой системы.
Это все как бы хорошо, но вот в чем проблема.
Таким образом рассшаривается конкретный диск, возможно ли сразу рассшарить усб порт, что любой диск подключающийся в порт автоматически становился доступным по сети?
Есть платное приложение VirtualHere Linux USB Server, расшарить USB-порт можно через него. Других способов я не знаю, средствами самой ОС это вроде бы не делается.
Привет всем!
Сегодня решил проделать это, и есть изменения в схеме, так как эта схема не работает =//
в файле, что изменяется нужно ставить не UUID имя переменной, а PARTUUID, почему… хз)
Но есть момент, который поможет увидеть успешный результат ДО перезагрузки малинки — прописать команду: `sudo mount -a`. И если ничего не ругалось — то все ок и все работает.
Вот так :)
после перезагрузки чтоб понять, что все точно ок — можно зайти на этот носитель
`
cd /mnt/usbstorage
ls
`
Есть проблема если внешний диск постоянно дёргать туда сюда, приходится каждый раз перегружаться чтобы система вновь его увидела.
Есть какое нибудь решение чтобы автоматически подхватывало когда диск вернулся?
Ещё заметил что при использовании transmission демона процесс mount.ntfs грузит процессор под 100%, настраивал всё по вашим гайдам. Насколько я понял из инета проблема в том, что торрент клиент постоянно делает мелкие записи, что очень нагружает проц потому как ntfs сам по себе очень ресурсо затратен под линукс. Может ли стать решением отформатировать внешний винт в exfat и полностью отказаться от ntfs, как думаете?
Добрый день, если диск планируется использовать постоянно подключенным к Raspberry Pi, то действительно лучше отформатировать его в ext4 вместо NTFS.
А вот как сделать автомонтирование при переподключении USB-накопителя пока не могу ответить.
День добрый! Совсем новичок в Линуксе, поэтому объясните, если не трудно. В чем необходимость/преимущества такого монтирования через fstab по сравнению с просто подключением диска без всего?
Использую Raspberry pi 4 с Raspbian Buster. Подключил внешний жёсткий и он сразу стал доступен. Но в fstab записей никаких не появилось, конечно же. Интересно просто, что меняется при правильном монтировании? Или в Buster’e это просто уже не актуально и все монтируется автоматом как нужно?
Заранее благодарен за ответ!
Здравствуйте! Buster еще не устанавливал, посмотрю.
Добрый день. Потянет ли pi3b 4 диска (2,5) подключенных по usb? или нужно организовывать для дисков отдельное питание? (остались 4 диска *500гб при переходе на ssd. хочется использовать).
Добрый день.
Сомневаюсь. 2 диска без доп.питания еще может потянуть, но сразу 4 точно нет. Так что, да, нужно будет организовывать отдельное питание.
Спасибо, так и думал. Подыскиваю что можно прикупить не сильно дорогое и с доп питанием.
За статьи спасибо. Реально выручили!.
Руководство обновлено, добавлено описание настройки автоматического монтирования накопителей через pmount.
Там в «sudo nano usr/local/bin/cpmount» не забываем / перед usr
Точно, сейчас поправлю
Как сделать что бы устройства монтировались в папку отличную от /media/usbX/
заменил media на storage в файле cpmount, но смонтировалось все равно в папку /media/usbX/…???
При монтировании 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
Почему так? Можно исправить?
Давай, может быть, как-то например так перепишем скрипт монтирования? :)
#!/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
Дмитрий, спасибо вам огромное за ваши подробные инструкции, благодаря вам я купил малинку 4ю — очень доволен!
По вашей статье, так и не смог победить монтирование флешки после перезагрузки или внезапного отключения электричества, НО гугл помог)
http://tdkare.ru/sysadmin/index.php/Usbmount
Usbmount — для автоматического монтирования устройств USB
Может кому то пригодиться.
День добрый.
raspberry pi 4. По USB подключаем винт NTFS и он прекрасно опознается.
Только когда пропадает / появляется питание, raspberry не может стартовать с подключенным винтом.
Приходится вытаскивать винт из USB, запускать raspberry и только потом снова подключать винт.
Как это побороть? Чтобы после восстановления питания Raspberry нормально запускалась?
Спасибо
Добрый день! У меня чуть другой зверек. но это сути дела не меняет. в fstab монтирую флешку по дефолту. файловая система exfat. флешка тупо не хчет форматироваться в другую файловую систему. повторяю не хочет зависает при создании журнала ext4. поэтому только exfat. раздаю самбой. ресурс виден. но запись запрещена. куда рыть? 68 лет и голова не хочет отдупляться. неделю сижу. нужен тихий домашний серверок без крутилок типа харда. 2 тб ссд в продаже нет. да и затея по цене потеряет смысл.
Добрый день. Я бы предложил отформатировать флешку из Windows. Системная утилита в ext4 не форматирует, но есть много программ, которые это умеют — PartitionGuru, Partition Assistant и т.п.
Если нет аппаратных проблем в самой флешке, то это решит проблему.
Добрый день.
Использую Raspberry pi 4. Установлено Volumio и подключена USB флешка, на которой имеется
плейлист m3u для Web радио Radio Caprice.
Как правильно указать URL этого плейлиста: 192.168.1.39… и что написать далее?
Добрый день, я не пользовался Volumio. Думаю, что надо посмотреть в документации по системе как вообще в нее подгружаются плейлисты. Думаю, что там есть какие-то стандартные папки для хранения медиафайлов, и нужно либо менять пути к ним, либо размещать файлы по этим стандартным путям.