Следующее предложение простое, но, вероятно, могло бы быть более эффективным и надежным.
#!/bin/bash
tab=(one three five)
# grep_all's return status indicates if all patterns have at least
# one matching result in the text file specified as argument.
grep_all()
{
local -n patterns=$1 # allows to refer to an array
local file=$2
# abort if a pattern is not found
for pattern in "${patterns[@]}"; do
if ! grep -q -e "$pattern" "$file"; then
return 1
fi
done
}
grep_all tab file.txt
echo $?
Похоже, что в списке /proc/partitions
примерно 256 пар целых -дисков + разделов.
Это может означать, что устройство игнорирует поле Logical Unit Number (LUN )набора команд SCSI, используемого с USB-накопителями, и просто отвечает на запросы по каждому возможному номеру LUN. Это известная проблема с некоторыми устройствами хранения.
В качестве обходного пути -вам следует узнать идентификаторы производителя и продукта USB для внешнего жесткого диска. Вы можете сделать это с помощью команды lsusb
. Он должен выводить одну строку для каждого подключенного -USB-устройства, и эта строка должна выглядеть примерно так:
Bus 002 Device 005: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2
Шестнадцатеричные числа после ID
— это именно то, что вам нужно. В следующем примере я предполагаю, что ваше устройство имеет ID 1234:abcd
.
Следующим шагом является отключение запоминающего устройства и сообщение подсистеме хранения USB, что это устройство имеет одну -лунную причуду.
Документацию по известным возможным странностям USB-накопителей можно найти в исходной документации ядра(<source package>/Documentation/admin-guide/kernel-parameters.txt
).
Для однократного -тестирования можно сделать так:
echo "1234:abcd:s" | sudo tee /sys/module/usb_storage/parameters/quirks
Замените часть 1234:abcd
фактическими идентификаторами вашего устройства.Это не приведет к постоянным изменениям :, если это окажется бесполезным, простая перезагрузка вашей системы вернет вашу систему в исходное состояние.
Затем снова подключите накопитель. Если теперь он представляет только одно устройство, и устройство хранения работает правильно, обходной путь подходит для вашего устройства.
Чтобы сделать обходной путь постоянным, вам нужно будет сделать одну из двух вещей, в зависимости от того, предоставляет ли ваш дистрибутив Linux подсистему хранения USB в виде загружаемого модуля или как встроенный -в ядро. В комментариях вы упомянули Ubuntu, поэтому я предполагаю, что вы используете именно этот дистрибутив.
Создайте текстовый файл в каталоге /etc/modprobe.d/
. Вы можете назвать его как угодно, но имя должно иметь суффикс .conf
. Например, вы можете назвать его /etc/modprobe.d/usb-storage-fix.conf
.
Содержимое файла должно состоять из одной строки текста.:
options usb-storage quirks=1234:abcd:s
Снова замените часть 1234:abcd
фактическими идентификаторами вашего USB-накопителя.
Обратите внимание, что для создания или редактирования любых файлов в /etc/modprobe.d/
вам потребуется root-доступ, поэтому вы можете использовать команду, например sudo nano /etc/modprobe.d/usb-storage-fix.conf
, для создания файла и редактирования его содержимого.
После того, как вы создали файл, вам необходимо пересобрать файл initramfs на тот случай, если ваш дистрибутив загружает usb_storage
модуль ядра в начале процедуры запуска системы -. В Ubuntu это просто :просто запустите sudo update-initramfs -u
. Теперь обходной путь должен применяться автоматически при каждом подключении USB-устройства.
Альтернативным методом определения особенностей этого USB-накопителя может быть использование параметра загрузки ядра. Для этого вы обычно редактируете строку GRUB_CMDLINE_LINUX=""
в /etc/default/grub
, чтобы добавить параметр usb-storage.quirks=1234:abcd:s
к тому, что уже находится в двойных кавычках.
После редактирования файла вам потребуется пересобрать файл конфигурации GRUB; в Ubuntu это будет sudo update-grub
; в других дистрибутивах вам, возможно, придется использовать grub-mkconfig
напрямую,или используйте другую оболочку, специфичную для дистрибутива -.
Вы также можете отправить свои выводы по электронной почте в список рассылки разработчиков драйверов для USB -(linux -usb@vger.kernel.org ), чтобы они могли создавать будущие ядра. версии автоматически применяют обходной путь при обнаружении устройства этой модели. В ядре уже есть длинный список USB-накопителей со специфическими особенностями, так что в этом нет ничего особенно нового или необычного.