Как создавать и восстанавливать инкрементные снимки жесткого диска

Я использую Virtual Box много для целей тестирования дистрибутивов и приложений.

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

В моих живых системах я знаю, как создать 1: 1 изображение файловой системы, но все решения, которые я знаю, создадут новый образ полной файловой системы.

Существуют ли какие-либо программы / файловые системы, способные делать снимок текущей файловой системы, сохранять ее в другом месте, но

Чтобы легко описать то, что я хочу, оно должно быть как dd изображения файловой системы, но вместо полной резервной копии оно также создало бы incremental.

Я не ищу clonezilla и т. д. Он должен работать внутри самой системы без (или почти нет) interv от пользователя, но содержат все данные файловых систем. Я также не ищу duplicity резервную копию всей вашей системы, за исключением скрипта с несколькими папками + dd, чтобы сохранить ваш mbr. Я могу сделать это сам, ища дополнительную утонченность.

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

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

1
задан 21 March 2014 в 18:36

5 ответов

Вы можете использовать rsync.

Listing one: make_snapshot.sh

#!/bin/bash
# ----------------------------------------------------------------------
# mikes handy rotating-filesystem-snapshot utility
# ----------------------------------------------------------------------
# this needs to be a lot more general, but the basic idea is it makes
# rotating backup-snapshots of /home whenever called
# ----------------------------------------------------------------------

unset PATH  # suggestion from H. Milz: avoid accidental use of $PATH

# ------------- system commands used by this script --------------------
ID=/usr/bin/id;
ECHO=/bin/echo;

MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;
TOUCH=/bin/touch;

RSYNC=/usr/bin/rsync;


# ------------- file locations -----------------------------------------

MOUNT_DEVICE=/dev/hdb1;
SNAPSHOT_RW=/root/snapshot;
EXCLUDES=/usr/local/etc/backup_exclude;


# ------------- the script itself --------------------------------------

# make sure we're running as root
if (( `$ID -u` != 0 )); then { $ECHO "Sorry, must be root.  Exiting..."; exit; } fi

# attempt to remount the RW mount point as RW; else abort
$MOUNT -o remount,rw $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
    $ECHO "snapshot: could not remount $SNAPSHOT_RW readwrite";
    exit;
}
fi;


# rotating snapshots of /home (fixme: this should be more general)

# step 1: delete the oldest snapshot, if it exists:
if [ -d $SNAPSHOT_RW/home/hourly.3 ] ; then         \
$RM -rf $SNAPSHOT_RW/home/hourly.3 ;                \
fi ;

# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $SNAPSHOT_RW/home/hourly.2 ] ; then         \
$MV $SNAPSHOT_RW/home/hourly.2 $SNAPSHOT_RW/home/hourly.3 ; \
fi;
if [ -d $SNAPSHOT_RW/home/hourly.1 ] ; then         \
$MV $SNAPSHOT_RW/home/hourly.1 $SNAPSHOT_RW/home/hourly.2 ; \
fi;

# step 3: make a hard-link-only (except for dirs) copy of the latest snapshot,
# if that exists
if [ -d $SNAPSHOT_RW/home/hourly.0 ] ; then         \
$CP -al $SNAPSHOT_RW/home/hourly.0 $SNAPSHOT_RW/home/hourly.1 ; \
fi;

# step 4: rsync from the system into the latest snapshot (notice that
# rsync behaves like cp --remove-destination by default, so the destination
# is unlinked first.  If it were not so, this would copy over the other
# snapshot(s) too!
$RSYNC                              \
    -va --delete --delete-excluded              \
    --exclude-from="$EXCLUDES"              \
    /home/ $SNAPSHOT_RW/home/hourly.0 ;

# step 5: update the mtime of hourly.0 to reflect the snapshot time
$TOUCH $SNAPSHOT_RW/home/hourly.0 ;

# and thats it for home.

# now remount the RW snapshot mountpoint as readonly

$MOUNT -o remount,ro $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
    $ECHO "snapshot: could not remount $SNAPSHOT_RW readonly";
    exit;
} fi;

, а второй:

Listing two: daily_snapshot_rotate.sh

#!/bin/bash
# ----------------------------------------------------------------------
# mikes handy rotating-filesystem-snapshot utility: daily snapshots
# ----------------------------------------------------------------------
# intended to be run daily as a cron job when hourly.3 contains the
# midnight (or whenever you want) snapshot; say, 13:00 for 4-hour snapshots.
# ----------------------------------------------------------------------

unset PATH

# ------------- system commands used by this script --------------------
ID=/usr/bin/id;
ECHO=/bin/echo;

MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;

# ------------- file locations -----------------------------------------

MOUNT_DEVICE=/dev/hdb1;
SNAPSHOT_RW=/root/snapshot;

# ------------- the script itself --------------------------------------

# make sure we're running as root
if (( `$ID -u` != 0 )); then { $ECHO "Sorry, must be root.  Exiting..."; exit; } fi

# attempt to remount the RW mount point as RW; else abort
$MOUNT -o remount,rw $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
    $ECHO "snapshot: could not remount $SNAPSHOT_RW readwrite";
    exit;
}
fi;


