데이터 무결성 및 체크섬, 중복 제거 및 스냅 샷과 같은 ZFS 기능을 활용하기 위해 데비안 PC에서 개인 홈 데이터를 ZFS로 이동하려고합니다. 박스는 단순한 NAS 이상이어야하므로 FreeNAS와 같은 박스에 전념하는 데 관심이 없습니다.
그렇게하면서 야간에 데이터를 백업하고 주기적으로 오프 사이트로 가져 오는 방법에 대해서도 생각하고 있습니다. 현재 설정은이 게시물의 뒷부분에서 설명합니다. 백업에 대해 아래에 설명 된 세 번째 접근 방식에 대한 장단점을 알고 싶습니다.
(1) ZFS를 처음 사용하고 익숙하지 않기 때문에 ZFS 풀에 라이브 데이터를 저장하고 Dirvish를 사용하여 해당 데이터를 ZFS가 아닌 백업 드라이브에 백업하여 안전하게 재생하는 것을 고려하고 있습니다.
(2) 또한 시간당 스냅 샷만큼 자주 발생할 수있는주기적인 스냅 샷에 대한 크론 작업 설정에 대해 배웠으므로 매시간 또는 매일 스냅 샷을 찍고 라이브 데이터 드라이브를 설정 한 다음 전송 / 수신하는 방법에 대해 생각하게되었습니다. ZFS 용으로 포맷 된 백업 드라이브.
(3) 마지막으로, ZFS와 함께이 복잡한 작업을 수행 할 필요가 없다는 것이 최근에 저를 때렸습니다. RAID1과 유사한 미러 vdev 구성으로 두 개의 드라이브를 설정 한 다음 시간별 스냅 샷을 설정하면 어떻게됩니까? 이런 식으로, 나는 즉각적인 백업을 할 것 같고 두려워하는 RAID-is-a-a-backup으로부터 보호됩니다.
/bin/rm -Rf /*
3 번으로 드라이브 중 하나가 다운되면 계속 사용할 수있는 미러가 있습니다. 아래에서 언급했듯이, 나는 RAID의 고 가용성없이 살 수 있지만,이 경우에는 무료로받을 수있을 것 같습니다.
내가 관심을 가질 유일한 것은 아래에 설명 된 오프라인 오프 사이트 드라이브 일 것입니다. 몇 주 또는 몇 달이 지난 스페어로 미러 드라이브 하나를 주기적으로 회전시키는 것이 문제가됩니까?
현재 설정과 관련하여 현재 Ubuntu 상자의 모든 것을 일반적인 ext3 파티션에 보관합니다. 더 이상 RAID를 사용하지 않습니다. 고 가용성에 대한 개인적인 필요는 없습니다. 문제가 발생하면 백업에서 복원 할 시간이 있습니다.
나는 dirvish를 사용하여 데이터, 랩톱 및 야간에 가치있는 모든 것을 야간에 백업하고 약 2 개월 후에 스냅 샷을 만듭니다.
정기적으로 백업 드라이브를 교체하여 오프 사이트 및 오프라인으로 가져갈 수 있습니다. 주 드라이브와 라이브 백업 드라이브를 잃어버린 경우에도 적어도 몇 주가 지난 후에도 오프 사이트 드라이브가 남아있을 것입니다.
드라이브 배열을 유지하는 것을 고려하고 있지 않습니다. 모든 데이터에는 단일 드라이브를, 전체 백업에는 다른 단일 드라이브를 사용하고 싶습니다. 이를 통해 현재 백업 드라이브가 연결되어있는 단일 오프 사이트 백업 드라이브를 주기적으로 쉽게 회전 할 수 있습니다.
감사.
편집 : 나는 여기에 설명 된 명령을 사용하여 설치된 Linux에서 ZFS로 데비안을 실행하는 VM에서 jlliagre의 # 2를 시도했습니다.
http://www.bsdnow.tv/tutorials/zfs
3 개의 디스크를 시뮬레이션하기 위해 3 개의 파일을 생성하는 것으로 시작했습니다.
# 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 파일을 만들었습니다.
# 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
나는 이것이 2 개월간의 백업을 가져올 것이라고 생각하지 않지만 시작입니다.
이제 첫 번째 링크에서 예제를 재생하여 파일을 만들고 스냅 샷을 만든 다음 파일을 수정했습니다.
jlliagre의 권장 사항에 따라 rotation_mirror1을 교체하고 rotation_mirror2로 교체하고 싶었습니다. (실제 박스에서는 SATA 미러 1 드라이브를 제거하기 위해 박스의 전원을 끄고 대신 미러 2 드라이브로 교체 할 것으로 예상됩니다.)
# 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를 가져올 수 없거나 rotation_mirror1로 다른 작업을 수행 할 수 없습니다. 결국 mypool_bak를 만들려고 시도했지만 거기에 아무것도없는 것을 보았습니다.
# zpool create -f mypool_bak /mnt/sda3/rotating_mirror1
# zpool destroy mypool_bak
# zpool attach mypool /mnt/sda3/primary /mnt/sda3/rotating_mirror1
나는이 시점에서 rotation_mirror1이 primary의 변경 사항과 동기화되었다고 가정합니다.
나는 다시 나누려고했다.
# 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
이제 rotation_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
이 시점에서 시간이 지남에 따라 사용되는 디스크를 시뮬레이션하기 위해 파일과 스냅 샷을 몇 개 더 만들었습니다.
이제 rotation_mirror2를 제거하고 싶었지만, rotation_mirror1을 다시 가져오고 싶지 않았습니다.
# zpool split -R /mypool2a mypool mypool2 /mnt/sda3/rotating_mirror2
# zpool export mypool2
# rmdir /mypool2a
이 시점에서 rotation_mirror1을 다시 가져 오려고하면 모든 내용이 삭제되고 현재 기본이 회전 _ 미러 1에 미러링됩니다.
대신 기본이 중단되고이 시점에서 rotation_mirror1에서 복원해야한다면 어떻게해야합니까? rotation_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
다시 작성해야 할만큼 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 및 rotation_mirror2는 풀의 이름이 동일하므로이 예제의 후속 가져 오기 명령은 위에 나열된대로 작동하지 않습니다. 대신 풀은 숫자 ID로 가져와야합니다.
# 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
솔직히, 이것은 미러를 임포트하면 풀 이름이 변경 된 이후로 미러가 수정되고 현재 기본이 재구성되는 동안 라이브 상태이며 수정할 수 있기 때문에 약간 더러운 느낌을줍니다.
미러에 적합하다는 것을 이해할 수 있지만,이 미러를 “플러그인”할 때이 미러를 라이브 백업으로 취급하고 싶다는 것을 기억하십시오.
나는 이것을 시도하지 않았지만 반대 의견이 없다면, rotation_mirror2를 가져 오지 말고 다음과 같이하는 것을 선호한다고 생각합니다.
# dd if=/mnt/sda3/rotating_mirror2 of=/mnt/sda3/primary bs=...
완료되면 기본을 직접 가져올 수 있고 모든 사람이 행복하기를 바랍니다.
마지막 참고 사항 : 하나 이상의 미러를 가질 수 있다는 사실을 알게되었으므로 실제로 원한다면 3 개 대신 4 개의 드라이브를 설정하여 2 개는 항상 서로의 “기본”미러가되며 rotation_mirror1과 rotation_mirror2가됩니다. 두 번째 드라이브 대신 세 번째 드라이브가됩니다.
감사.
답변
1 : ZFS 중복을 원하지 않는 경우 다음을 수행 할 수 있습니다.
- 첫 번째 디스크를 활성 풀로 사용하십시오.
- 인적 오류와 같은 경우 빠른 롤백이 가능하도록 스냅 샷을 예약하십시오
rm -rf
. - 두 번째 디스크에 백업 풀 생성
- 첫 번째 풀 증분 스냅 샷에서이 백업 풀을 정기적으로 업데이트하십시오
zfs send ... | zfs receive ...
.
마운트 포인트 충돌을 피하려면 대체 루트로 백업 풀을 작성해야합니다.
백업 디스크를 다른 디스크와 교체하여 다른 곳에 저장할 수 있습니다. 디스크를 제거하기 전에 백업 풀을 내보내고 다른 디스크에 대체 백업 풀을 만든 다음 첫 번째 풀의 초기 전체 백업을 수행하십시오.
2 : 중복성을 원한다면 미러 풀을 사용하고 디스크를 교환 할 때 zpool split
명령으로 풀을 분할하고 새로 만든 풀 디스크를 제거하고 대체 디스크를 삽입하고 대체 디스크를 삭제하는 방법 추가 된 디스크로 미러링을 구성하고 풀링합니다.
# 2는 데이터 중복성이 있으므로 더 안전하므로 내가 권장하는 것이 될 것입니다.
답변
(3) 마지막으로, ZFS와 함께이 복잡한 작업을 수행 할 필요가 없다는 것이 최근에 저를 때렸습니다. RAID1과 유사한 미러 vdev 구성으로 두 개의 드라이브를 설정 한 다음 시간별 스냅 샷을 설정하면 어떻게됩니까? 이런 식으로, 나는 즉각적인 백업을 할 것 같고 두려워하는 RAID-is-a-a-backup으로부터 보호됩니다 : / bin / rm -Rf / *
ZFS 수준에서 실수로 모든 스냅 샷, 데이터 세트 및 풀을 완전히 제거하는 명령에 어떻게 도움이됩니까? 분명히 RAID- 여전히 백업이 아님과 ZFS 보내기 / 받기는 백업에만 RAID에 의존하는 것에 대해 생각조차하지 않는 훌륭한 도구를 제공합니다.