Bug 60645
| Summary: | При верификации записанного образа на Xfce возникает ошибка | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Цой Павел Денисович <tsojpd> |
| Component: | tailor-adw | Assignee: | qualimock <qualimock> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | qualimock |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
Воспроизводится, причина — гонка между автомонтированием в сессии Xfce и открытием устройства для проверки.
Проверено на Альт Образование 11.2 (Xfce), обновлённом до Sisyphus на 2026-09-22: tailor-adw-1.0.0-alt1, udisks2-2.11.2-alt1, thunar-4.21.6-alt1, thunar-volman-plugin-4.20.0-alt1 (automount-drives и autobrowse включены по умолчанию), образ alt-server-11.1-x86_64.iso. Чтобы отделить проблему от GUI, повторил последовательность вызовов tailor к UDisks2 скриптом (src/service/operation/device-handle-linux.vala): unmount → Block.OpenForRestore → запись образа блоками по 1 МиБ → close → Block.OpenForBackup. Устройство — блочное с HintAuto=true (не USB-флешка), поэтому автомонтирование срабатывает так же, как для флешки.
Таймлайн (секунды от начала):
28.118 запись 4905 МиБ завершена, дескриптор закрыт
28.131 OpenForBackup OK (устройство ещё свободно)
38.311 OpenForBackup: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Error opening device /dev/nbd0: Device or resource busy
findmnt: /dev/nbd0p1 смонтирован в /run/media/test/ALT Server 11.1 x86_64
Дальше все попытки открыть устройство отвечают тем же.
Что происходит: после закрытия записывающего дескриптора ядро/udev перечитывают таблицу разделов isohybrid-образа, thunar-volman автомонтирует первый раздел и (autobrowse) открывает его в Thunar — это второй симптом из описания. OpenForBackup в udisks — это open(O_RDONLY|O_EXCL) на целый диск (udisks/src/udiskslinuxblock.c:2741), при смонтированном разделе он даёт EBUSY, отсюда «Device or resource busy». tailor между write и verify эксклюзивный дескриптор не держит и повторно unmount не делает (unmount только перед записью, flash-operation.vala:99), так что результат зависит от того, кто успеет раньше — у репортёра на настоящей флешке успело автомонтирование. Прогресс-бар при переходе к верификации не сбрасывается, поэтому ошибка видна «на 100 %».
Варианты исправления:
1. Один Block.OpenDevice("rw", flags=O_EXCL) на обе фазы: записать, fsync, lseek(0) и читать тем же дескриптором — пока он открыт, смонтировать раздел невозможно (так делает Fedora Media Writer).
2. Минимально: перед OpenForBackup повторно вызвать unmount() для всех разделов диска и повторять открытие при EBUSY.
|

Description
Цой Павел Денисович 2026-09-21 14:59:12 MSK