Сброс OpenWRT к чистой установке

Для чего это нужно?

Бывает так, что вы конфигурили, конфигурили устройство и наконфигурили… Результат вышел не таким как ожидалось, а в ручную разбирать и вертать всё в зад — процесс непростой и долгий.

Или, как получилось в моём случае, (очень) ограниченный размер встроенной флэш-памяти закончился раньше, чем туда поместились все нужные пакеты. Проще вернуть всё одним решительным действием к изначальному состоянию, чем удалять пакеты по списку и разбираться с их зависимостями.
Для чего данный способ не подходит, так это для сброса забытого пароля. Для сброса настроек вам всё равно нужно зайти на устройство пользователем root по ssh, так что, забытый пароль так не сбросить!

Где же она, эта кнопка?

Вообще, я был практически уверен, что существует штатный механизм — команда для выполнения сброса конфигурации устройства. Однако, изучения списка команд и поиски по wiki проекта результата не дали.
Кажется, готового штатного решения вроде:

root@OpenWrt:~# restore-config-default

в OpenWRT нет.

Вся магия

Собственно, сам способ крайне прост:

root@OpenWrt:~# rm -rf /overlay/*
root@OpenWrt:~# sync 
root@OpenWrt:~# reboot

Устройство перезагрузится и вернётся в изначальное «чистое» состояние, такое же, как сразу после установки OpenWRT, это значит, что после этого вам нужно будет выполнить процедуру «первого входа»: First Login.

Как это работает?

Для понимания как работает такая «чистка» конфигурации нужно понять устройство файловой системы OpenWRT (собственно, так этот метод и был обнаружен), в этом поможет изучение wiki-страницы The OpenWrt Flash Layout.
Вкратце, суть такова: корневая файловая система OpenWRT собирается из частей, которым выделены два раздела на флэш-памяти устройства (кроме этого есть несколько специальных разделов для загрузчика, ядра и т.д.).
Один раздел содержит доступную только для чтения SquashFS, при загрузке она монтируется в каталог /rom, она содержит базовый образ системы OpenWRT, который мы и получаем после установки.
Второй раздел содержит доступную для чтения и записи JFFS2, она при загрузке монтируется в каталог /overlay, изначально эта ФС пуста.
Далее, содежимое корневой ФС / получается путём проецирования содержимого /rom и наложения на него при помощи OverlayFS содержимого /overlay. Таким образом, далее отдельное существование /rom и /overlay игнорируется и работа идёт с корневой ФС /. При этом все изменения, которые происходят сохраняются на доступную для записи JFFS2, т.е. в /overlay, даже такие изменения, как удаление файлов содержащихся в исходной системе (/rom).
Вот список смонтированных ФС моего маршрутизатора:

root@OpenWrt:~# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,size=14524k)
tmpfs on /dev type tmpfs (rw,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,noatime,mode=600)
/dev/mtdblock3 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlayfs (rw,noatime,lowerdir=/,upperdir=/overlay)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
none on /proc/bus/usb type usbfs (rw,relatime)

Это похоже на рисунок накрытый прозрачной плёнкой, на этой плёнке мы можем дорисовывать рисунок как захотим, даже закрашивать его и перерисовывать по-другому, при этом всё наши изменения происходят на прозрачной плёнке, и убрав её мы получим рисунок в его изначальном виде. Именно так мы и поступаем, удаляя содержимое /overlay.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.