Điểm:1

rsync từ chối loại trừ thư mục

lá cờ mx

Tôi đang cố tạo bản sao lưu hệ điều hành bằng rsync và đã đưa bản sao lưu này vào crontab. bản thân nó hoạt động rất tốt, nhưng vì một số lý do, nó từ chối tính đến /export trong khi xem xét các loại trừ...

0 2 * * 0 rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*"," /mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/server-backup/ >/dev/null 2>&1

Tuy nhiên, nó loại trừ tất cả các thư mục khác khỏi bản sao lưu.

Lý do chung tôi cũng muốn loại trừ điều này /xuất khẩu/* là do đĩa sao lưu này cũng được gắn dưới dạng liên kết với/xuất do chia sẻ nfs của đĩa với máy chủ từ xa.

Do thực tế là không bao gồm /xuất khẩu/* Tôi tiếp tục kết thúc với việc đĩa của mình bị đầy do có một vòng lặp trong rsync của tôi khi nó bắt đầu tự sao lưu đĩa vào chính nó (/export/backup-disk/ -> /media/backup-disk/server-backup)

quá trình gắn /media/backup-disk của tôi để xuất như sau trong /etc/fstab:

/media/backup-disk /export/backup-disk none bind 0 0 

Vì vậy, câu hỏi chung của tôi là, tại sao nó bao gồm /xuất khẩu/* trong khi nó nằm trong tùy chọn loại trừ của rsync và làm cách nào để khắc phục điều này?

Chỉnh sửa:

kết quả của một lần chạy khô với --stats --progress (không chuyển hướng stout en stin sang /dev/null):

Sudo rsync -aAXv --stats --progress / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*" ,"/mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/test/ > /media/backup-disk/test.txt 

mèo /media/backup-disk/test.txt | xuất grep -A1/        
xuất khẩu/
Trang Chủ/
--
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__init__.py
          9.060 100% 38,98kB/giây 0:00:00 (xfr#17141, ir-chk=1174/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/day.py
         12,609 100% 54,24kB/giây 0:00:00 (xfr#17142, ir-chk=1173/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/export_custom_job.py
         12.034 100% 51,77kB/giây 0:00:00 (xfr#17143, ir-chk=1172/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/job.py
          8.970 100% 38,59kB/giây 0:00:00 (xfr#17144, ir-chk=1171/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/__init__.cpython-38.pyc
          8,809 100% 37,90kB/giây 0:00:00 (xfr#17145, ir-chk=1169/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/day.cpython-38.pyc
         12,206 100% 52,28kB/giây 0:00:00 (xfr#17146, ir-chk=1168/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/export_custom_job.cpython-38.pyc
         11.859 100% 50,79kB/giây 0:00:00 (xfr#17147, ir-chk=1167/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/job.cpython-38.pyc
          9,302 100% 39,84kB/giây 0:00:00 (xfr#17148, ir-chk=1166/22834)
...

Điều này chỉ ra rằng nó không loại trừ xuất, nhưng bằng cách nào đó, tôi vẫn thấy đĩa của mình đầy mỗi khi cron chạy do nó vẫn sao chép nội dung bên trong/xuất sang thư mục sao lưu máy chủ của tôi...

một điều khác mà tôi quên đề cập ở đây là ban đầu tôi nghĩ đó có thể là vấn đề của việc quên /xuất khẩu/* lúc đầu, sau đó đã thêm nó vào cron, nhưng quên khởi động lại (vì vậy không có lịch trình khởi động lại cron), nhưng ngay cả sau khi khởi động lại, nó vẫn quản lý để sao chép /xuất khẩu/* với cron. Cũng có vẻ hơi ngu ngốc khi cần phải khởi động lại vì nó có thể xử lý các chỉnh sửa đối với cron mỗi khi nó cần chạy lệnh từ cron, nhưng muốn chắc chắn rằng nó không được giải quyết sau khi khởi động lại ...

bac0n avatar
lá cờ cn
Điều gì xảy ra nếu bạn chuyển đổi địa điểm bị mất+tìm thấy
terdon avatar
lá cờ cn
Nó có hoạt động như mong đợi không nếu bạn đảo ngược logic và chỉ bao gồm những thứ bạn muốn thay vì loại trừ những thứ khác? `rsync -aAXv /{boot,bin,etc.home,net,opt,root,srv,var}`? Ngoài ra, bạn có thể vui lòng [chỉnh sửa] câu hỏi của mình và bao gồm đầu ra của rsync hiển thị các đường dẫn trong `/export` mà nó chọn không? Tùy thuộc vào cách chúng xuất hiện, điều đó có thể cung cấp cho chúng tôi một số thông tin. Cuối cùng, bạn đã thử `rsync -aAXv / "/export/*"` chưa? Nó có hoạt động như mong đợi không nếu bạn chỉ loại trừ `export` và không loại trừ gì khác?
lá cờ ar
Bạn cũng đang chuyển hướng cả thiết bị xuất chuẩn và thiết bị xuất chuẩn sang/dev/null. Hãy thử trước mà không cần chuyển hướng đó và xem rsync nói gì?
lá cờ ar
Ngoài ra, hãy thử xóa dấu phẩy.
FGOD avatar
lá cờ mx
những gợi ý tuyệt vời, hãy để họ thử một số thứ này với chạy khô
FGOD avatar
lá cờ mx
Bây giờ tôi đang thử lại với --stats --progress để có kết quả tốt hơn về những gì rsync đang thấy và sẽ chỉnh sửa bài đăng với nó
FGOD avatar
lá cờ mx
đây có thể là điều/dev/null không?
lá cờ hr
Các công việc định kỳ AFAIK được chạy trong `/bin/sh` theo mặc định - không hỗ trợ mở rộng cú đúp. Tôi ngạc nhiên *bất kỳ* trong số các loại trừ hoạt động - trừ khi bạn đã thêm `SHELL=/bin/bash` rõ ràng hoặc tương tự trước thông số công việc?
FGOD avatar
lá cờ mx
@steeldriver vậy sẽ tốt hơn nếu tạo một tệp có danh sách các loại trừ và sử dụng tệp trong các loại trừ?
FGOD avatar
lá cờ mx
@sudodus tốt, việc vô hiệu hóa liên kết gắn kết sẽ làm cho nó hoạt động như bình thường vì sẽ không có gì trong /export/ để sao chép ... Nó hoạt động giống như nó nên thực hiện thủ công trong thiết bị đầu cuối như bạn có thể thấy trong bản chỉnh sửa mà tôi đã làm. Thay vào đó, tôi có thể thử lập danh sách những gì cần sao chép nhưng điều đó cũng không tạo thành một danh sách lớn vì tôi không thể thực hiện/với tư cách là nguồn và thay vào đó sẽ cần đưa ra danh sách tất cả các thư mục for cần phải được sao chép?
lá cờ hr
@FGOD imho, bạn có thể sử dụng tiện ích mở rộng cú đúp - miễn là bạn đảm bảo lệnh được chạy trong trình bao hỗ trợ nó (ksh,zsh,bash,...) bằng cách đặt `SHELL` cho cronjob hoặc bằng cách di chuyển lệnh đến một tập lệnh Shell riêng biệt với shebang thích hợp và thay vào đó chạy tập lệnh đó từ cron
FGOD avatar
lá cờ mx
@steeldriver tôi đã thử chạy rsync trong sh và nó thực sự bao gồm xuất. Vẫn nghĩ rằng thật kỳ lạ khi nó loại trừ phần còn lại. Nhưng sẽ kiểm tra sau vào ngày hôm nay với việc thiết lập shell trong cron và chạy nó.
FGOD avatar
lá cờ mx
@steeldriver ngay cả khi tôi thêm SHELL=/bin/zsh, nó vẫn đang chọn trên/xuất. Bây giờ tôi đã tạo một tập lệnh từ nó với #!/bin/zsh ở đầu và đặt tập lệnh đó vào trong cron, và hiện tại nó có vẻ hoạt động tốt. Thx cho mẹo trên cách cron chạy!
Điểm:2
lá cờ mx

Có vẻ như vấn đề thực sự giống như @steeldriver đã đề cập, cách chạy crons (trong sh thay vì bash hoặc zsh hoặc bất kỳ trình bao nào khác). Điều đó làm cho nó không tương thích với việc mở rộng cú đúp của danh sách loại trừ.

Mẹo thêm shell vào cron không khắc phục được sự cố này, nhưng việc đặt lệnh bên trong tập lệnh và chạy tập lệnh đã khắc phục được sự cố.

Vì vậy, bây giờ tôi có một kịch bản có nội dung sau:

#!/bin/zsh

rsync -aAXv --stats --progress / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*", "/mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/test > /dev/null 2>&1

và cron như sau để làm cho nó chạy vào mỗi tối chủ nhật lúc 2 giờ sáng:

0 2 * * 0 /opt/scripts/rsync-os-backup
sudodus avatar
lá cờ jp
Cảm ơn bạn đã chia sẻ giải pháp của mình :-)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.