Nginx удаленный файл все еще скачивает
Сценарий:
- Создайте случайный файл (в данном случае 1024M)
dd if=/dev/zero of=file bs=1M count=1024
- Инициировать загрузку (
curl src > /dev/null
) - Удалить файл с сервера
- Керл еще скачивает
100%, 1024M
Как это возможно, если файл удален на сервере?
Сервер имеет 512M
RAM и нет SWAP, файл не может быть прочитан все в RAM. Таким образом, он должен был прочитать с диска в какой-то момент. Тем не менее, файл перестал существовать в середине загрузки, так почему же nginx все еще позволяет людям продолжать загрузку?
2 ответа
Решение
После начала загрузки веб-сервер открывает исходный файл и не закрывает его, пока не будут отправлены все данные. Удаление файла не остановит процесс, у которого файл открыт для чтения и записи в него. Только когда процесс закроет файл, он будет удален ядром.
True: блоки данных (и индекс) освобождаются, когда счетчик ссылок получает 0 И ни один процесс не имеет открытого файла.