3

Я подумываю переместить свои личные домашние данные в 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, вероятно, в обычном разделе ext3. Я больше не использую RAID; У меня нет личной потребности в высокой доступности; если что-то пойдет не так, я могу позволить себе время на восстановление из резервной копии.

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

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

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

Благодарю.

РЕДАКТИРОВАТЬ: я дал 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

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

@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, я хотел поменять местами Swing_mirror1 и заменить на Swing_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, ни делать что-либо еще с вращением_mirror1. В итоге я попытался создать mypool_bak, увидел, что там ничего не было, уничтожил его, а затем прикрепил вращающийся_mirror1 обратно к основному.

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

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

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

# 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

Похоже, теперь я должен быть в состоянии ввести вращение_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

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

Теперь я хотел удалить вращающийся_миррор2, но пока не хотел возвращать вращающий_миррор1.

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

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

Что, если вместо этого основной ресурс вышел из строя и его нужно было восстановить из вращающейся_миррор1 на этом этапе? Как я могу использовать вращение_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

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

РЕДАКТИРОВАТЬ: я перезапустил шаги снова и сделал несколько незначительных изменений, теперь я знаю немного больше. Я не сделал все шаги ниже, но они все здесь для полноты. Я думаю, что получил это на этот раз.

# 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

Сделайте что-нибудь достаточно плохое, чтобы восстановить его.

# 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

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

# 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

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

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

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

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

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

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

Благодарю.

2 ответа2

1

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

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

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

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

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

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

0

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

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

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