я рассматриваю возможность переноса моих личных домашних данных в 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 будут третьим диском вместо второго диска.
спасибо.