Начинающий резервное копирование пулов хранения ZFS

я рассматриваю возможность переноса моих личных домашних данных в ZFS на ПК Debian, чтобы воспользоваться такими функциями ZFS, как целостность данных и контрольные суммы, дедупликация и моментальные снимки. Коробка должна быть больше, чем просто NAS, поэтому мне не интересно посвящать коробку чему-то вроде FreeNAS.

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

(1) Поскольку я новичок и незнаком с ZFS, я рассматриваю возможность безопасного воспроизведения, помещая мои живые данные в пулы ZFS, но продолжая использовать Dirvish для резервного копирования этих данных на резервный диск, отличный от ZFS.

(2) я также узнал о настройке заданий cron для периодических снимков, которые могут быть столь же частыми, как почасовые снимки, так что я подумал о настройке живого диска данных, принимающего ежечасно или ежедневные моментальные снимки, а затем отправка/получение на диск резервного копирования, который также отформатирован для ZFS.

(3) Наконец, недавно меня поразило, что мне, возможно, не нужно делать ничего такого сложного с ZFS. Что делать, если настроить два диска в зеркальной конфигурации vdev, аналогичной RAID1,а затем настроить почасовые снимки? Таким образом, кажется, у меня будет мгновенная резервная копия, и я защищен от страшного RAID-is-not-a-backup:

