Đây là phần giới thiệu để sử dụng rsyncđể sao lưu trên Pi. Khi sao lưu ban đầu được tạo, việc cập nhật nó theo cách này nhanh hơn nhiều so với việc liên tục trích xuất toàn bộ hình ảnh. Bạn có thể làm điều này với một ổ cứng cục bộ hoặc qua mạng.
Bạn thực sự không muốn một bản sao hoàn chỉnh của một hệ thống đang chạy để sao lưu, vì một số nội dung có vẻ bề ngoài trong hệ thống tệp chỉ tồn tại trong thời gian chạy. Bao gồm điều đó trong một bản sao lưu và sau đó sử dụng nó để tạo lại một hình ảnh sau này có thể tạo ra vấn đề cho bạn.
Có một số trường hợp ngoại lệ khác quá. rsynccó thể chấp nhận một danh sách các mẫu (toàn cầu ) để loại trừ và những mẫu này có thể được đọc từ một tệp, vì vậy trước tiên chúng ta hãy tìm hiểu những gì nên có trong một tệp như vậy. Lưu ý rằng các mục có dạng /directory/*và không /directory. Điều này là do chúng tôi muốn chúng tồn tại, nhưng chúng tôi không muốn sao chép bất cứ thứ gì trong đó.
/proc/*
/sys/*
Chúng không thực sự tồn tại trên đĩa. Chúng là một giao diện cho kernel, tạo và duy trì chúng trong bộ nhớ . Nếu bạn sao chép chúng và sau đó sao chép chúng trở lại vào một hệ thống và khởi động nó, thì nó sẽ (vô nghĩa), vì kernel sử dụng chúng làm điểm gắn kết cho các giao diện [Nếu bạn muốn xem điều gì xảy ra khi bạn gắn kết phân vùng hệ thống tập tin trên một thư mục có dữ liệu trong đó, hãy thử. Nó hoạt động và sẽ không gây hại gì, nhưng những thứ trong thư mục hiện không thể truy cập được.]
Lưu ý rằng điều quan trọng là các điểm /sysvà /procđiểm gắn kết tồn tại. Nhưng chúng không nên chứa bất cứ thứ gì. Kế tiếp:
/dev/*
Các devthư mục không hoàn toàn giống như procvà syscho mục đích của chúng tôi. Nếu bạn tin rằng bạn nên lưu cái này để bạn có thể có cùng các nút thiết bị trong bản sao lưu của mình hoặc thứ gì đó, thì bạn đã nhầm . Đừng bận tâm. Đừng sao chép dev. Ngày xưa Linux đã hoạt động theo cách đó, nhưng nó không còn nữa.
/boot/*
Đây là một trường hợp đặc biệt với hầu hết (có lẽ là tất cả) các bản phân phối cụ thể của Pi như Raspbian. Đây thực sự là một điểm gắn kết cho phân vùng đầu tiên, vfat. Chúng tôi sẽ giải quyết vấn đề đó một cách riêng biệt. Dù bạn làm gì, đừng bận tâm bao gồm nó ở đây, bởi vì một lần nữa, đó là một điểm gắn kết.
/tmp/*
/run/*
/runnói chung cũng không có trên đĩa, nó nằm trong bộ nhớ. Có lẽ /tmpcũng có thể (điều này sẽ tiết kiệm một chút hành động của thẻ SD), nhưng trong mọi trường hợp, như tên gọi, đây không phải là nơi lưu trữ dữ liệu liên tục. Các ứng dụng sử dụng chúng hy vọng rằng chúng có thể bị xóa tại mỗi lần khởi động.
/mnt/*
/media/*
Đây là những điều đặc biệt quan trọng nếu bạn dự định sao lưu vào ổ cứng hoặc thẻ nhớ USB và thiết bị đang ở trong /mnthoặc /media(tự động hóa có xu hướng sử dụng thiết bị sau), bởi vì nếu bạn không loại trừ vị trí của các thiết bị đó trong hệ thống tệp, bạn sẽ tạo một vòng lặp sao lưu nội dung của ổ đĩa cho đến khi hết dung lượng. Tôi nghĩ rsync có thể đủ thông minh để phát hiện ra thứ gì đó ngớ ngẩn nhưng cố gắng tránh thử nghiệm tiền đề.
Bật để sao lưu thực tế: Tạo một thư mục để sao lưu trên ổ cứng được gắn cục bộ, điều USB, v.v. - ví dụ: "pi_backup". Bạn có thể luân phiên sao lưu vào một vị trí từ xa thông qua ssh(xem bên dưới) hoặc sử dụng hệ thống tập tin gắn trên mạng, nhưng điều này có thể sẽ mất một lúc lần đầu tiên.
Nếu tệp chứa danh sách cần loại trừ là /rsync-exclude.txt1 và ổ đĩa của bạn là /mnt/usbhd, để thực hiện sao lưu thực tế:
rsync -aHv --delete --exclude-from=/rsync-exclude.txt / /mnt/usbhd/pi_backup/
Lưu ý rằng có một dấu gạch chéo trênpi_backup/ .
Điều này sẽ mất một thời gian và tạo ra rất nhiều đầu ra (nếu bạn muốn kiểm tra điều đó trong một bản ghi thay thế, hãy chắp thêm > rsync.log). --deletelà vô nghĩa lần đầu tiên, nhưng để giữ cho bản sao lưu được cập nhật, hãy sử dụng nó. Điều này đảm bảo rằng những thứ bạn đã xóa sau đó trên Pi cũng sẽ bị xóa khỏi bản sao lưu của bạn. Các atập hợp đệ quy vào các thư mục và đảm bảo tất cả các thuộc tính tệp khớp. -Hlà để bảo vệ các liên kết cứng 2 , vdành cho verbose, đó là lý do tại sao bạn nhận được một số đầu ra (nếu không rsyncthì yên tĩnh). Xem man rsyncđể biết thêm.
Có một phím tắt theo đó bạn có thể bỏ qua các --exclude-fromtập tin. Nếu bạn chắc chắn rằng tất cả những thứ bạn không muốn sao chép ( /tmpv.v.) nằm trên các hệ thống tệp riêng biệt, bạn chỉ có thể sử dụng:
rsync -axHv --delete-during / /mnt/usbhd/pi_backup/
-xđã được chèn Đây là hình thức ngắn --one-file-system, nói rsynckhông vượt qua ranh giới hệ thống tập tin. Cá nhân tôi thích --exclude-from, nhưng ví dụ, Raspbian mặc định, --one-file-systemsẽ hoạt động tốt. Bạn có thể sử dụng cả hai nếu bạn muốn -xcẩn thận: D
Đó không phải là một bản sao lưu hoàn chỉnh. Thế là đủ nếu bạn không đặt bất cứ thứ gì vào bootvà bạn vẫn ổn với việc sử dụng sao lưu để chỉ cần khôi phục hệ thống bằng cách dán thẻ vào máy tính và chạy:
rsync -av --delete-during /mnt/usbhd/pi_backup/ /mnt/sdcard_partition2/
Bạn cũng có thể làm điều này với một thẻ có hình ảnh mới trên đó (giả sử nó giống với hình ảnh cơ sở của bạn) mặc dù điều đó không hiệu quả nếu bạn phải tạo hình ảnh (vì khi đó bạn sẽ ghi đè lên hầu hết hình ảnh đó). Bạn cũng có thể kết nối một thẻ SD khác thông qua bộ chuyển đổi USB với hình ảnh như vậy trên đó và sử dụng phương pháp trên để duy trì thẻ trùng lặp.
Nếu bạn đã đặt nội dung vào /boot(ví dụ: kernel tùy chỉnh), bao gồm /boot/config.txt, bạn cũng sẽ muốn sao lưu nó (khá đơn giản - không có gì nhiều). Chỉ cần làm riêng, và khi bạn khôi phục, công cụ đó sẽ nằm trong phân vùng đầu tiên.
Xem ở đây nếu bạn muốn tạo một hình ảnh phong cách Raspbian trống mà sau đó bạn có thể sao lưu vào. Bạn có thể sử dụng một phương pháp tương tự để tạo thẻ kiểu Raspbian trống - thay vì xử lý .imgtệp, bạn sẽ xử lý một thiết bị thực (ví dụ /dev/sdb), nghĩa là tất cả những gì bạn phải làm là tạo bảng phân vùng fdiskvà sau đó định dạng /dev/sdb1và sdb2(hoặc bất cứ điều gì) với mkfs.
Nhưng sao chép toàn bộ hình ảnh thì dễ dàng hơn! Tại sao phải bận tâm với điều này?
Nó không khó lắm đâu; Tôi đã khôi phục vào một thẻ trống (được định dạng theo liên kết cuối cùng đó) trong 10 phút. Có, chỉ sử dụng ddtrên toàn bộ mọi thứ đơn giản hơn (nếu bạn tìm thấy những thứ như từ khó hiểu ...), NHƯNG sau đó bạn phải mất khá nhiều thời gian mỗi lần bạn muốn cập nhật bản sao lưu của mình vì bạn phải thực hiện 100% mỗi lần. Sử dụng rsync, một khi sao lưu tồn tại, cập nhật nó nhanh hơn nhiều, vì vậy bạn có thể thiết lập điều này xảy ra hàng ngày không đau đớn thông qua cron. Qua một mạng thậm chí. Cứ sáu giờ một lần. Bạn càng làm thường xuyên, nó sẽ mất ít thời gian hơn.
rsync thông qua ssh
Đây là một ví dụ:
rsync [options] --rsh="ssh [ssh options]" root@[the pi ip]:/ /backup/rpi/
"Tùy chọn" sẽ là, ví dụ, -av --delete --exclude-from=/rsync-exclude.txtvà "tùy chọn ssh" là bất cứ điều gì bạn thường sử dụng (nếu có). Bạn phải có quyền truy cập root qua sshđể làm điều này cho các mục đích của một bản sao lưu hệ thống (thiết lập PermitRootLogin=yestrong /etc/ssh/sshd_configvà khởi động lại máy chủ).
1 Bạn nên giữ tập tin này. Bạn có thể đặt bình luận trong đó trên các dòng bắt đầu bằng #hoặc ;. Điều này có thể bao gồm rsynclệnh thực tế , có thể được sao chép dán sau đó để bạn không phải nhớ nó mỗi lần.
2 Cảm ơn Kris vì đã chỉ ra rsynckhông làm điều này tự động.
dd, nhìn vàorsync.