Почему цикл mount -o возвращает «Нет такого устройства»?

Ошибка в GNU Parallel заключается в том, что он начинает обработку только после чтения одного задания для каждого слота заданий. После этого он читает одно задание за раз.

В старых версиях вывод также будет задерживаться на количество слотов заданий. В более новых версиях вывод задерживается только на одно задание.

Таким образом, если вы отправляете одно задание в секунду на parallel -j10, он будет считывать 10 заданий перед их запуском. В более старых версиях вам пришлось бы ждать еще 10 секунд, прежде чем вы увидите результат задания 3.

Обход ограничения при запуске состоит в том, чтобы подавать одно фиктивное задание на каждый слот задания в параллель:

true >jobqueue; tail -n+0 -f jobqueue | parallel &
seq $(parallel --number-of-threads) | parallel -N0 echo true >> jobqueue
# now add the real jobs to jobqueue

Обходной путь, который следует использовать для вывода --linebuffer(, но при этом будут смешаны полные строки из разных заданий ).

2
09.05.2020, 19:14
1 ответ

Я могу придумать несколько причин. Вероятно, более распространенным является то, что что-то не так с петлевыми устройствами, например, уже используется слишком много петлевых устройств. Вы можете проверить, так ли это, настроив петлевое устройство вручную :

.
# losetup --find --show file.iso
/dev/loop0
# mount -o ro /dev/loop0 mountpoint/
...
# losetup --detach /dev/loop0

Если первая команда не выводит допустимое устройство петли (/dev/loop*), но выдает сообщение об ошибке, то проблема заключается в самой инфраструктуре устройств петли. Посмотрите, показывает ли losetup -aкакие-либо устройства. Может быть достигнуто максимальное количество. В этом случае вы можете попробовать создать больше с помощью опции модуля max_loop(и перезагрузить )или вручную с помощью mknod, как описано в этом ответе .

Тем не менее, есть еще один вариант, который кратко описан на mountсправочной странице системного вызова :

.
ENODEV     filesystemtype not configured in the kernel.

Возможно, ваше ядро ​​не поддерживает требуемую файловую систему. В приведенном выше примере с использованием образа компакт-диска это будет iso9660. Попробуйте загрузить соответствующий модуль через

# modprobe iso9660

и повторите попытку. Если вы получаете modprobe: module iso9660 not found, то вам не повезло, потому что ваше ядро ​​вообще не поддерживает файловую систему и нет простого способа включить ее. Вы можете проверить поддерживаемые файловые системы, перечисленные в /proc/filesystems. Чтобы это заработало, вы должны перекомпилировать ядро ​​или, по крайней мере, соответствующий модуль (, соответствующий точной версии ядра, конечно ).

PS :Модуль называется isofsв новых ядрах, но, по крайней мере, для modprobeи его друзей существует псевдоним iso9660.

1
28.04.2021, 23:15

Теги

Похожие вопросы