TGViewer
Гепардово гнездо Гепардово гнездо @gepardchan · 617 subscribers
Post #20 284
Худшая файловая система в мире

Познакомьтесь. Это EvilFS, который работает через FUSE:
https://pastebin.com/B9KSe0Z0

Инструкция по применению:
- желательно запускать на GNU/Linux
- установите libfuse2 из системного пакетного менеджера и pyfuse через pip
- запустите скрипт
- после запуска скрипта создастся папка рядом со скриптом. Зайдите в нее из командной строки и попробуйте прочитать файлы в ней
- не получилось? Поздравляю, вы застряли :D
- хотите убить процесс, читающий файл, с помощью SIGKILL? Поздравляю, его убить нельзя :D

К счастью, выпутаться из неприятной ситуации возможно: достаточно просто убить сам процесс EvilFS, тогда у использующих ее процессов произойдет разрыв соединения, и их можно будет завершить.

Как это работает?
Все просто. EvilFS реализуется через FUSE — это возможность создавать файловые системы полностью в userspace. Процесс EvilFS как раз создает такую файловую систему и монтирует ее, а в ходе работы обрабатывает все запросы в нее.

Так вот: на запрос open() (т.е. открыть файл) EvilFS просто начинает висеть, подвешивая и того, кто пытается файл открыть. Т.е. мы не можем прочитать файл, потому что его открытие зависает.

Но почему процесс нельзя убить, пока он пытается открыть плохой файл? Здесь вступает в дело понятие uninterruptible sleep (a.k.a. непробудный сон). Он происходит тогда, когда процесс завис в системном вызове, который нельзя прервать (т.к. не все системные вызовы умеют возвращать EINTR). Например, open() прервать нельзя. Во время непробудного сна процесс не принимает никакие сигналы (даже SIGKILL!), то есть, его нельзя убить. Понятно, что зависнуть в open()'е в естественных условиях — дело редкое, но возможное в случае сетевых ФС или медленного диска. А вот в случае с FUSE такое зависание нетрудно воспроизводится в домашних условиях.

Продолжение следует...
  • 🤯 2
More from @gepardchan
  1. Sep 7, 2025Итак, расскажу о том, что я сделал еще давно, но про что все никак не доходили руки написа…
  2. Dec 10, 2024https://habr.com/ru/post/472970/ Статья 2019 года, то есть довольно старая, с учетом того,…
  3. Nov 30, 2024Сегодня читал про то, как Debian везде перешел на 64-х битный time_t. Изменение войдет в р…
  4. Nov 26, 2024https://www.ryanliptak.com/blog/every-rc-exe-bug-quirk-probably/ Не знаю, как вы, а я прос…
  5. Nov 22, 2024Еще про проклятые фичи баша https://yossarian.net/til/post/some-surprising-code-execution-…
  6. Nov 21, 2024Про переписывание истории В баше (а точнее, в GNU Readline, который используется башом), е…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →