|
Viết bởi canh_nguyen
|
Tôi sử dụng BackUpPC để sao lưu server của mình. Đó là một giải pháp dựa trên ổ đĩa cứng - vì thế nếu bạn muốn lưu vào thiết bị di động như DVD-R hoặc băng từ bạn cần lưu riêng cho mỗi bước.
Lợi điểm của BackupPC là bạn có thể thực hiện việc sao lưu từ tất cả các máy trong mạng, mà không cần có phần mềm đặc biệt được chạy ở mỗi máy khách. Đó là sự thật nhưng gây đôi chút nhầm lẫn. Nếu bạn muốn có sự bảo mật, bạn cần thiết lập đôi chút ở máy khách.
Cấu hình có vẻ như không cần thiết lắm. Đây là những gì tôi đã làm.
Sử dụng Debian Sarge, cài đặt cơ bản. Chỉ chấp nhận cấu hình mặc định cho sao lưu máy sử dụng Windows thông qua Samba. Đó không phải là quá nhiều với tôi, tôi cần biết hiểu cách thức làm việc để sao lưu localhost. Có mục FAQ trên tiêu đề nhưng nó không đầy đủ.
1. Chuẩn bị phân vùng sao lưu.
Hãy làm điều này trước khi bạn cài đặt phần mềm, để dữ liệu của bạn được giữ nguyên trạng thái sơ khởi như là một phần của quá trình cài đặt.
# mkfs.xfs /dev/hdb1
# mkdir -p /var/lib/backuppc
# echo '/dev/hdb1 /var/lib/backuppc xfs defaults 0 2' >> /etc/fstab
# mount /var/lib/backuppc
XFS nhanh hơn và mạnh hơn EXT3, vì thế tôi nghĩ nó là sự lựa chọn tốt để sao lưu tập tin hệ thống. Phiên bản Debian của BackupPC được viết cẩn thận để sử dụng /var/lib/backuppc như là thư mục dữ liệu, làm ta có cảm giác như sử dụng mount point.
2. Cài đặt phần mềm
Tôi cần backupc và sudo.
# apt-get install backuppc sudo
Nếu bạn muốn sao lưu từ máy tính khác như localhost hãy cài rsyns.
3. Tạo mã tar-create.
Để sao lưu phân vùng root, BackupPC cần đọc được tất cả các tập tin. Để có được truy cập này nó cần được gán quyền root. Để tránh làm ảnh hưởng tới các máy tính khác do việc sao lưu server, talàm theo những lời khuyên trong FAQ và sử dụng sudo cho phép backuppc chạy một shell script nhỏ.
Tôi thấy một vài vấn đề với script theo hướng dẫn trong tài liệu BackupPC. Đầu tiên, nó sử dụng lệnh tar không chính xác (sử dụng $* chứ không phải là "$@"). Thứ hai, nó không an toàn - bỏ đi tùy chọn -f được dùng bởi server cho phép kẻ tấn công có thể ghi tập tin tar vào mọi nơi trong hệ thống - có thể được sử dụng để leo thang đặc quyền, bằng cách ghi vào hồ sợ /root/ là một ví dụ. Đây là phiên bản của tôi:
/etc/backuppc/tar-create:
!/bin/sh -f
exec /bin/tar -c -f - "$@"
Sau đó, thực hiện các tập tin này bằng cách thực thi bằng quyền root, và sử dụng visudo để cho phép người dùng backuppc thực hiện nó mà không cần mật khẩu:
backuppc ALL = NOPASSWD: /etc/backuppc/tar-create
4. Tạo config.pl cho localhost.
Tôi đã đọc lại các tài liệu hướng dẫn nhiều lần trước khi tôi phát hiện nơi tôi đã được yêu cầu đặt cho mỗi máy cấu hình. Đó là trong một tập tin gọi là /var/lib/backuppc/pc/HOSTNAME/config.pl. Đây là phiên bản cho localhost của tô:
/var/lib/backuppc/pc/localhost/config.pl:
Local server backup of / as user backuppc
$Conf{XferMethod} = 'tar'; $Conf{TarShareName} = ['/']; $Conf{TarClientCmd} = '/usr/bin/sudo /etc/backuppc/tar-create -v -C $shareName --totals'; $Conf{TarFullArgs} = '$fileList'; $Conf{TarIncrArgs} = '--newer=$incrDate $fileList'; $Conf{BackupFilesExclude} = ['/media', '/mnt', '/proc', '/var/lib/backuppc', '/sys'];
Tôi đã cố gắng thêm vào tùy chọn --one-file-system cho tar, và tiếp đó liệt kê tập tin hệ thống tôi muốn sao lưu. Nó không làm việc bởi nó luôn hoạt động như là một dòng lệnh đơn, không phải cho mỗi mục trong BackupFilesInclude. Dầu vậy tôi đã quản lý nó để làm điều tôi muốn mặc dù chưa được hoàn hảo.
(*)Tôi cũng gặp vấn đề với sự tăng vọt của sao lưu. Giá trị mặc định của TarIncrArgs dùng mẫu ‘+’ của $incrDate, mà shell lại bỏ nó. Điều này không cần thiết cho sudo không phải là một shell. Tùy chọn --newer đã bị loại bỏ trong sự tăng vọt của sao lưu, điều này tiêu tốn vài giờ. Đó là tell-table của error log message…
Running: /usr/bin/sudo /etc/backuppc/tar-create -v -C / --totals --newer=2006-08-04\ 08:31:37 --exclude=./media (...)
Xfer PIDs are now 6857,6856
/bin/tar: Substituting 1901-12-13 20:45:52 for unknown date format `2006-08-04\\'
/bin/tar: 08\:31\:37: Cannot stat: No such file or directory
Tôi đã định nghĩa lại TarIncrArgs và TarFullArgs để loại bỏ tình trạng shell escapes(*), và nó hoạt động tốt. Sự tăng tiến sao lưu bây giờ chỉ tính bằng phú thay vì bằng giờ.
Theo firetree
|