logo

nixscript

Keep it simple, stupid !

Ссылка на статью в формате MarkDown для Curl, кодировка RU.UTF-8

Снапшот корня btrfs при обновлении системы

Адрес статьи: nixscript.ru/btrfs-snapshot-root

git: git.nixscript.ru/nixscript/btrfs-savepoint

Для рачиподобных систем!

Скрипт при обновлении системы создает снапшот корня btrfs.

Создаем файл /usr/share/libalpm/hooks/savepoint.hook с таким содержанием:

[Trigger]
Operation = Upgrade
Type = Package
Target = *
[Action]
Description = Создает снапшот при обновлении системы
Depends = coreutils
When = PreTransaction
Exec = /usr/bin/bash -c '/opt/scripts/savepoint.sh'

и создаем скрипт /opt/scripts/savepoint.sh с таким содержанием:

#!/bin/bash
TDIR=$(mktemp -d)
export HERE="$(df -h / | grep /dev | cut -c1-9)"
if [ -d "$TDIR" ]
then
    mount -t btrfs -o subvolid=0 "$HERE" "$TDIR/"
else
    umount "$TDIR/"
    mount -t btrfs -o subvolid=0 "$HERE" "$TDIR/"
fi
if [ -e "$TDIR/@_update" ]
then
    btrfs subvolume delete "$TDIR/@_update";
    btrfs subvolume snapshot / "$TDIR/@_update"
 else btrfs subvolume snapshot / "$TDIR/@_update"
fi
if umount "$TDIR/"
then
    rm -rf "$TDIR"
else
    echo "Can't umount $TDIR.
    You must umount it, and remove dir $TDIR."
fi

Вот только если корень в нулевом томе, как отработает не проверял.

Автор: Jaam Maikin 05.05.2019

Корректировка: Изменена директория монтирования на временную, чтобы не создавать проблем при снапшоте.


Статья написана в формате MarkDown и сконвертирована в HTML с помощью скрипта Parsedown.

Вверх 🡑