Tôi muốn sử dụng rsync để sao lưu dữ liệu từ máy chủ Linux từ xa sang máy Mac cục bộ. Và tôi muốn khởi tạo thao tác này trên máy Mac cục bộ của mình. Tất cả đều hoạt động tốt, ngoại trừ có một vấn đề về ký tự đặc biệt: mỗi lần tôi chạy lại hoạt động rsync (sau khi đồng bộ hóa ban đầu), các tệp có ký tự đặc biệt sẽ bị xóa đầu tiên và sau đó được đồng bộ hóa lại. Theo tôi hiểu, có một vấn đề với các bộ ký tự khác nhau và giải pháp ưa thích dường như là sử dụng --iconv
tùy chọn:
Bạn có thể sử dụng tùy chọn --iconv của rsync để chuyển đổi giữa UTF-8 NFC & NFD, ít nhất là nếu bạn đang sử dụng máy Mac. Có một bộ ký tự utf-8-mac đặc biệt là viết tắt của UTF-8 NFD. Vì vậy, để sao chép các tệp từ máy Mac sang NAS, bạn cần chạy một cái gì đó như:
rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Điều này sẽ chuyển đổi tất cả tên tệp cục bộ từ UTF-8 NFD sang UTF-8 NFC trên máy chủ từ xa. Nội dung của tệp sẽ không bị ảnh hưởng.
Vấn đề là điều này chỉ hoạt động 'một chiều' đối với tôi, cụ thể là khi đồng bộ hóa từ máy Mac sang linux. Nhưng tôi muốn 'đi theo con đường khác', tức là đồng bộ hóa TỪ máy linux với máy Mac. Và tôi muốn khởi tạo hoạt động từ máy Mac cục bộ của mình. Nhưng khi tôi thử:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Tôi nhận được một lỗi:
iconv_open("UTF-8", "utf-8-mac") failed
rsync error: requested action not supported (code 4) at rsync.c(118) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]
Tôi không thể hiểu tại sao điều này không hiệu quả. Phiên bản rsync của tôi trên Mac được cập nhật từ 2.6.9. đến 3.1.1. sử dụng Macports . Lưu ý rằng hoạt động sau đó hoạt động khi tôi (trên Mac, nota bene) khởi tạo rsync TỪ Mac ĐẾN Linux:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Nhưng đi theo cách khác 'từ mac - đó là điều tôi muốn làm - không hoạt động.
Thật kỳ lạ, thử nghiệm để bắt đầu đồng bộ hóa từ máy linux sẽ hiển thị thông báo lạ này:
rsync: on remote machine: --iconv=UTF-8-MAC: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
bao gồm, lưu ý, yêu cầu rất lạ [server=2.6.9]
, mặc dù tôi đã cập nhật lên 3.1.1 trên máy Mac. Vì một số lý do, có vẻ như máy linux của tôi 'chỉ thấy' phiên bản rsync gốc trên Mac.
Bất kỳ đề nghị về cách giải quyết này?
CẬP NHẬT 23 tháng 10 : Đề xuất tuyệt vời của Per @Lee Johnson (xem bên dưới), bắt đầu đồng bộ hóa từ máy chủ linux hiện hoạt động. Để hoàn thiện, bây giờ tôi đã thử tất cả các kết hợp và một mô hình thú vị xuất hiện:
TRÊN MAC:
CÔNG TRÌNH: Tệp từ Mac sang Linux
FAILS: Tệp từ Linux sang Mac
TRÊN LINUX
CÔNG TRÌNH: Tệp từ Linux sang Mac
FAILS: Tệp từ Mac sang Linux
Nói cách khác, --iconv
tùy chọn dường như chỉ hoạt động theo một cách, với các tệp từ máy cục bộ đến điều khiển từ xa chứ không phải theo cách khác. Nó trông giống như một lỗi với tôi, nhưng có lẽ đó là cách nó được CUNG CẤP để làm việc?
Bất cứ ai cũng có thể chia sẻ ánh sáng về điều này?
.DS_Store
khỏi đồng bộ hóa và vì OSX này không thể xóa các thư mục có các tệp này bên trong. Tôi thiết lập các bộ ký tự với --iconv
, đường dẫn rsync trên mac với --rsync-path
(tôi đang sử dụng homebrew) và sau đó phải thêm --delete-excluded
để các thư mục cứng đầu có thể bị xóa.
rsync
(ví dụ từ homebrew) trên mac và gọi nó từ linux, cần phải chỉ định đường dẫn chính xác bằng cách sử dụng--rsync-path="/usr/local/bin/rsync"