| Предыдущий | Следующий |
| EEXIST | ENODEV |
EXDEV
Почему операция «переместить» может завершиться ошибкой
EXDEV чаще всего появляется, когда код считает rename универсальной операцией перемещения. Переименование в файловой системе изменяет записи каталогов внутри одного смонтированного тома; это не механизм копирования. Если источник и назначение находятся на разных монтированиях, прямой rename не способен сохранить обычную атомарность и ядро возвращает EXDEV.
Для жёстких ссылок действует та же граница: обе записи каталога должны ссылаться на один объект одной файловой системы. Даже два внешне связанных пути монтирования могут считаться разными томами. Ошибка не означает, что пути неверны или недоступны.
Безопасная обработка
- Определяйте перемещение между файловыми системами до того, как полагаться на rename в атомарной публикации или замене.
- Создайте назначение копированием или потоковой передачей, проверьте результат и удаляйте источник только после полного успеха.
- Явно сохраняйте метаданные и требования к долговечности: fallback между файловыми системами сам по себе не становится атомарным.
- Если требовалась жёсткая ссылка, используйте символическую ссылку или измените размещение данных, когда ссылка должна пересекать границы файловых систем.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.