Table of Contents

Функція снепшотів (знімків) файлової системи: /sbin/snapshot

Ця функція була згадана в анонсі Barrier Breaker, але потребувала документації. Нижченаведена інформація взята з листування на розсилці Battlemesh від розробника, який реалізував цю функцію.

Сценарії використання

Є багато ситуацій, де це корисно, але ця система не є заміною jffs2.
Ця технологія орієнтована на масові розгортання, коли багато пристроїв працюють на однаковій прошивці та повинні отримувати однакові оновлення одночасно. Мета — зберігати конфігурацію та невеликі зміни у вигляді ланцюжка блоків. Зрештою, все працює на tmpfs.

Основна перевага: можна просто відкотитися до попереднього знімка, якщо щось пішло не так. Наприклад, тригером для відкaту може бути ситуація, коли “неможливо під’єднатись до mesh-мережі”.

Деталі реалізації

Зазвичай у OpenWrt використовується поєднання squashfs + jffs2 overlay. У цій реалізації:

- rootfs_data більше не використовується для jffs2 - натомість використовується для зберігання ланцюжка блоків, вирівняних за розміром сторінки flash (erasesize) - кожен блок містить заголовок та tar-архів - заголовок містить: розмір, хеш, тип - є два типи блоків: snapshot та volatile - блок типу volatile може бути лише один і завжди останній у ланцюжку

Під час завантаження:

1. Монтується squashfs як базова rootfs

2. Поверх неї — overlayfs, але замість jffs2 використовується tmpfs

3. Потім розпаковуються tar-архіви з блоків у вказаному порядку

4. Після всіх snapshot-блоків виконується додатковий overlay з tmpfs та volatile-блоком

У підсумку ми маємо багатошаровий overlay, де:

Використання

Цей інструмент доступний за замовчуванням у Barrier Breaker.

Після завантаження та ініціалізації jffs2 виконайте:

snapshot convert

Це перетворить поточні зміни overlay у ланцюжок з одним volatile-блоком. Тепер система працює подібно до initramfs — зміни у `/etc/config/` не зберігаються після перезавантаження.

Щоб зберегти зміни в overlay у volatile-блок:

snapshot config

Коли ви задоволені поточним станом — можна створити статичний знімок:

snapshot push

Під час перезапису блоків (наприклад, заміни volatile або конвертації у snapshot), використовуються останні сектори флеш-пам’яті як резервна буферна зона. Це дозволяє зберігати попередню версію даних для відкату у разі помилки.

Оновлення знімка з оновленням прошивки:

snapshot upgrade

Ця команда:

- шукає доступні оновлення (наприклад, через `opkg`)

- якщо знаходить — встановлює

- автоматично створює новий знімок після встановлення