# step 1: delete the oldest snapshot, if it exists:
if [ -d $SNAPSHOT_RW/home/daily.2 ] ; then          \
$RM -rf $SNAPSHOT_RW/home/daily.2 ;             \
fi ;

# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $SNAPSHOT_RW/home/daily.1 ] ; then          \
$MV $SNAPSHOT_RW/home/daily.1 $SNAPSHOT_RW/home/daily.2 ;   \
fi;
if [ -d $SNAPSHOT_RW/home/daily.0 ] ; then          \
$MV $SNAPSHOT_RW/home/daily.0 $SNAPSHOT_RW/home/daily.1;    \
fi;

# step 3: make a hard-link-only (except for dirs) copy of
# hourly.3, assuming that exists, into daily.0
if [ -d $SNAPSHOT_RW/home/hourly.3 ] ; then         \
$CP -al $SNAPSHOT_RW/home/hourly.3 $SNAPSHOT_RW/home/daily.0 ;  \
fi;

# note: do *not* update the mtime of daily.0; it will reflect
# when hourly.3 was made, which should be correct.

# now remount the RW snapshot mountpoint as readonly

$MOUNT -o remount,ro $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
    $ECHO "snapshot: could not remount $SNAPSHOT_RW readonly";
    exit;
} fi;

После создания сценария для ваших нужд добавьте его в задания cron.

crontab -e

добавить следующее:

crontab -e

0 13 * * * /usr/local/bin/daily_snapshot_rotate.sh

0 * / 4 * * * /usr/local/bin/make_snapshot.sh

Они заставляют make_snapshot.sh запускаться каждые четыре часа в час и daily_snapshot_rotate.sh для запуска каждый день в 13:00 (то есть, 1:00 PM).

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

источник: http://www.mikerubel.org/computers/rsync_snapshots/

Если вы хотите, чтобы он выполнялся ежечасно, вы добавляли задание cron за каждый час.

Установить rsnapshot (доступно в программном центре). Настроить rsnapshot и указать каталог источника резервных копий

. Другая возможная опция - использовать rsnapshot

# nano /etc/rsnapshot.conf

cmd_cp          /bin/cp
cmd_ssh /usr/bin/ssh
cmd_du          /usr/bin/du
cmd_rsnapshot_diff      /usr/local/bin/rsnapshot-diff
logfile /var/log/rsnapshot
Установить rsnapshot (доступно в программном центре)

Установить rsnapshot (доступно в программном центре)

Открыть /etc/rsnapshot.conf и раскомментировать g.

# rsnapshot configtest
Syntax OK

Установить rsnapshot (доступно в программном центре)

Проверить rsnapshot Конфигурация

Выполните проверку конфигурации, чтобы убедиться, что rsnapshot настроен правильно и готов к выполнению резервной копии linux rsync.

# rsnapshot -t hourly
echo 6490 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /.snapshots/
mkdir -m 0755 -p /.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \
/.snapshots/hourly.0/localhost/
mkdir -m 0755 -p /.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
/.snapshots/hourly.0/localhost/
mkdir -m 0755 -p /.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local /.snapshots/hourly.0/localhost/
touch /.snapshots/hourly.0/
Проверить rsnapshot Конфигурация ежедневного резервного копирования

Вы можете создавать резервные копии каталогов или файлов linux на различные интервалы.

# rsnapshot -t daily
echo 6493 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /.snapshots/
/.snapshots/hourly.5 not present (yet), nothing to copy
Проверить rsnapshot Конфигурация ежедневного резервного копирования

Проверить часовую конфигурацию резервного копирования.

# crontab -e
0 */4 * * * /usr/local/bin/rsnapshot hourly
30 23 * * * /usr/local/bin/rsnapshot daily

Убедитесь, что ежедневный процесс резервного копирования csrsync rsnapshot настроен правильно.

После того, как вы подтвердили правильность настройки часовых и ежедневных конфигураций rsync в утилите rsnapshot cwrsync, пришло время установите этот щенок в crontab, как показано ниже.

источник: http://www.mikerubel.org/computers/rsync_snapshots/

- - Bare Metal Recovery

# dd if-/dev/hda of=/backups/mbr bs=512 count=1

Я бы использовал dd и tar для восстановления baremetal.

# mkdir /backups
# mount nfsserver:/backups/<servername> /backups


# cd /
# tar cfz /backups/system.tar.gz --exclude /mnt --exclude /proc --exclude /backups

Резервное копирование важных метаданных:

7
ответ дан 25 May 2018 в 16:53
  • 1
    Весь ваш ответ выглядит очень хорошо, никаких проблем и все, кроме его не того, что я прошу, любой из методов не будет восстанавливать MBR, а dd не является инкрементным. Это не то, о чем я прошу. Последние 10% могут быть интересны для поиска, но все остальное информационное хранилище действительно нет. – Bruno Pereira 14 November 2011 в 12:24
  • 2
    Более подробная информация о файловой системе (в виде файловой системы), и я добавил процесс dd для работы с MBR. – cprofitt 14 November 2011 в 23:39

