В настоящее время я создаю резервную копию моего Raspberry Pi 3 на локальном NAS с помощью этой команды:

sudo dd if=/dev/mmcblk0 bs=1M | gzip > /mnt/MyCloud/"$(date +%FT%T)".gz

Это должно выполняться ежедневно, используя cron.

  • Этого достаточно для восстановления, если диск умирает?
  • Есть ли лучший / более быстрый способ?
  • Если я хочу восстановить всю систему, как мне это сделать? Диск сжат, поэтому я не могу просто dd if=my-backup.gz of=/dev/mmcblk0 , я думаю

2 ответа2

2
  1. Этого более чем достаточно для восстановления (на самом деле это не рекомендуется делать в работающей системе, но если вы не используете часто изменяемые файлы, такие как, например, база данных, тогда система может понять, как восстановить себя при восстановлении). Если у вас нет базы данных, просто используйте sync;sync;sync перед запуском резервного копирования всей системы, чтобы убедиться, что кэш файла мигает на диск)
  2. читайте ниже для ИМХО лучшего решения
  3. просто используйте gunzip -c /path/to/your.image.gz | dd of=/dev/sdX

ИМХО, это пустая трата места на диске резервного копирования, вы клонируете один и тот же неизмененный контент несколько раз. Используйте tar в инкрементном режиме, он будет копировать только изменения между предыдущими.

Простой пример инкрементного резервного копирования с помощью tar

#!/bin/sh

TAR='/bin/tar'
DATE='/bin/date'
SrcDir='/'
BkpDir='/mnt/MyCloud'
f=$($DATE '+%Y-%m-%dT%H-%M-%S')
snar="${BkpDir}/snar.diff" # If you need full backup then remove 
                           # ${snar} file before doing backup

[ -f "${snar}" ] && level=1 || level=0

$TAR -czf "${BkpDir}/${f}_dump.level.${level}.tgz"   \
    --listed-incremental=${snar}    \
    --no-check-device               \
    --totals                        \
    --level=${level}                \
    --directory=${SrcDir}           \
    --exclude=tmp/*                 \
    --exclude=media/*               \
    --exclude=mnt/*                 \
    --exclude=proc/*                \
    --exclude=sys/*                 \
    --exclude=dev/*                 \
    --exclude=run/*                 \
    --exclude=var/tmp/*             \
    --exclude=var/run/*             \
    --exclude=var/lock/*            \
    --exclude=var/cache/locate/*    \
    --exclude=var/dcc/dccifd                \
    --exclude=var/lib/amavis/amavisd.sock   \
    --exclude=var/lib/php5/sess_*           \
    --exclude=var/spool/postfix/dev/*       \
    --exclude=var/spool/postfix/pid/*       \
    --exclude=var/spool/postfix/private/*   \
    --exclude=var/spool/postfix/public/*    \
    --exclude=backup                        \
    --exclude=${BkpDir}                     \
    .
    exit $?
0

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

  1. отключить RPi.
  2. удалить SD-карту
  3. перейти на Windows PC (Linux будет работать, но с использованием DD я полагаю)
  4. Используйте Win32DiskImager , чтобы прочитать содержимое файла.

Я делаю это только каждые несколько месяцев, однако, кроме системных обновлений, на SD-карте очень мало изменений. Win32 Disk Imager скачать @ sourceforge

Это обеспечит полную резервную копию системы. Как указано выше, я не видел смысла иметь несколько копий всего моего диска, кроме как занимать место. Мой метод дает полную резервную копию, а мои другие файлы (например, dlna music и webserve folder) не хранятся на SD-карте, они находятся на USB-диске. Мой способ прост, как я, лол, но это работает. В противном случае подход инкрементного резервного копирования tar выглядит очень хорошо.

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