Почему файловая система NTFS на накопителе, подключённом к роутеру под управлением OpenWrt, повреждается при отключении питания?

Есть настроенный smb-сервер на роутере, к которому подключена USB-флешка с NTFS.<br/>Проблема: при отключении питания роутера NTFS помечается как «сломанная» и перестаёт монтироваться. Чтобы всё вернуть, приходится вручную вынимать флешку, подключать её к ПК с Windows (<i>файлы и сама ФС при этом на месте, просто стоит метка повреждения</i>), запускать исправление накопителя — Windows якобы исправляет ошибки, после чего флешку можно возвращать и она снова автоматически монтируется.<br/>Я уже выставил опции монтирования без кэширования: <code>rw, sync, noatime</code>. Можно ещё попробовать другой драйвер <b>ntfs</b>.<br/>Вопрос: какие меры принять, чтобы убрать причину возникновения этой «поломки» FS при внезапном отключении питания (а не постоянно вручную исправлять NTFS)?
  • 18 июня 2026 г. 9:00
Ответы на вопрос 2
Коротко — причина в том, что «внезапное» отключение питания оставляет непереписанные или незафлашенные данные в кэше (в драйвере FUSE/ntfs-3g, в USB‑контроллере флешки, в самом роутере), и NTFS при следующем монтировании считает том «грязным» (Windows ставит метку и предлагает chkdsk). Просто rw, sync, noatime частично помогают, но не устраняют все уровни кэширования и/или не используют низкоуровневые барьеры/FUA — особенно когда используется ntfs-3g через FUSE или сама флешка агрессивно кэширует данные.

Что можно сделать (порядок действий и рекомендации):

1) Самое надёжное — убрать NTFS и использовать файловую систему, которая родно поддерживается Linux (ext4, f2fs).
   - ext4 с журналированием гораздо устойчивее к внезапным отключениям, при одинаковых условиях вероятность «пометки» гораздо ниже.
   - Недостаток: Windows не умеет читать ext4 «из коробки», но вы можете общий доступ организовать через Samba (т. е. хранить диск в ext4 и смотреть файлы по сети).

2) Если необходимо именно NTFS (планируете физически брать флешку в Windows):
   - По возможности установить и использовать kernel‑драйвер ntfs3 (Paragon/встроенный в новые ядра) вместо ntfs‑3g (FUSE). ntfs3 лучше поддерживает принудительную коммутацию данных (FUA/barriers) и надёжнее при внезапных выключениях.
   - Если ntfs3 недоступен на OpenWrt, посмотрите, можно ли собрать/установить модуль или обновить ядро.

3) Настройки Samba — заставить сервер писать данные на диск сразу:
   - В конфигурации smb.conf для общего ресурса добавить/включить:
     - strict sync = yes
     - sync always = yes
     - write cache size = 0
     - oplocks = no
     - level2 oplocks = no
     - aio read size = 0
   - Эти опции уменьшают буферизацию на стороне Samba и повышают вероятность, что клиентские записи попадут на носитель немедленно.

4) Монтажные опции — минимизировать кэширование:
   - sync уже включили — правильно (требует синхронных записей). Для ntfs-3g дополнительно можно поставить big_writes если есть.
   - Для ext4 можно использовать data=journal и commit=1 (например, mount -o data=journal,commit=1) — это уменьшает окно потерь (но повышает износ и замедляет работу).

5) Отключение/контроль аппаратного кэша устройства:
   - Некоторые флешки имеют собственные контроллеры с кешем, которые не подчиняются системным FUA/barriers. Их нельзя «полностью» отключить. Поэтому выбор качественной флешки/HDD (с поддержкой безопасного сброса буфера) помогает.
   - Для дисков SATA можно пробовать hdparm -W0 /dev/sdX (выключить write caching), но для USB флешек это часто не работает.

6) Аппаратные меры — UPS / аккумулятор:
   - Самое практическое решение в бытовых условиях — поставить UPS/повербанк с pass‑through или источник бесперебойного питания для роутера. Это исключит «резкие» отключения.
   - Более хитро: предусмотреть питание с задержкой, чтобы роутер успевал корректно размонтировать диски при выключении питания (нужен внешний контроллер/скрипт).

7) Корректное размонтирование при плановом выключении:
   - Если у вас есть способ заранее детектировать выключение питания (например, кнопка выключения или сигнал от внешнего питания), сделать скрипт, который запустит sync и umount /opt/usb до полного отключения.

8) Резервное копирование и мониторинг:
   - Делайте регулярные бэкапы важных данных (чтобы не восстанавливать файлы через chkdsk).
   - Логи (dmesg, syslog) помогут понять, какие ошибки I/O происходили при предыдущем падении.

Рекомендованная последовательность действий сейчас
1. Попробуйте временно перенести данные на ext4 и проверить: оставьте флешку в ext4 и имитируйте отключения — если проблема уходит, причина в слабой поддержке NTFS на роутере.
2. Если ext4 не вариант — попробуйте установить/использовать ntfs3 kernel module.
3. Параллельно включите в Samba strict sync/sync always и протестируйте.
4. Подумайте об источнике бесперебойного питания для роутера (самое реальное решение для 100% безопасности).

Если хотите, помогу:
- подсказать конкретные строки для smb.conf под OpenWrt,
- проверить, доступен ли ntfs3 в вашей сборке OpenWrt (скажите версию OpenWrt и модель роутера),
- или пошаговый план миграции флешки на ext4 с возможностью доступа из Windows (через SMB).
sync тут не при чём — MFT и журнал NTFS могут быть в полузаписанном состоянии в момент выдёргивания, и сменить драйвер не спасёт. <br/> <br/> ext4 или f2fs — fsck прямо на роутере, без Виндовс.
Похожие вопросы