Chiến lược sao lưu này có thể hoạt động như thế nào?


2

Tôi đang cố gắng để kịch bản một chiến lược sao lưu rất đơn giản. Đây là ý tưởng chung.

Hàng ngày - Sao lưu toàn bộ hệ thống tệp bằng rsync, ghi đè lên bản sao lưu của ngày hôm trước.

Hàng tuần - Mỗi tuần một lần sao chép bản sao lưu hàng ngày vào một thư mục riêng để giữ khoảng một tuần, ghi đè lên bản sao lưu của tuần trước.

Hàng tháng - vào ngày đầu tiên của tháng, sao chép bản sao lưu hàng ngày vào thư mục sao lưu montly để giữ khoảng một tháng, ghi đè lên bản sao lưu của tháng trước.

Đây là câu hỏi hóc búa: Mỗi ngày tôi thực hiện sao lưu hàng tuần, các bản sao lưu hàng tuần và hàng ngày sẽ giống nhau, vì vậy tôi sẽ không có một bản sao lưu cũ vài ngày.

Nếu ngày này rơi vào ngày đầu tiên của tháng thì tất cả các bản sao lưu sẽ giống nhau, làm giảm toàn bộ điểm có nhiều bản sao lưu.

Tôi bị giới hạn về không gian và ba bản sao lưu là tất cả những gì tôi có chỗ. Tôi đang sao lưu máy ảo và trang web vì vậy tôi không cần sử dụng lâu dài, nhưng tôi muốn sao lưu dự phòng trong một thời gian để đề phòng lỗi không được chú ý trong vài ngày.

Bất cứ ai có một số ý tưởng để làm lại chiến lược này? Vì vậy, tôi không có thời gian mà tất cả các bản sao lưu đều giống nhau.


Bạn có thể sử dụng các bản sao lưu khác nhau hoặc gia tăng thay vì sao lưu đầy đủ không?
Scott Chamberlain

1
Một vấn đề tôi đã thấy với rsync là nó không thể sao chép những thay đổi nhỏ trong hình ảnh VM. Thay vào đó, vì img luôn khác nhau, toàn bộ tệp sẽ được sao chép (các tệp .img lớn). Tôi nghĩ rằng nếu ndiff giữ các rollback xung quanh, tôi sẽ hết dung lượng khá nhanh.
Dan

1
Mua thêm dung lượng ổ cứng rồi. Không có nhiều thứ có thể làm được. Bản thân tôi đã sử dụng rất nhiều, nhưng không phải trên VM, tôi biết rằng nó thay đổi các thay đổi và các kích thước khối này có thể định cấu hình được. Nó sẽ là một sự đánh đổi kích thước dữ liệu so với kích thước chữ ký.
Scott Chamberlain

2
Nếu bạn chỉ muốn sao chép sự khác biệt trong một tệp duy nhất, bạn sẽ phải sử dụng một công cụ biết cách thực hiện điều đó, mà rsync không có. (Và điều đó sẽ gây ra I / O nặng.) Bạn đã xem rsnapshotchưa? Nó bao bọc xung quanh rsync, sử dụng các liên kết cứng để sao chép dữ liệu ở cấp độ tệp trong khi cung cấp khả năng khôi phục lại bản sao lưu đầy đủ từ bất kỳ vị trí mục tiêu sao lưu nào và có thể được định cấu hình cho nhiều lịch sao lưu. Tôi đã thêm một tập lệnh để dọn sạch các bản sao lưu cũ nếu đĩa sao lưu bắt đầu đầy, và cho đến nay nó vẫn hoạt động tốt (mặc dù tôi chỉ có một lịch sao lưu, để sao lưu hàng ngày).
một CVn

2
Chỉ cần thực hiện hàng tuần xảy ra vào thứ năm và sao lưu hàng ngày xảy ra hàng ngày. Điều này cho phép bạn có các bản sao lưu được tạo vào ThursdayFridaytương tự các bản cập nhật hàng tháng sẽ xảy ra vào ngày đầu tiên MondayhoặcTuesday
Ramhound

Câu trả lời:


2

Tôi sẽ viết một kịch bản kiểm tra nếu một bản sao lưu hơn 1,7 hoặc 30 ngày tuổi và hành động tương ứng. Bạn chưa nói như vậy nhưng tôi giả sử bạn đang sử dụng Linux (tôi đã thêm thẻ vào câu hỏi của bạn) và bạn đang sao lưu vào một máy chủ từ xa. Bước đầu tiên sẽ là viết một đoạn script nhỏ chạy rsynclệnh của bạn và cũng tạo một tệp trên máy chủ từ xa khi sao lưu xong. Điều này sẽ được sử dụng cả để cho biết liệu một bản sao lưu hiện đang chạy hay không và để kiểm tra tuổi của bản sao lưu (Tôi giả sử bạn đang giữ dấu thời gian ban đầu khi bạn sao lưu các tệp, vì vậy bạn không thể tự lấy ngày từ các tệp):

Tập lệnh Rsync (điều này giả sử bạn có quyền truy cập không cần mật khẩu vào máy chủ từ xa):

#!/usr/bin/env bash
ssh user@remote rm /path/to/daily/backup/backup_finished.txt
rsync /path/to/source/ user@remote:/path/to/daily/backup/
ssh user@remote touch /path/to/daily/backup/backup_finished.txt

Trên máy cục bộ , hãy thiết lập một công việc định kỳ thực hiện sao lưu hàng ngày:

@daily rsync_script.sh

