2

Я пытаюсь сделать сжатые инкрементные резервные копии раздела Windows, используя ntfsclone в Linux. В настоящее время я делаю полные образы ntfsclone, используя что-то вроде следующей команды:

sudo ntfsclone -s -t -o - /dev/sda2 | xz -zc > new-backup.ntfsclone.xz

Я хотел бы выполнить инкрементное резервное копирование, создав дельта-файл с использованием предыдущей резервной копии и выходного потока ntfsclone, а не создавать новый образ ntfsclone при каждом сеансе резервного копирования.

Я понимаю, что создавать различия в двоичных файлах непросто, и что для этого существует несколько инструментов (rdiff, xdelta, bsdiff и т.д.); однако все они требуют наличия двух исходных файлов на диске и не могут сравнивать данные непосредственно из потоков вывода.


Другими словами, есть ли решения для двоичных потоков, которые делают что-то вроде следующей команды?

diff -u <(xz -dc old-backup.ntfsclone.xz) \
<(sudo ntfsclone -s -t -o - /dev/sda2) \
| xz -zvc > new-backup.ntfsclone.delta.xz

Очевидно, что приведенная выше команда не работает, но я хотел бы иметь возможность распаковать старый образ, сравнить его с ntfsclone-представлением раздела Windows и создать сжатый дельта-образ из сравнения за один шаг.


Несколько условий:

  • Процесс должен использовать ntfsclone
  • Дельты должны быть исправлены непосредственно на диск
  • Желательно, чтобы все происходило за один шаг

Также возможно (и может быть предпочтительнее) создать дельта-файл путем восстановления изображения ntfsclone в конвейер и создания diff путем сравнения непосредственно с /dev/sda2 , так как это, вероятно, создаст меньший выходной файл, но это усложнит фильтрация нераспределенного дискового пространства.

(То есть мы должны обнулить неиспользуемое дисковое пространство или сделать что-то вроде diff -u <(xz -dc old-backup.ntfsclone.xz | ntfsclone -r -t -o - -) <(sudo ntfsclone -t -o - /dev/sda2) | xz -zc > new-backup.img.delta.xz чтобы предотвратить архивирование всех данных удаленного файла. Тьфу!)

Любой берущий?


ПРИМЕЧАНИЕ: инструмент под названием ntfsddup от Wei Dong действительно существует для почти точного выполнения этой задачи , но мне трудно заставить его работать. Программное обеспечение находится на ОЧЕНЬ ранних стадиях и требует много работы.


2 ответа2

2

Я успешно использовал инструмент под названием bup (на основе git), который может эффективно хранить большие двоичные файлы, которые отличаются незначительно. Это также очень хорошо работает с NFS, что удобно для меня, потому что у меня есть сервер NFS с большим количеством места, где я храню данные:

например, для резервного копирования образов ntfs с моего ноутбука (diaz)

export BUP_DIR=/mnt/t3/big1/diaz/ntfsbup
ntfsclone -s -o - /dev/sda2 | bup split -n sda2.img

восстановить (на другой диск):

bup join sda2.img | ntfsclone -r -O /dev/sdb9 -

или предыдущая версия:

bup join sda2.img^ | ntfsclone -r -O /dev/sdb9 -

или же

bup join sda2.img~2 | ntfsclone -r -O /dev/sdb9 -
0

Некоторое время назад я написал программу, которая создает эффективные дельты между изображениями ntfsclone.

https://github.com/koljanowak/ntfscloneimgdelta

Это было особенно легко, потому что формат файлов изображений ntfsclone довольно прост. По сути, они представляют собой просто серию байтов, говорящих «1: здесь идет следующий кластер ntfs», за которым следует один кластер ntfs, или «0: следующий кластер не использовался», за которым ничего не стоит. Мой дельта-файл использует точно такой же формат файла, добавив третий случай «2: следующий кластер был идентичен на обоих изображениях», за которым ничего не стоит.

Usage: ntfscloneimgdelta delta OLDFILE [NEWFILE [DELTA]]
       ntfscloneimgdelta patch OLDFILE [DELTA [NEWFILE]]

OLDFILE и NEWFILE не обязательно должны быть в порядке возрастания, вы можете просто поменять их местами для создания обратных дельт. Это позволяет вам всегда иметь последнюю резервную копию в виде полного дампа, а старые резервные копии сохранять в виде дельт.

Пропуск имен файлов или замена их на '-' использует stdin или stdout. Таким образом, вы можете взять новый дамп раздела и создать обратную дельту между этим дампом и предыдущим дампом за один раз.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .