Вопрос или проблема
Я купил SSD и хочу использовать его как хранилище на своем Raspberry Pi. Он форматирован, и когда я подключаю его к Pi, я вижу его с помощью:
> lsusb
Шина 001 Устройство 004: ID 152d:a580 JMicron Technology Corp. / JMicron USA Technology Corp. USB Mass Storage
# ... другие сведения здесь
lsblk
ИМЯ MAJ:MIN RM РАЗМЕР RO ТИП ТОЧКА МОНTAЖА
sda 8:0 0 1.8T 0 диск
├─sda1 8:1 0 16M 0 часть
└─sda2 8:2 0 1.8T 0 часть
mmcblk0 179:0 0 117.8G 0 диск
├─mmcblk0p1 179:1 0 256M 0 часть /boot
└─mmcblk0p2 179:2 0 117.5G 0 часть /
Итак, я смонтировал диск:
sudo mount -o uid=leonardo,gid=leonardo,umask=000 /dev/sda2 /shared/usb
Проверяю, что он смонтирован правильно:
lsblk
ИМЯ MAJ:MIN RM РАЗМЕР RO ТИП ТОЧКА МОНTAЖА
sda 8:0 0 1.8T 0 диск
├─sda1 8:1 0 16M 0 часть
└─sda2 8:2 0 1.8T 0 часть /shared/usb
mmcblk0 179:0 0 117.8G 0 диск
├─mmcblk0p1 179:1 0 256M 0 часть /boot
└─mmcblk0p2 179:2 0 117.5G 0 часть /
Все работает прекрасно!
Теперь я хочу, чтобы это происходило автоматически. После некоторого поиска в Google я решил установить правило udev:
sudo nano /etc/udev/rules.d/99-usb-mount.rules
Внутри файла:
KERNEL=="sda2", SUBSYSTEMS=="block", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="a580", ACTION=="add", RUN+="/bin/su leonardo -c '-o uid=leonardo,gid=leonardo,umask=000 /dev/sda2 /shared/usb'"
Затем я перезагружаю правила:
sudo udevadm control --reload-rules
Но ничего. Оно не монтируется автоматически, даже если я отключаю и снова подключаю его.
Почему? Что я делаю не так?
Ответ или решение
Проблема автоматического монтирования SSD-диска на Raspberry Pi с использованием правил udev может возникнуть по нескольким причинам. Рассмотрим все шаги в процессе настройки и основные моменты, на которые следует обратить внимание.
1. Правильность udev-правила
Сначала убедитесь, что ваше правило в файле /etc/udev/rules.d/99-usb-mount.rules
сформировано корректно. Обратите внимание на следующую запись:
KERNEL=="sda2", SUBSYSTEMS=="block", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="a580", ACTION=="add", RUN+="/bin/su leonardo -c 'mount -o uid=leonardo,gid=leonardo,umask=000 /dev/sda2 /shared/usb'"
2. Использование команды mount в udev
Команда mount
требует прав суперпользователя и может не выполняться корректно из-за отсутствия контекста пользовательского окружения при вызове через udev. Вместо этого рекомендуется использовать udisksctl
, который предназначен для автоматического монтирования устройств:
KERNEL=="sda2", SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/bin/udisksctl mount --block-device %N"
3. Проверьте, созданы ли все необходимые директории
Убедитесь, что директория /shared/usb
существует до монтирования. Если она не создана, mount
не сможет успешно выполнить свою задачу. Заранее создайте её:
sudo mkdir -p /shared/usb
4. Отладка правил udev
Чтобы отладить, почему ваше правило не срабатывает, выполните следующие действия:
- Проверьте логи системы. Используйте команду
journalctl -f
для просмотра сообщений, относящихся к udev. - Удостоверьтесь, что устройство действительно соответствует заданному правилу, используя
udevadm info --query=all --name=/dev/sda2
.
5. Убедитесь в наличии прав доступа
Если вы хотите использовать функционал для монтирования с определенными пользователями и группами, проверьте настройки прав к папкам и настройкам, чтобы убедиться, что они соответствуют вашим требованиям.
6. Редакция и перезагрузка правил
После всех изменений в файл правил не забудьте обновить кэш правил udev:
sudo udevadm control --reload-rules
sudo udevadm trigger
Заключение
Суммируя, наиболее эффективный способ автоматического монтирования нового USB-устройства на Raspberry Pi — это использование udisksctl
через udev. Убедитесь, что все директории существуют, права доступа установлены корректно, и следите за логами, чтобы отладить проблему. Если вы выполните предложенные шаги, это должно помочь вам устранить возникшие трудности и добиться нужного результата.