cryptsetup(8) различает в коде возврата ситуации, когда ошибка заключается в неподходящей парольной фразе, и иные; для кодов возврата, не равных 2, предлагаю не переспрашивать пароль. Иначе возможна ситуация, когда контейнер уже вскрыт в initrd (и device уже busy), а пароль тщетно переспрашивается ещё три раза. RETURN CODES Crypsetup returns 0 on success or non-zero on error. Error codes are: 1 wrong parameters, 2 no permission (bad passphrase), 3 out of memory, 4 wrong device specified, 5 device already exists or device is busy.
Я бы даже добавил тогда сначала вызов cryptsetup с пустой парольной фразой (на случай, если контейнер раскрыт в initrd, что весьма вероятно) и только потом запрос пароля, если проблема только в пароле. Так как с точки зрения пользователя, ввод пароля гораздо более дорогая операция, чем лишний вызов cryptsetup.
Зачем? Пустая не подойдёт, если её не было в слотах паролей, и вместо пятёрки получим двойку.
(В ответ на комментарий №2) > Зачем? Пустая не подойдёт, если её не было в слотах паролей, и вместо пятёрки > получим двойку. Хмм.. А разве сначала не доступность устройства проверяется? Надо код смотреть..
На мой взгляд, с 2012 года, логика поведения открытия криптоконтейнеров сильно улучшилась и описываемой проблемы уже не наблюдается. переоткройте, пожалуйста, эту ошибку и перевесьте на текущего ментейнера если я ошибаюсь.