Cách tốt nhất để đồng bộ hóa các tệp vào phân vùng VFAT là gì?


7

Tên tệp POSIX có thể chứa tất cả các ký tự ngoại trừ /, nhưng một số ký tự dự trữ hệ thống tệp như ?<>\\:*|". Sử dụng pax, tôi có thể sao chép các tập tin trong khi thay thế các ký tự dành riêng này:

$ pax -rw -s '/[?<>\\:*|\"]/_/gp' /source /target

Nhưng paxthiếu một --deletetùy chọn như rsyncrsynckhông thể thay thế các ký tự. Tôi đang tìm kiếm một cách đơn giản để sao lưu bộ sưu tập nhạc của mình vào ổ cứng ngoài một cách thường xuyên.


Bạn đã xem phương pháp này bằng rsync chưa? serverfault.com/questions/54949/ Từ
slm

Cảm ơn, tốt để biết về các --modify-windowtùy chọn cho rsync. Nhưng nó không giải quyết được sự thay thế nhân vật.
Frank

Tôi không thể tìm thấy bất kỳ phương pháp nào khác để làm những gì bạn yêu cầu. Không nói rằng nó không tồn tại, nhưng trong khi nghiên cứu điều này, tôi thấy không có gì hứa hẹn.
slm

Tôi không biết làm thế nào để giải quyết điều này, nhưng tôi sẽ nhận xét rằng tôi nghĩ rằng danh sách các nhân vật dành riêng của bạn không đầy đủ. AFAIK +và có thể ;nên ở đó. Cách duy nhất để chắc chắn là kiểm tra mặc dù ...
Graeme

Rsync làm gì khi gặp những nhân vật này. Bạn có nhận được một lỗi IO?
Graeme

Câu trả lời:


5

Bạn có thể tạo chế độ xem hệ thống tệp FAT với ngữ nghĩa POSIX, bao gồm hỗ trợ tên tệp với bất kỳ ký tự nào khác /hoặc byte rỗng. POSIXovl là một hệ thống tập tin FUSE tương đối gần đây cho việc này.

mkdir backup-fat
mount.posixovl -S /media/sdb1 backup-fat
rsync -au /source backup-fat/target

Ký tự trong tên tập tin đó VFAT không chấp nhận được mã hóa như %(XX)nơi XXlà hexadecimal chữ số. Kể từ POSIXovl 1.2.20120215, hãy cẩn thận rằng tên tệp %(3A)được mã hóa như chính nó và sẽ được giải mã thành :, do đó có nguy cơ bị xung đột nếu bạn có tên tệp chứa chuỗi con của biểu mẫu %(XX).

Coi chừng POSIXovl không đối phó với tên tệp quá dài. Nếu tên được mã hóa không khớp với 255 ký tự, tệp không thể được lưu trữ.

POSIXovl lưu trữ các quyền unix và quyền sở hữu trong các tệp được gọi .pxovl.FILENAME.


Có sẵn dưới dạng gói Debian ( fuse-posixovl) và hoạt động như một bùa mê.
Frank

Có sẵn dưới dạng posixovl trong openSUSE.
fleamour

2

Tôi tò mò về điều này vì vậy tôi đã làm một chút đào.

Có một vài bản vá để làm điều này mà không bao giờ biến nó thành rsync, nếu bạn thích biên dịch từ nguồn. Mặc dù cả hai đều đã cũ nên có thể vẫn không hoạt động. Cái này đặc biệt thêm một --fat-filenamestùy chọn và cái này cho một --trtùy chọn .

Những câu hỏi này cũng bao gồm một cái gì đó tương tự - các tệp đồng bộ hóa với các ký tự đặc biệt cho USB FAT32https://askubfox.com/questions/11634/how-can-i-substolarship-colons-when-i-rsync-on-a-usb- chìa khóa . Đặt cược tốt nhất có lẽ là sao lưu dự phòng thay thế, nhưng tôi không thể thấy bất kỳ tùy chọn nào có quyền kiểm soát đối với nó. Có một số ý tưởng tốt khác mặc dù.

Một ý tưởng sơ bộ cho một tập lệnh sẽ xóa và tạo lại các tệp mỗi lần, nếu không có quá nhiều, sẽ là một cái gì đó như:

[sudo] updatedb      # doing this as root will update the system database
locate -r '^/full/path/to/source/.*[?<>\\:*|\"]' |
  sed 's\^/full/path/to/source/\\' >bad_names
rsync --delete --exclude-from=bad_names -av source/ target
cd source
<bad_names pax -rw -s '/[?<>\\:*|\"]/_/gp' target

locatesẽ nhanh hơn findnếu cơ sở dữ liệu được cập nhật hợp lý.

Cuối cùng, bạn chỉ có thể làm điều này để các tệp không gây ra thêm bất kỳ vấn đề nào (ít nhất là các tệp hiện có):

find source/ -regex '[?<>\\:*|\"]' -exec rename 's/'[?<>\\:*|\"]'/_/g' {} +

Tôi sẽ khuyên bạn nên thử điều đó với rename -nđầu tiên mặc dù trong trường hợp có điều gì đó không ổn.


cảm ơn đã điều tra Một rsync đáng tiếc đã không bao gồm những pataches. Nếu một skript sẽ là giải pháp, ý tưởng của bạn sẽ rất hữu ích.
Frank
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.