Перейти до змісту

24. Знімки: машина часу для вашого тому

Work in progress

Учора монтаж відкривався, а сьогодні хтось перезаписав потрібний файл. Хотілося б повернутися на крок назад і забрати стару версію. Для цього StudioFS має знімки: зафіксовані стани всього тому, які можна відкрити окремо й переглянути без права запису.

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

Що саме потрапляє у знімок?

Знімок фіксує стан тому на основі спільних метаданих PostgreSQL. Це знімок усього тому, а не окремої папки. Його вміст пов’язаний із даними в об’єктному сховищі.

Тут важлива вже знайома різниця: локально збережені зміни можуть ще не бути опубліковані для інших клієнтів. Знімок не підбирає автоматично все, що лежить у локальному кеші вашого комп’ютера. Перед важливою контрольною точкою збережіть роботу в програмі, дочекайтеся завантаження даних і синхронізації метаданих. Якщо проєкт складається з кількох взаємопов’язаних файлів, дайте програмі завершити їх запис; за потреби закрийте проєкт і узгодьте паузу з колегами.

Знімок не перетворює збереження багатофайлового проєкту на одну неподільну операцію. Якщо програма саме переписує його частини, зафіксований стан може не бути придатним для відкриття в ній.

Указаний том має бути налаштований із доступом до PostgreSQL. Для створення й читання знімків також потрібен доступ до об’єктного сховища.

Створюємо контрольну точку

Перед великим прибиранням або змінами у проєкті виконайте:

studiofs snapshot projectfs create --ttl 7d

Команда зареєструє знімок і чекатиме, доки він стане Ready — готовим до використання. Збережіть ідентифікатор із відповіді: його призначає StudioFS, а задати власну назву знімка не можна.

--ttl 7d означає сім діб зберігання від моменту готовності, а не від початку створення. Дозволені додатні цілі числа із суфіксами s (секунди), m (хвилини), h (години), d (доби) та w (тижні): наприклад, 12h, 7d, 2w.

Можна створити знімок без автоматичного строку закінчення:

studiofs snapshot projectfs create

Такий ручний знімок зберігається до явного видалення. «Без строку» не означає «безкоштовно»: історичні дані також займають місце у сховищі.

У кожній команді для знімків потрібно явно вказувати цільовий том. Наприклад, studiofs snapshot projectfs create працює лише з projectfs; команда ніколи не визначає поточний том за локальними даними клієнта. Такий самий формат використовується для list, inspect, delete і policy:

studiofs snapshot <назва-тому> create [--ttl <тривалість>]
studiofs snapshot <назва-тому> list
studiofs snapshot <назва-тому> inspect <ідентифікатор-знімка>
studiofs snapshot <назва-тому> delete <ідентифікатор-знімка>
studiofs snapshot <назва-тому> policy set --daily-at <HH:MM> [--timezone <назва IANA>] --retention <тривалість>
studiofs snapshot <назва-тому> policy show
studiofs snapshot <назва-тому> policy cancel

Замініть projectfs нижче на точну назву налаштованого тому. Якщо назва невідома або некоректна, команда пояснить проблему й підкаже, що виправити; підстановка іншого тому не відбувається.

Дивимося, що вже є

studiofs snapshot projectfs list

Для докладнішої перевірки скопіюйте ідентифікатор зі списку:

studiofs snapshot projectfs inspect projectfs.2026-08-12T14-07-09.482Z

Тут і далі projectfs та наведений ідентифікатор — приклади. Замініть їх своїми значеннями.

У відповіді корисно розрізняти такі поля:

Поле Що воно пояснює
origin Знімок створено вручну (manual) чи за розкладом (automatic).
captured_at, cut_version Час фіксації та версія спільних метаданих, яку зафіксовано.
state Загальний стан знімка. Для монтування потрібен Ready.
creation Окремий службовий стан роботи зі створення знімка.
ready_at, expires_at Коли знімок став готовим і коли спливає його строк.
checksum Контрольна сума підготовленого знімка.
last_error Остання зафіксована помилка, якщо вона є.

Значення - означає, що відповідного значення немає. Наприклад, ручний знімок без TTL не має expires_at.

Creating ще не означає готовності; Failed вказує на невдале створення, а Deleting та Deleted — на видалення. Не намагайтеся монтувати знімок лише тому, що його ідентифікатор уже з’явився у списку.

