Đâ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á. rsync
có 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 /sys
và /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 dev
thư mục không hoàn toàn giống như proc
và sys
cho 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/*
/run
nói chung cũng không có trên đĩa, nó nằm trong bộ nhớ. Có lẽ /tmp
cũ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 /mnt
hoặ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.txt
1 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
). --delete
là 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 a
tậ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. -H
là để bảo vệ các liên kết cứng 2 , v
dành cho verbose, đó là lý do tại sao bạn nhận được một số đầu ra (nếu không rsync
thì 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-from
tậ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 ( /tmp
v.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 rsync
khô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-system
sẽ hoạt động tốt. Bạn có thể sử dụng cả hai nếu bạn muốn -x
cẩ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 boot
và 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ý .img
tệ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 fdisk
và sau đó định dạng /dev/sdb1
và 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 dd
trê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.txt
và "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=yes
trong /etc/ssh/sshd_config
và 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 rsync
lệ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 rsync
không làm điều này tự động.
dd
, nhìn vàorsync
.