Вопрос или проблема
У меня есть маленькая загрузочная система, которая требует доступа к устройствам хранения, но не на уровне данных (т.е. только команды встроенного ПО), за исключением USB-дискеты, данные которой считываются в сыром виде (без файловой системы, просто dd
).
Из-за этого поведения возникают проблемы:
- Некоторые устройства хранения заблокированы, что вызывает ошибки встроенного ПО при попытке чтения
- Поиск USB-дискеты не требуется и продлевает процесс загрузки
Я попробовал следующие команды:
systemctl disable systemd-udev-trigger.service
systemctl disable systemd-udevd.service
systemctl mask systemd-udev-trigger.service
systemctl mask systemd-udevd.service
systemctl stop systemd-udev-trigger.service
systemctl stop systemd-udevd.service
Однако это приводит к тому, что при подключении любых устройств не создается блочное устройство. Я понимаю, что udisks2
возможно когда-то использовался, но его нет в моей системе. Похоже, что blkid
может быть ответственным за доступ к блочным устройствам, так как я читал, что он пытается “найти/распечатать атрибуты блочного устройства”. Если это причина, то я не знаю, как это отключить.
Решения, требующие жесткого кодирования блочных устройств (например, /dev/sda), невозможны, так как я не знаю, какое обозначение будут иметь устройства.
Похоже, что этот вопрос может быть связан с проблемами, с которыми я сталкиваюсь, но его решения связаны с модификацией ядра, а если дело дойдет до этого, мне лучше просто смириться с лишними десятью секундами и раздражающими повторяющимися звуками поиска дискеты!
Как можно предотвратить эти операции чтения, оставаясь при этом способным получить доступ к устройству как к блочному устройству? Спасибо
Ответ или решение
Как предотвратить слив и зондирование блок-устройств в Debian Bookworm при подключении?
Введение
В операционной системе Debian Bookworm могут возникать проблемы с несанкционированным доступом к блочным устройствам во время загрузки. Вам необходимо обеспечить доступ к устройствам на уровне прошивки, исключая операции чтения, которые могут привести к ошибкам — особенно с устройствами, которые заблокированы от чтения. Более того, длительные операции зондирования затрудняют загрузку системы и создают лишние звуки при обращении к USB-дисководам. В этом руководстве мы рассмотрим, как устранить эти проблемы, не прибегая к модификации ядра и сохраняя возможность управления устройством.
Понимание проблемы
Когда система инициируется, службы управления устройствами, такие как systemd-udevd
, кожуют блоковые устройства и запускают множество сценариев и утилит, включая blkid
, целью которых является обнаружение и перечисление атрибутов блочных устройств. Это вызывает запросы на чтение данных с устройств, что может обратить внимание на ошибки или долгие задержки, особенно с USB-флоппи-дисководом.
Решение проблемы
-
Настройка systemd-udev:
Чтобы предотвратить сканирование блочных устройств во время загрузки, можно рассмотреть возможность создания правила для
udev
, которое минимизирует зондирование:$ echo 'ACTION=="add", KERNEL=="sd[a-z]*", ENV{UDISKS_IGNORE}="1"' | sudo tee /etc/udev/rules.d/99-no-media.rules
Это правило игнорирует блочные устройства, предотвращая их зондирование.
-
Отключение blkid:
Необходимо отключить автоматическое использование
blkid
. Вы можете сделать это, изменив конфигурацию системы. Один из способов — черезfstab
. Просто создайте запись, чтобы отключить автоматическое монтирование:UUID=none none auto noauto
Обратите внимание, что требуется заменить
UUID
на актуальный или игнорироватьblkid
полностью с помощью его конфигураций. -
Настройки загрузчика:
Вы можете дополнительно настроить параметры загрузчика, чтобы уменьшить нежелательное поведение. Например, в GRUB можно добавить параметры
quiet
иnomodeset
, чтобы минимизировать выдачу сообщений в процессе загрузки и уменьшить время задержки. -
Использование
uBlock
(если установлен):Если у вас есть утилита
uBlock
, можно её сконфигурировать для игнорирования определённых действий при использовании USB. -
Выявление проблем:
Для диагностики проблем с устройствами стоит использовать:
journalctl -xe | grep udev
или
dmesg | grep sd
Это поможет вам понять, какие устройства могут вызывать проблемы и какое поведение вызывает задержки.
Заключение
Эти рекомендации должны помочь вам избежать лишних операций зондирования и сократить время загрузки, сохранив при этом доступ к необходимым устройствам на уровне прошивки. Если ваши проблемы продолжают возникать, возможно, стоит рассмотреть возможность использования специализированного программного обеспечения для управления устройствами или обновление системы для получения последних улучшений и исправлений.