Вы должны взглянуть на ddar (домашняя страница).

Он инкрементален в смысле отсутствия передачи идентичных частей моментального снимка. Это не является добавочным в классическом значении слова, поскольку он имеет дело с моментальными снимками.

ddar Я не пробовал это сам (но я доверяю автору). Возможно, он не сделает то, что вы хотите получить из коробки, но все же на странице есть более похожие решения (например, ZFS), поэтому, возможно, это может оказаться полезным. [!d4 ]

3
ответ дан 25 May 2018 в 16:53
  • 1
    Я автор ddar (спасибо за упоминание!). Если я правильно понял вопрос, передав ddar, серия снимков LVM будет выполняться точно так же, как и требовалось. Как вы говорите, речь идет о моментальных снимках, а не инкрементах, но моментальные снимки будут иметь тот же эффект с тем преимуществом, что старые снимки можно удалить по желанию, не затрагивая более новые. – Robie Basak 15 November 2011 в 02:59
  • 2
    @robie, я был бы в восторге от того, как это будет работать, можете ли вы сделать очень маленький справочник для меня или любого пользователя, который может искать такое решение? – Bruno Pereira 16 November 2011 в 17:20

Существует 2 способа создания инкрементного резервного копирования на основе блоков

Снимки на основе файловой системы Программные снимки

Снимки на основе файловой системы

Оба ZFS и BTRFS предоставляют основанные на блоках инкрементные снимки (BTRFS, ZFS (стр. 25)). У вас может быть диск, к которому вы подключились, - это либо ZFS, либо BTRFS, и моментальный снимок.

Существует также ZFS (упомянутый cprofitt), который обеспечивает такие же инкрементные моментальные снимки на основе блоков.

Снимки, основанные на программе

Там есть несколько программ резервного копирования, однако некоторые из них торчат для этой цели:

Снимки на основе файловой системы Rdiff -backup

Я знаю, что вы конкретно упоминали, что вы не ищете что-то вроде двуличности, однако я думал, что могу упомянуть некоторые функции.

Однако эти программы требуют установки их для восстановления. Красота чего-то типа rsync заключается в том, что почти каждая установка linux имеет rsync (например, крошечное ядро ​​(10 Мбайт)) по умолчанию.

Duplicity

Он просто хранит diff (уровень блока), а затем сжимает и шифрует их. Это приводит к еще меньшему хранению, чем метод rsync, однако (по крайней мере, так, как я его вижу) файловая система должна быть восстановлена, что потребует времени (если вы используете инкрементное резервное копирование с ней, и это зависит от времени с последняя полная резервная копия)

Несколько программ резервного копирования объясняют, как это работает.

Rdiff-backup

Программа клиент-сервер, которая создает, подобно двуличности, уровень уровня уровня, но сохраняет изменения с последней точки восстановления, поэтому самый последний моментальный снимок является самым быстрым для восстановления.

Некоторые люди сравнивают rdiff-backup с rsnapshot (кажется более автоматическим способом менталитета rsync). Почти все BTRFS сосредоточены на использовании rdiff по сети, однако я нашел тот, который упоминает, как это сделать на localhost.

3
ответ дан 25 May 2018 в 16:53
  • 1
    хорошо, мне это нравится, расскажите, как сделать эту работу с восстановлением раздела? то есть, если я сломаю диск, как бы я могу восстановить свою полную систему из моментального снимка без необходимости делать сами разделы и т. д., не должен быть очень подробным или включать скрипты, просто некоторые имена команд и то, что они будут делать. – Bruno Pereira 16 November 2011 в 17:26
  • 2
    У меня не было опыта работы с этими системами, я только нашел, что они занимались некоторыми исследованиями с использованием Google (следовательно, это только ссылки). например Я узнал, что на самом деле duplicity. – Portablejim 16 November 2011 в 18:20

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

Для моментальных снимков LVM нужен оригинал объем работы. Это связано с тем, что новый том содержит разницу между моментальным снимком и реальной файловой системой.

Если вы покинете систему в этом состоянии, вы начнете тратить дисковое пространство при изменении новой файловой системы. Я не знаю, есть ли способ консолидировать моментальный снимок и окончательный файл. Конечно, вы можете использовать dd для другого логического тома, но для этого вам потребуется вдвое больше пространства вашей файловой системы, а также разница между вашей «точкой восстановления» и текущим состоянием.

И все это требует перезагрузки и это далеко не автоматическое.

Он также предположил, что это происходит несколькими современными файловыми системами, такими как zfs на системах солярия или экспериментальными btrfs.

1
ответ дан 25 May 2018 в 16:53

Это немного над моей головой, но это похоже на часть того, что вы хотите сделать, это сделать частичное резервное копирование двоичных файлов (например, файлов изображений разделов). Есть пакет, предназначенный для этого (я только что прочитал об этом - не пробовал).

Взгляните на bup.

https://github.com/apenwarr / bup

Это может дать вам некоторые идеи.

1
ответ дан 25 May 2018 в 16:53

Другие вопросы по тегам:

Похожие вопросы: