Ошибка «su файл занят» (в системе она чаще выглядит как text file busy или «файл используется другим процессом») возникает, когда бинарник su в этот момент выполняется или удерживается работающим процессом, а вы пытаетесь его заменить, удалить или обновить. Типичный сценарий — обновление root-решения (например, Magisk или SuperSU) на Android либо замена бинарника в Linux, пока какая-то служба держит его открытым.
Проблема не критична сама по себе: это защитный механизм ядра, который не даёт изменить исполняемый файл «на лету». Однако если действовать наугад, можно потерять root-доступ или привести систему в нерабочее состояние. Ниже — безопасный порядок диагностики и решения.
Почему система сообщает, что файл su занят
Ядро Linux (и Android как его наследник) блокирует запись в исполняемый файл, пока он загружен в память хотя бы одним процессом. Это касается и su: если в фоне работает демон root-менеджера, открыта root-сессия в терминале или приложение с root-правами держит сессию открытой, замена бинарника будет отклонена.
Возможные причины чаще всего такие:
- 🔒 Активная root-сессия в терминале или через
adb shell— пока она открыта, su считается исполняемым. - ⚙️ Фоновый демон root-менеджера (например, служба Magisk или старого SuperSU) удерживает бинарник.
- 📱 Приложение с root-доступом (файловый менеджер, брандмауэр, твикер) в данный момент использует su.
- 💾 Файл находится на разделе, смонтированном в режиме только для чтения, и система сообщает о занятости некорректно.
Отдельный случай — повреждённая или прерванная установка root-решения, когда старый бинарник «завис» в памяти, а новый записаться не может. Тогда помогает только перезагрузка или переустановка через рекавери.
Быстрая диагностика: кто держит файл
Прежде чем что-то менять, стоит выяснить, какой процесс использует su. Для этого понадобится терминал с доступом к системе (на Android — через adb shell или приложение-терминал, на Linux — обычная консоль).
Проверить занятость файла можно так:
fuser -v /system/bin/su
или, если путь другой:
fuser -v /sbin/su /system/xbin/su
Команда fuser покажет PID процессов, которые держат файл открытым. Если утилита недоступна (на урезанных сборках Android её может не быть), попробуйте lsof, если он установлен, либо просто посмотрите список процессов через ps и найдите те, что связаны с root-менеджером.
Если fuser показывает конкретный PID, завершите этот процесс командой kill PID и повторите попытку замены файла. Если процесс системный и не завершается — переходите к перезагрузке, описанной ниже.
Решение на Android: обновление root без конфликта
На Android самая частая ситуация — ошибка при обновлении Magisk или попытке вручную заменить su в /system/bin или /system/xbin. Действовать лучше в таком порядке:
☑️ Порядок действий при ошибке «su занят» на Android
Сначала закройте всё, что может держать сессию: эмуляторы терминала, файловые менеджеры с root-режимом, твикеры. Затем перезагрузите устройство — после перезагрузки ни один пользовательский процесс ещё не успеет захватить бинарник, и обновление пройдёт чисто.
Обновляйте root-решение только штатным способом: для Magisk — через его приложение или прошивку патченного boot-образа / ZIP в рекавери. Ручная замена бинарника в системном разделе — рискованный путь: на современных Android-устройствах системный раздел защищён (dm-verity, dynamic partitions), и прямая запись в него может вообще не сработать или нарушить целостность системы.
⚠️ Внимание: не пытайтесь удалить или перезаписать su на работающей системе через файловый менеджер с root-правами. Если бинарник удерживается демоном, вы рискуете получить полностью нерабочий root-доступ до следующей переустановки root-решения через рекавери.
Решение в Linux: освобождение бинарника
В настольном Linux ситуация проще и безопаснее. Если пакетный менеджер сообщает, что файл /bin/su или /usr/bin/su занят, обычно достаточно завершить процессы, которые его используют. Проверьте открытые сессии:
fuser -v /usr/bin/su
who
ps aux | grep su
Завершите лишние root-сессии командой exit в соответствующих терминалах или принудительно через kill. Если занятость вызвана зависшим процессом, перезагрузка системы гарантированно освободит файл — после неё можно спокойно обновлять пакет.
Ещё один нюанс: если файл su находится на сетевой или примонтированной вручную файловой системе, проверьте опции монтирования через mount | grep по нужному пути. Раздел, смонтированный с ro (только чтение), не даст записать файл, и сообщение об ошибке может вводить в заблуждение.
Сравнение способов решения
Разные подходы отличаются по риску и применимости. Сводная таблица поможет выбрать подходящий:
| Способ | Когда применять | Риск потери root |
|---|---|---|
| Завершение процессов через fuser/kill | Известен конкретный процесс, держащий файл | Низкий |
| Перезагрузка устройства | Процесс не найден или не завершается | Низкий |
| Обновление через приложение root-менеджера | Штатное обновление Magisk | Низкий |
| Прошивка ZIP/образа через рекавери | Обновление на системе не удаётся | Средний |
| Ручная замена бинарника в /system | Только если другие способы недоступны | Высокий |
Если ничего не помогло
Иногда занятость файла — симптом более глубокой проблемы: повреждённой установки root, конфликта двух root-решений (например, остатков старого SuperSU и нового Magisk) или сбоя файловой системы раздела. В таком случае логика действий меняется.
Первым делом полностью удалите следы прежних root-решений. Для Magisk предусмотрен штатный деинсталлятор, который прошивается через рекавери, — используйте именно его, а не ручное удаление файлов. После очистки и перезагрузки устанавливайте root-решение заново, строго по инструкции для вашей модели устройства и версии прошивки.
Что делать, если root пропал после неудачной замены su
Загрузитесь в рекавери (TWRP или штатное, если поддерживает прошивку ZIP). Прошейте деинсталлятор вашего root-решения, затем перезагрузитесь в систему и убедитесь, что она загружается нормально. После этого установите root-решение заново актуальной версии. Если система не загружается — восстановите раздел boot из бэкапа или прошейте стоковый boot-образ вашей прошивки.
Если устройство перестало загружаться после манипуляций с бинарником, восстановите стоковый boot-образ вашей прошивки через fastboot или рекавери. Точные команды и файлы зависят от модели — берите их только из официальных источников производителя или проверенных веток по вашему устройству.
⚠️ Внимание: комбинации кнопок для входа в рекавери, команды fastboot и структура разделов отличаются у разных производителей. Перед любыми прошивками сверьтесь с инструкцией именно для вашей модели — действия «по аналогии» с чужим устройством могут привести к состоянию bootloop.
Профилактика: как не столкнуться с ошибкой снова
Чтобы обновление root не упиралось в занятый файл su, достаточно соблюдать несколько простых правил. Они сводятся к тому, чтобы никакие процессы не удерживали бинарник в момент его замены.
- 🔄 Всегда обновляйте root-решение через его собственное приложение или рекавери, а не ручной заменой файлов.
- 🧹 Не держите одновременно два root-менеджера — удаляйте остатки старого перед установкой нового.
- 🔁 Перед обновлением перезагружайте устройство, если давно этого не делали.
- 💾 Делайте бэкап boot-раздела перед любыми системными изменениями.
Частые вопросы
Ошибка «text file busy» — это то же самое, что «файл занят»?
Да. Text file busy (код ETXTBSY) — стандартное сообщение ядра Linux о том, что исполняемый файл нельзя изменить, пока он выполняется хотя бы одним процессом. На Android вы можете увидеть его в терминале или логах установщика.
Можно ли заменить su без перезагрузки?
Теоретически — да, если завершить все процессы, держащие файл (через fuser и kill). На практике на Android демон root-менеджера часто перезапускается автоматически, поэтому перезагрузка остаётся самым надёжным способом освободить бинарник.
Ошибка появляется при обновлении Magisk. Что делать?
Закройте все root-приложения, перезагрузите устройство и повторите обновление через приложение Magisk. Если ошибка сохраняется, обновитесь прошивкой ZIP или патченного boot-образа через рекавери — этот способ не зависит от занятости файла в работающей системе.
Опасно ли удалять su вручную?
Да. Удаление или перезапись бинарника на работающей системе может полностью сломать root-доступ и нарушить целостность системного раздела. Для удаления root используйте штатный деинсталлятор вашего root-решения через рекавери.
fuser не найден на Android. Чем заменить?
Попробуйте lsof, если он есть в системе, либо установите пакет BusyBox (если у вас есть root и совместимая сборка). Как вариант без утилит — просто перезагрузить устройство: после старта системы файл гарантированно никем не удерживается.