Bookmark

OpenWrt failsafe và factory reset: cứu cấu hình trước khi xóa máy

Khi OpenWrt mất truy cập sau một lần sửa mạng hoặc firewall, tôi không vội factory reset. Failsafe cho phép khởi động với cấu hình tối thiểu để sửa /etc/config, còn factory reset xóa overlay và các package đã cài. Recovery/re-flash lại là một nhánh khác, phụ thuộc bootloader và model.1

Kiểm tra điều kiện

Failsafe chỉ có ý nghĩa với image SquashFS có root read-only và overlay tách riêng. Nó không sửa được phần cứng hỏng hoặc kernel hỏng. Các bản x86 dùng ext4 read-write rootfs không reset theo cách này. Trước khi nhấn nút, tôi kiểm tra:

1
grep squash /proc/mounts

Nếu terminal trả về dòng tương tự dưới đây thì router có /rom là SquashFS:

1
/dev/root /rom squashfs ro,relatime 0 0

Vào failsafe

Failsafe thường dùng 192.168.1.1, tắt DHCP và Wi-Fi. Tôi đặt máy tính tĩnh 192.168.1.10/24, subnet mask 255.255.255.0, nối Ethernet và thử LAN1 trước; một số thiết bị DSA chỉ mở LAN1. Cửa sổ chờ nút có thể là 4 giây trên OpenWrt 24.10 trở lên và 2 giây trên 23.05 trở xuống, nhưng target cụ thể vẫn là nguồn quyết định.

Cách đơn giản nhất là bật router, quan sát LED nhấp nháy rồi nhấn WPS/Reset hoặc nút mà tài liệu thiết bị quy định. Nhịp rất nhanh thường cho biết đã vào failsafe; nếu lỡ nhịp, tắt nguồn và thử lại. Đừng đoán nút cho mọi model.

Người có packet sniffer có thể chờ broadcast đến 192.168.1.255, UDP port 4919, rồi nhấn nút:

1
tcpdump -Ani eth0 port 4919 and udp

Nếu đã gắn serial, chờ thông báo yêu cầu nhấn phím f rồi Enter. Khi vào được, dùng SSH hoặc serial keyboard; nếu OpenSSH báo Bad server host key: Invalid key length, nguồn hướng dẫn thêm -oRSAMinSize=1024 vào lệnh SSH.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
...
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
f
- failsafe -
/etc/preinit: line 1: /sbin/mtk_failsafe.sh: not found
/etc/preinit: line 1: dropbearkey: not found
/etc/preinit: line 1: dropbear: not found

BusyBox v1.25.1 () built-in shell (ash)

ash: can't access tty; job control turned off
     _________
    /        /\      _    ___ ___  ___
   /  LE    /  \    | |  | __|   \| __|
  /    DE  /    \   | |__| _|| |) | _|
 /________/  LE  \  |____|___|___/|___|                      lede-project.org
 \        \   DE /
  \    LE  \    /  -----------------------------------------------------------
   \  DE    \  /    Reboot (17.01-SNAPSHOT, r0-e88ba24)
    \________\/    -----------------------------------------------------------

================= FAILSAFE MODE active ================
special commands:
* firstboot	     reset settings to factory defaults
* mount_root	 mount root-partition with config files

after mount_root:
* passwd			 change root's password
* /etc/config		    directory with config files

for more help see:
http://wiki.openwrt.org/doc/howto/generic.failsafe
=======================================================

admin@(none):/# firstboot && reboot
[  102.942293] jffs2reset: This will erase all settings and remove any installed packages. Are you sure? [N/y]
y
[  117.606813] jffs2reset: /dev/mtdblock6 is not mounted
[  117.612055] jffs2reset: /dev/mtdblock6 will be erased on next mount
reboot
admin@(none):/# [  119.810569] ===> rt_pci_shutdown()
...

Sửa cấu hình

Trong failsafe, DHCP không chạy và chỉ dịch vụ tối thiểu hoạt động. Sau khi SSH/serial vào đúng 192.168.1.1, mount overlay:

1
mount_root

Sau đó overlay nằm ở /overlay. Tôi chỉ sửa file gây lỗi, có thể chuyển file từ máy Linux/macOS bằng scp hoặc dùng WinSCP trên Windows. Nếu dùng extroot, phải rút thiết bị ngoài, reboot, cắm lại, mount đúng thiết bị, sửa cấu hình trên phần mount rồi kiểm tra fstab như mẫu nguồn:1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# unplug external device
reboot

# plug external device
# mount external device, e.g.
block info
mount /dev/mmcblk0 /mnt

# fix the issue, e.g.
vi /mnt/upper/etc/config/network

# verify external device will be mounted automatically, e.g.
vi /overlay/upper/etc/config/fstab
reboot

Nếu gặp jffs2 not ready yet hoặc filesystem đầy, kiểm tra df -h trước. Khi mount_root không dùng được, source đưa ra nhánh xóa rootfs_data sau đây; đây là thao tác xóa cấu hình, không phải lệnh thử nghiệm vô hại:

1
mtd -r erase rootfs_data

Factory reset

Factory reset hoạt động trên layout SquashFS/overlay. Với NOR lớn, việc format overlay có thể mất 3–5 phút; trong thời gian đó không được kết luận router đã chết. Nếu có nút reset vật lý, hãy boot hoàn tất hoặc vào failsafe rồi giữ khoảng 10 giây, thả nút và chờ reboot theo tài liệu của model.

Soft factory reset

Nhánh file-based dùng firstboot; source cũng nhắc rằng firstboot thường gọi jffs2reset và có thể không đủ nếu filesystem/overlay đang ở trạng thái bất thường:

1
firstboot && reboot
1
firstboot -y && reboot

Trong script cần dùng -y để không chờ prompt. Sau reset, tất cả package cài thêm và cấu hình overlay có thể mất. Tôi luôn giữ bản backup offline trước khi chạy.

Hard factory reset

Nếu soft reset không đủ, mtd đánh dấu rootfs_data để xóa khi boot:

1
mtd -r erase rootfs_data

Nguồn còn phân biệt thao tác reset bằng nút vật lý: bật máy và chờ LED dừng nhấp nháy, giữ Reset 10 giây, thả ra rồi chờ vài phút. Không áp dụng quy trình đó cho model chưa xác minh.

Re-flash firmware

Nếu mục tiêu là cài lại firmware và bỏ cấu hình, dùng sysupgrade image, không dùng factory image, và bật tùy chọn bỏ cấu hình:

1
sysupgrade -n /path/to/firmware

Re-flash không tự biến bootloader hoặc phần cứng hỏng thành lành. Hãy đọc device page cho đúng image, phương thức TFTP/serial và nút recovery trước khi làm.

JFFS2 reset

Với overlay JFFS2, source ghi nhánh unmount rồi reset:

1
umount /overlay && jffs2reset && reboot

Tài liệu ghi chú jffs2reset đã được đổi tên thành factoryreset trong main/master sau tháng 12/2024; vì vậy tôi kiểm tra lệnh có trên phiên bản đang chạy trước khi gõ. Đừng tự thay tên lệnh nếu chưa xem --help hoặc tài liệu đúng release.

F2FS reset

Source có thêm mẫu cho F2FS:

1
dd if=/dev/zero of=/dev/loop0 bs=1M; reboot

Đây là lệnh rất nguy hiểm: chỉ dùng khi đã xác minh /dev/loop0 và layout của target đúng với tài liệu. Không chạy nó trên router khác, không suy ra rằng mọi F2FS đều dùng cùng loop device.

Kiểm tra sau khôi phục

Sau khi router lên lại, kiểm tra ping tới 192.168.1.1, đăng nhập bằng mật khẩu mặc định/đã đặt theo release, xác nhận /etc/config và package cần thiết, rồi mới bật lại từng interface. Nếu lỗi là kernel/flash/hardware, dừng ở đây và chuyển sang bootloader hoặc recovery theo device page; failsafe không thay thế được debrick.

Nguồn


  1. https://openwrt.org/docs/guide-user/troubleshooting/failsafe_and_factory_reset — OpenWrt Wiki – Failsafe mode, factory reset, and recovery mode. Nội dung được biên tập độc lập từ snapshot ngày 2026-08-20; các lệnh xóa được giữ nguyên nhưng có cảnh báo phạm vi. ↩︎ ↩︎


0 Bình luận

Góp Ý / Bình Luận / Đánh giá