Чтобы ответить на ваш первый вопрос:
Это не ошибка, это то, как Unix системы, в том числе Linux, всегда работали.
Есть даже хороший текст в POSIX spe c:
[EBUSY] Удаляемый каталог в настоящее время используется системой или каким-либо процессом, и реализация считает это ошибкой.
А именно, некоторые реализации (например, Windows ...) могут назвать это ошибкой, но большинство реализаций. а именно Unix вариантов, нет.
Способ, которым это реализовано в файловой системе, заключается в том, что процессы хранят ссылку на объект, который представляет каталог. Другая вещь, которая содержит такую ссылку, является родительским каталогом. git rebase
удалил последнюю ссылку, но первая остается. Даже если каталог создается заново, это новый объект файловой системы, в то время как ваша оболочка содержала ссылку на старый объект.
Именно поэтому cd ..
и cd $(pwd)
все еще работают - они повторно ищут каталог и захват новой ссылки, и освободите старую ссылку.
Официально старый объект не очищен, пока старая ссылка не выпущена. Это означает, что метаданные каталога не удаляются с диска до тех пор, пока процесс не освободит старый рабочий каталог.
Чтобы ответить на второй вопрос:
Чтобы извлечь диск, необходимо демонтируйте точку монтирования, и, как указано выше, процессы, которые вы обнаружите с помощью fuser
, содержат ссылки на эту точку монтирования.
Как и в случае ссылок на каталог, точку суммы нельзя очистить, пока не будут удалены все ссылки на нее. Вот почему вы не можете извлечь диск, на котором есть ссылки.
Единственное, что нужно сделать, это разрешить отсоединение файловой системы от дерева каталогов без фактической очистки. Вы по-прежнему не сможете извлечь диск, но, по крайней мере, вы можете использовать дерево каталогов так, как вы: sh.
Ну, это действительно возможно сделать с umount --lazy
.