/bin/rm -Rf /*

С #3, Если любой из диски отключаются, у меня есть зеркало, с которым можно продолжить. Как я упоминаю ниже, я могу жить без высокой доступности RAID, но в этом случае похоже, что я могу получить его бесплатно.

единственное беспокойство, которое у меня было бы, было бы моим автономным, удаленным приводом, описанным ниже. Будет ли проблемой периодически поворачивать один зеркальный диск с запасным, которому несколько недель или месяцев?

что касается моей текущей установки, я в настоящее время храню все на Ubuntu box В вероятно обычный раздел ext3. Я больше не использую RAID; у меня нет личной потребности в высокой доступности; если что-то пойдет не так, я могу позволить себе время для восстановления из резервной копии.

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

периодически я поворачиваю свои резервные диски, чтобы снять их с сайта и в автономном режиме. Если я потеряю основной диск и резервный диск, по крайней мере, у меня все еще будет выездной диск, даже если ему несколько недель.

я не рассматриваю возможность обслуживания массива дисков; я бы предпочел иметь один диск для всех данных и еще один диск для всей резервной копии. Это упрощает для меня периодическую ротацию одного внешнего резервного диска с подключенным в данный момент резервным диском.

спасибо.

EDIT: я дал jlliagre #2 попробовать на виртуальной машине под управлением Debian с ZFS на Linux устанавливается с помощью команд, описанных здесь:

http://www.bsdnow.tv/tutorials/zfs

я начал с создания трех файлов для имитации трех моих дисков:

# cd /mnt/sda3
# truncate -s 2G primary
# truncate -s 2G rotating_mirror1
# truncate -s 2G rotating_mirror2

как было сказано, я создал зеркальный пул, используя только один из зеркальных файлов:

# zpool create mypool mirror /mnt/sda3/primary /mnt/sda3/rotating_mirror1
# zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool   106K  1.95G    30K  /mypool
# zpool status -v mypool
  pool: mypool
 state: ONLINE
  scan: none requested
config:

    NAME                            STATE     READ WRITE CKSUM
    mypool                          ONLINE       0     0     0
      mirror-0                      ONLINE       0     0     0
        /mnt/sda3/primary           ONLINE       0     0     0
        /mnt/sda3/rotating_mirror1  ONLINE       0     0     0

errors: No known data errors

затем я попытался настроить автоматические снимки с помощью сценария, на который ссылается здесь:

http://alblue.bandlem.com/2008/11/crontab-generated-zfs-snapshots.html

я создал файл crontab для root:

# crontab -e

я вставил и изменил следующее по ссылке выше. Я не эксперт по cron, поэтому мне интересно, есть ли в этом какое-либо состояние гонки:

@reboot /sbin/zpool scrub mypool
@daily  /sbin/zpool scrub mypool
@hourly /sbin/zpool status mypool | /bin/egrep -q "scrub completed|none requested" && /sbin/zfs snapshot -r mypool@AutoH-`date +"%FT%H:%M"`
@daily  /sbin/zfs snapshot -r mypool@AutoD-`date +"%F"`
@weekly /sbin/zfs snapshot -r mypool@AutoW-`date +"%Y-%U"`
@monthly /sbin/zfs snapshot -r mypool@AutoM-`date +"%Y-%m"`
@yearly /sbin/zfs snapshot -r mypool@AutoY-`date +"%Y"`
# do a spot of housecleaning - somewhat assumes the daily ones have run ..
@hourly /sbin/zpool status mypool | /bin/egrep -q "scrub completed|none requested" && /sbin/zfs list -t snapshot -o name | /bin/grep mypool@AutoH- | /usr/bin/sort -r | /usr/bin/tail -n +26 | /usr/bin/xargs -n 1 /sbin/zfs destroy -r
@daily  /sbin/zfs list -t snapshot -o name | /bin/grep mypool@AutoD- | /usr/bin/sort -r | /usr/bin/tail -n +9 | /usr/bin/xargs -n 1 /sbin/zfs destroy -r
@weekly /sbin/zfs list -t snapshot -o name | /bin/grep mypool@AutoW- | /usr/bin/sort -r | /usr/bin/tail -n +7 | /usr/bin/xargs -n 1 /sbin/zfs destroy -r
@monthly /sbin/zfs list -t snapshot -o name | /bin/grep mypool@AutoM- | /usr/bin/sort -r | /usr/bin/tail -n +14 | /usr/bin/xargs -n 1 /sbin/zfs destroy -r

я не думаю, что это даст мне мои два месяца резервных копий, но это начало.

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

продолжая с рекомендацией jlliagre, я хотел поменять rotating_mirror1 и заменить на rotating_mirror2. (В реальной коробке, я бы ожидайте отключения питания коробки, чтобы удалить диск SATA mirror1 для замены с диском mirror2 на своем месте.)

# zpool split mypool mypool_bak /mnt/sda3/rotating_mirror1
# zpool status
  pool: mypool
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    mypool               ONLINE       0     0     0
      /mnt/sda3/primary  ONLINE       0     0     0

errors: No known data errors

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

# zpool create -f mypool_bak /mnt/sda3/rotating_mirror1
# zpool destroy mypool_bak
# zpool attach mypool /mnt/sda3/primary /mnt/sda3/rotating_mirror1 

я просто предполагаю, что rotating_mirror1 на данный момент синхронизирован с любым изменения в первичной.

я снова попытался разделиться:

# zpool split mypool mypool2 /mnt/sda3/rotating_mirror1

опять та же проблема, поэтому я пришил:

# zpool attach -f mypool /mnt/sda3/primary /mnt/sda3/rotating_mirror1

повторите попытку с параметром-R. Похоже, это сработало лучше:

# zpool split -R /mypool2a mypool mypool2 /mnt/sda3/rotating_mirror1
# ls /mypool2a/mypool2/
file1.txt  file2.txt  file3.txt  somefile
# zpool status
  pool: mypool
 state: ONLINE
  scan: resilvered 566K in 0h0m with 0 errors on Wed Dec  3 00:18:28 2014
config:

    NAME                 STATE     READ WRITE CKSUM
    mypool               ONLINE       0     0     0
      /mnt/sda3/primary  ONLINE       0     0     0

errors: No known data errors

  pool: mypool2
 state: ONLINE
  scan: resilvered 566K in 0h0m with 0 errors on Wed Dec  3 00:18:28 2014
config:

    NAME                          STATE     READ WRITE CKSUM
    mypool2                       ONLINE       0     0     0
      /mnt/sda3/rotating_mirror1  ONLINE       0     0     0

errors: No known data errors

следующий:

# zpool export mypool2
# rmdir /mypool2a

похоже, теперь я должен быть в состоянии принести в rotating_mirror2:

# zpool attach mypool /mnt/sda3/primary /mnt/sda3/rotating_mirror2
# zpool status
  pool: mypool
 state: ONLINE
  scan: resilvered 524K in 0h0m with 0 errors on Wed Dec  3 00:25:36 2014
config:

    NAME                            STATE     READ WRITE CKSUM
    mypool                          ONLINE       0     0     0
      mirror-0                      ONLINE       0     0     0
        /mnt/sda3/primary           ONLINE       0     0     0
        /mnt/sda3/rotating_mirror2  ONLINE       0     0     0

errors: No known data errors

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

теперь я хотел удалить rotating_mirror2,но я не хотел возвращать rotating_mirror1 обратно.

# zpool split -R /mypool2a mypool mypool2 /mnt/sda3/rotating_mirror2
# zpool export mypool2
# rmdir /mypool2a

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

что делать, если вместо основной пошел вниз и должны быть восстановлены из rotating_mirror1 на данный момент? Как я могу использовать rotating_mirror1 для перестроения праймериз?

# zpool destroy mypool
# zpool import -d /mnt/sda3/ -N mypool2 mypool
# zpool status
  pool: mypool
 state: ONLINE
  scan: resilvered 524K in 0h0m with 0 errors on Wed Dec  3 00:25:36 2014
config:

    NAME                          STATE     READ WRITE CKSUM
    mypool                        ONLINE       0     0     0
      /mnt/sda3/rotating_mirror1  ONLINE       0     0     0

errors: No known data errors
# zfs set mountpoint=/mypool mypool
# ls /mypool

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

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

# cd /mnt/sda3
# truncate -s 2G primary
# truncate -s 2G rotating_mirror1
# truncate -s 2G rotating_mirror2
# zpool create mypool mirror /mnt/sda3/primary /mnt/sda3/rotating_mirror1
# crontab -e
# echo (Paste crontab snippet from above.)

использовать бассейн.

# echo QUESTION Should a snapshot be created here?
# zpool split -R /mypool2 mypool mypool2 /mnt/sda3/rotating_mirror1
# zpool export mypool2
# rmdir /mypool2
# zpool attach mypool /mnt/sda3/primary /mnt/sda3/rotating_mirror2

используйте бассейн некоторые более.

# echo QUESTION Should a snapshot be created here?
# zpool split -R /mypool2 mypool mypool2 /mnt/sda3/rotating_mirror2
# zpool export mypool2
# rmdir /mypool2

сделать что-то достаточно плохое, чтобы mypool, что он должен быть воссоздан.

# echo QUESTION Should a backup of rotating_mirror2 be made prior to restoration in case something bad happens, or is there any way to bring in its contents read-only?
# zpool export mypool
# zpool import -d /mnt/sda3/ mypool2 mypool
# zpool attach mypool /mnt/sda3/rotating_mirror2 /mnt/sda3/primary

обратите внимание, что после выполнения команды import и primary, и rotating_mirror2 имеют одинаковые имена для пула, поэтому все последующие команды импорта в этом примере не будут работать, как указано выше. Вместо этого пул необходимо импортировать по числовому идентификатору:

# zpool import -d /mnt/sda3/
   pool: mypool
     id: 17080681945292377797
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    mypool                        ONLINE
      /mnt/sda3/rotating_mirror2  ONLINE

   pool: mypool
     id: 4810117573923218177
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    mypool               ONLINE
      /mnt/sda3/primary  ONLINE

# zpool import -d /mnt/sda3/ 4810117573923218177
# zpool export mypool
# zpool import -d /mnt/sda3/ 17080681945292377797

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

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

я не пробовал это, но если нет возражений, я думаю, что предпочел бы не импортировать rotating_mirror2 и вместо этого сделать что-то вроде:

# dd if=/mnt/sda3/rotating_mirror2 of=/mnt/sda3/primary bs=...

когда это сделано, я надеюсь, что смогу импортировать primary напрямую, и все будут счастливы.

последнее замечание: я узнал, что у меня может быть более одного зеркала, поэтому, если бы я действительно хотел, я мог бы настроить четыре диска вместо трех, в которых два всегда будут "основными" зеркалами друг друга, а rotating_mirror1 и rotating_mirror2 будут третьим диском вместо второго диска.

спасибо.

15
задан jia103
02.12.2022 11:28 Количество просмотров материала 2419
Распечатать страницу

2 ответа

1: Если вы не хотите избыточности ZFS, вы можете:

  • использовать первый диск в качестве активного пула.
  • расписание снимков, чтобы позволить быстрые откаты в случае человеческих ошибок, как rm -rf те.
  • создайте резервный пул на втором диске
  • регулярно обновлять этот резервный пул из первых добавочных снимков пула:zfs send ... | zfs receive ....

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

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

2: Если вы хотите избыточность, способ сделать это будет использовать зеркальный пул и, когда вы хотите поменять диски, разделить пул с zpool split команда, извлекает к заново созданному диску бассеина, вводит другой диск, разрушает альтернативный пул и настройка зеркального отображения с добавленным диском.

#2 безопаснее, поскольку есть избыточность данных, поэтому я рекомендую.

1
отвечен jlliagre 2022-12-03 19:16

(3) Наконец, недавно меня поразило, что мне, возможно, не нужно делать ничего такого сложного с ZFS. Что делать, если настроить два диска в зеркальной конфигурации vdev, аналогичной RAID1,а затем настроить почасовые снимки? Таким образом, кажется, у меня будет мгновенная резервная копия, и я защищен от страшного RAID-is-not-a-backup: /bin/rm-Rf /*

Как это поможет вам с командой на уровне ZFS, которая полностью удаляет все ваши снимки, наборы данных и бассейны случайно? Очевидно, что RAID-still-is-not-a-backup и ZFS send/receive предоставляют вам хорошие инструменты, чтобы даже не думать о том, чтобы полагаться на RAID только в качестве резервной копии.

0
отвечен Thorsten Schöning 2022-12-03 21:33

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

backup
hard-drive
raid
raid-1
zfs
Вверх