Восстановление / откат отдельных файлов или папок на btrfs

Dec 08 2020

Я планирую использовать btrfs для системы NAS.

Теперь мне интересно, можно ли откатиться к снимкам на уровне файла / папки. Я спрашиваю об этом, потому что обычно требуется откатить только отдельные элементы, сохраняя состояние остальной части диска.

Есть ли какой-нибудь собственный способ сделать это, а если нет, то как лучше всего этого добиться? Я прочитал Восстановление отдельных файлов из снимка btrfs, не выполняя полную копию, что кажется способом, но не таким удобным. Хотя, возможно, это лучший способ сделать это.

Ответы

1 clel Jan 02 2021 at 01:13

При создании моментального снимка создается подобъем, к которому можно получить доступ в структуре каталогов базового тома. Оттуда, если у вас есть соответствующие права, он может просматривать его и копировать файлы или папки. Для --reflinkэтого, похоже, не нужна возможность копирования, хотя это лучше, поэтому при копировании вещи не дублируются.

с инструментами btrfs

При желании можно создать подобъем для снимков:

btrfs subvolume create .my_snapshots

Создание снимка:

btrfs subvolume snapshot -r /mnt_point /mnt_point/.my_snapshots/snapshot1

Использование -rфлага делает снимок только для чтения (https://wiki.archlinux.org/index.php/btrfs#Snapshots).

Без предварительного создания вложенного тома и без настройки только для чтения это могло бы выглядеть так:

btrfs subvolume snapshot /mnt_point /mnt_point/snapshot1

Восстановление может быть выполнено путем копирования файла (ов) или папки (ов) из снимка:

cp /mnt_point/.my_snapshots/snapshot1/sub/dir/file /sub/dir/file

(Полученный из https://lore.kernel.org/linux-btrfs/[email protected]/t/#m16db5d9f29d26f41a8adb4499ffe3e220a85d9b8)

внешние инструменты (в качестве примера использован снэппер)

Использование внешних инструментов, таких как snapper, имеет некоторые преимущества, поскольку они делают обработку снимков немного более удобной и обладают полезными функциями.

Сначала необходимо создать файл конфигурации для (под) тома, для которого нужно создать моментальные снимки:

snapper -c config-name create-config /mnt_point

Это создает файл конфигурации с именем config-name. Обратите внимание, что это также обычно позволяет создавать автоматические моментальные снимки, основанные на времени, а также правила для их очистки после некоторой логики. Обратите внимание, что созданные вручную снимки не удаляются такими правилами.

Затем снимок можно сделать вручную с помощью:

snapper -c config-name create --description description-content

где config-nameимя ранее созданной конфигурации и description-contentможет быть заполнено некоторым описанием для снимка.

(Полученный из https://wiki.archlinux.org/index.php/Snapper)

Затем восстановление работает аналогично тому, как описано выше для раздела инструментов btrfs, с доступом к смонтированному снимку и копированием вещей.

Дополнительно snapper предоставляет команду для этого, которую также можно использовать для отмены изменений для текущего тома в соответствии с документацией openSUSE . Обратите внимание, что это может привести к несогласованности данных. Также в документации Red Hat говорится, что эту команду нельзя использовать с корневой файловой системой.

Теоретически файлы можно восстановить с помощью:

 snapper -c config-name -v undochange SNAPSHOT_ID..0 FILENAME

где SNAPSHOT_ID- идентификатор снимка, из которого нужно восстановить (и ..0указывает, что файлы восстанавливаются на основной том), и FILENAMEпуть к файлу для восстановления. Также можно указать более одного файла.

(Полученный из https://doc.opensuse.org/documentation/leap/archive/15.0/reference/html/book.opensuse.reference/cha.snapper.html#proc.snapper.restore.cmdl)

EmmanuelRosa Dec 09 2020 at 17:25

Снимки BTRFS работают на уровне подтома. Это означает, что вы можете «откатить» вложенные тома, но не отдельные файлы.

Поскольку вложенные тома отображаются в файловой системе как каталоги, можно сказать, что можно выполнить откат каталогов.

Для отката отдельных файлов я использую копию рефссылки, как показано в предоставленной вами ссылке. Однако у меня соответствующие подтомы смонтированы автоматически, /etc/fstabтак что неудобств нет.