Trên máy từ xa , bạn cần chạy tập lệnh tôi đưa ra bên dưới cứ sau vài giờ:

@hourly check_backup.sh

Kịch bản check_backup.sh:

#!/usr/bin/env bash

daily=/path/to/daily;
weekly=/path/to/weekly;
monthly=/path/to/monthly;

## The dates will be measured in seconds since the UNIX epoch, 
## so we need to translate weeks and months (31 days) to seconds.
week=$((60*60*24*7));
month=$((60*60*24*31));  

## Make sure no backup is currently running
if [ ! -e $daily/backup_finished.txt ]; then 
 echo "A backup seems to be running, exiting." && exit;
fi

## Get the necessary dates
weekly_backup_date=$(stat -c %Y $weekly/backup_finished.txt)
monthly_backup_date=$(stat -c %Y $monthly/backup_finished.txt)
now=$(date +%s)
monthly_backup_age=$((now - monthly_backup_date))
weekly_backup_age=$((now - weekly_backup_date))

## Check the age of the daily backup and copy it accordingly
 if [[ "$monthly_backup_age" -gt "$month" ]]; then

    ## Copy unless the current $daily is identical to $weekly
    diff $daily $weekly > /dev/null ||
    ## Delete the previous backup and copy the new one over
    rm -rf $monthly && cp -rp $daily $monthly
fi
## Copy the weekly backup if it is older than a week but only
## if it is not identical to $monthly. The -r flag makes cp 
## recursive and the -p flag makes it preserve dates and permissions. 
if [[ "$weekly_backup_age" -gt "$week" ]]; then
    ## Copy unless the current $daily is identical to $monthly
    diff $daily $monthly > /dev/null ||
    rm -rf $weekly && cp -rp $daily $weekly
fi

Vì vậy, tập lệnh này ( check_backup.sh) sẽ được chạy mỗi giờ trên máy chủ dự phòng của bạn. Vì nó không làm gì trừ khi bản sao lưu đủ cũ, không có vấn đề gì khi nó chạy thường xuyên như vậy. Bây giờ, mỗi khi sao lưu hàng ngày cũ hơn 31 ngày, nó sẽ được sao chép vào monthlythư mục và nội dung của monthlynó sẽ bị xóa. Tương tự cho hàng tuần khi sao lưu hơn 7 ngày tuổi.

Tôi đang sử dụng diffđể so sánh các bản sao lưu. Điều này có nghĩa là chúng tôi sẽ sao chép dailyvào weeklynếu hiện tại weeklyhơn một tuần nhưng chỉ khi bản sao lưu sẽ được sao chép (hiện tại daily) không giống với hiện tại weeklyvà tương tự monthly. Ví dụ: nếu tập lệnh vừa chạy và nó đã thấy rằng bản sao lưu hàng tháng giống với bản sao hàng tuần hiện tại, nó sẽ không ghi đè lên bản hiện có monthly. Tuy nhiên, một tuần sau khi ý weeklychí đã thay đổi, thì nó sẽ sao chép lại monthly.

Kết quả cuối cùng của việc này là bất cứ lúc nào bạn nên có tối thiểu hai bản sao lưu khác nhau và thông thường bạn sẽ có ba bản sao lưu. Trường hợp xấu nhất là một cái gì đó không thành công và bạn không có bản sao lưu một tuần tuổi, chỉ một tháng tuổi hoặc ngược lại , bạn không có một tháng tuổi nhưng bạn có tuần trước.


1

Đây là nhiều hơn một bình luận dài, thêm vào những gì người khác đã chỉ ra.

Đầu tiên, sử dụng các liên kết cứng và sao lưu gia tăng với rsync để giảm đáng kể dung lượng đĩa thực tế được sử dụng: mỗi bản sao lưu bổ sung sẽ chỉ chiếm kích thước của các tệp khác nhau. Nếu bạn đang sao lưu các hình ảnh VM lớn, thì tôi khuyên bạn không nên sao lưu các tệp hình ảnh mà thực sự là nội dung hệ thống tệp của chúng (như @Michael đã nhận xét). Một công cụ như rsnapshot sẽ hoạt động tốt, mặc dù (từ kinh nghiệm) nó đủ dễ dàng để tạo một tập lệnh của riêng bạn.

Sau đó loại bỏ các bản sao lưu cũ, giữ những bản cũ hơn trong khoảng thời gian ngày càng dài hơn. Tôi đã từng viết một chương trình chính xác để cho phép cấu hình cái này, nó có thể được tìm thấy ở đây (được gọi bu-rmselect).


1

Tôi là tác giả của chương trình dòng lệnh timegaps , cho phép bạn lọc các bản sao lưu định kỳ tạo ra và từ chối (danh sách, xóa hoặc di chuyển) những người lớn tuổi trong một cách để các "thời gian khoảng trống" giữa sao lưu được chấp nhận trở nên lớn hơn với độ tuổi ngày càng cao của sao lưu.

Xem xét tình huống sau: tất cả *.tar.gzcác tệp trong thư mục làm việc hiện tại xảy ra là ảnh chụp nhanh hàng ngày của một cái gì đó. Nhiệm vụ bây giờ là chấp nhận một ảnh chụp nhanh cho mỗi 20 ngày qua, một cho mỗi trong 8 tuần qua và một cho mỗi 12 tháng qua và chuyển tất cả những người khác vào thư mục notneededanymore. Sử dụng timegaps, đây là một nhiệm vụ đơn giản:

$ mkdir notneededanymore
$ timegaps --move notneededanymore days20,weeks8,months12 *.tar.gz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.