Якщо перервати create через Ctrl+C, реєстрація у PostgreSQL залишається. Перевірте цей ідентифікатор через inspect, перш ніж створювати ще один знімок. Перерваний термінал і скасоване завдання — різні речі.

Відкриваємо минуле окремим диском

Готовий знімок відкриває команда smount. Тут назва тому потрібна: після неї вкажіть ідентифікатор знімка й окрему точку монтування.

У Windows, якщо літера Z: вільна:

studiofs smount projectfs projectfs.2026-08-12T14-07-09.482Z Z:

У Linux або macOS використайте підготовлений окремий каталог, наприклад:

studiofs smount projectfs projectfs.2026-08-12T14-07-09.482Z /mnt/snapshot

Виберіть шлях, доступний для вашого облікового запису; не монтуйте знімок поверх робочого тому. За потреби задайте окремий кеш через --cache-dir <шлях>.

smount завжди відкриває знімок лише для читання. На цьому диску можна переглядати файли й копіювати їх назовні, але не можна змінювати, перейменовувати чи видаляти їх.

Щоб повернути файл, скопіюйте його зі знімка в окрему папку на звичайному диску або до робочого тому. Переконайтеся, що це потрібна версія, і лише потім замініть нею поточний файл. Якщо проєкт складається з кількох файлів, скопіюйте весь потрібний комплект і перевірте його у відповідній програмі. Окремої команди для відкату всього тому немає.

Щоденні знімки без нагадувань у календарі

Для тому можна налаштувати одну щоденну політику. Наприклад, створювати знімки щодня о 02:30 за київським часом і зберігати готові знімки протягом двох тижнів:

studiofs snapshot projectfs policy set --daily-at 02:30 --timezone Europe/Kyiv --retention 14d
studiofs snapshot projectfs policy show

Час задається у форматі HH:MM, часовий пояс — назвою IANA. Якщо пропустити --timezone, буде використано UTC, навіть якщо ваш комп’ютер живе за київським часом. --retention обов’язковий; строк зберігання автоматичних знімків має бути скінченним і додатним. Його також відраховують від моменту Ready.

Повторний policy set замінює поточну політику. Щоб вимкнути майбутні автоматичні створення:

studiofs snapshot projectfs policy cancel

Це не видаляє вже створені знімки.

Розклад виконується у фоновому режимі, поки активне монтування робочого тому. Сам запис політики не запускає окремий цілодобовий сервер: якщо всі клієнти вимкнені, знімок рівно о 02:30 не з’явиться. Після простою механізм може опрацювати останній запланований запуск, але не створює окремого знімка за кожен пропущений день і не відновлює минулі стани заднім числом.

Є й нюанс переходу на літній або зимовий час: якщо в обраному часовому поясі в цей день заданого місцевого часу не існує, запуск пропускається; якщо цей час повторюється двічі, використовується перший із двох моментів. Для передбачуваного розкладу перевірте часовий пояс командою policy show.

Видаляємо непотрібне

Коли знімок більше не потрібен, спочатку завершіть роботу з його змонтованою копією, а тоді виконайте:

studiofs snapshot projectfs delete projectfs.2026-08-12T14-07-09.482Z

Запит на видалення можна повторити. Це не означає, що всі пов’язані об’єкти миттєво зникнуть зі сховища. Уже відкриті монтування можуть певний час продовжувати роботу, оскільки утримують поновлювані дозволи на використання знімка (leases). Очищення дочекається завершення цих дозволів. Завершення TTL також не означає, що місце звільниться в ту саму мить.

Перед видаленням звірте ідентифікатор. Копія потрібного файлу, яку ви ще не встигли забрати зі знімка, після його видалення може стати недоступною.

Чому це ще не резервна копія?

Знімок допомагає повернути стару версію, поки доступні потрібні метадані, об’єкти та ключовий матеріал тому. Він залежить від тієї самої інфраструктури й не є незалежною копією всіх даних в іншому місці.

Втрата PostgreSQL, потрібних об’єктів у S3 або ключового матеріалу може позбавити вас і робочих файлів, і можливості скористатися знімками. Для таких випадків потрібні резервні копії та перевірений спосіб відновлення. Докладніше про них — у наступному розділі.


Зміст · English · ← Попередня · Наступна →