Mam domowy serwer plików z systemem FreeNAS 8. Kilka dni temu użyłem rsync do przesłania całej mojej biblioteki iTunes z komputera Mac, aby móc załadować swoją bibliotekę przez sieć zamiast z wolnego dysku USB. To w większości działało, a iTunes działa teraz znacznie lepiej, ale mam problemy z dostępem do utworów, które zawierają postacie inne niż ascii (po raz pierwszy zauważyłem problem podczas ładowania utworów Queensrÿche). Pliki pojawiałyby się w Finderze, ale każda próba dostępu do nich powodowała, że znikały, dopóki nie połączyłem się ponownie z serwerem.
Po kilku badaniach odkryłem, że dzieje się tak, ponieważ OSX używa innej kolejności znaków UTF niż Linux. Systemy plików OSX używają Unicode Normization Form D (NFD), gdzie Linux używa Form C (NFC). Rsync nie konwertuje tych formularzy, gdy wykonuje kopię z mojego komputera Mac na serwer, teraz, gdy iTunes próbuje uzyskać dostęp do pliku ze znakiem specjalnym przez sieć, pliki na serwerze mają nieprawidłowe kodowanie i nie zgłaszają raportów afpd ' istnieje.
Jaki jest najlepszy sposób rozwiązania tego problemu? Czy jest możliwe, aby rsync wykonał konwersję Unicode podczas przesyłania biblioteki podstawowej na serwer? Czy mogę skonfigurować afpd do przesyłania / odbierania nazw plików w formacie NFD? Czy istnieje łatwe rozwiązanie do zmiany nazw plików na serwerze? Znalazłem trochę informacji o programie o nazwie convmv, ale nie wiem, czy mogę uruchomić to na FreeNAS.
Odpowiedzi:
Coś, co powinno działać, to rsynchronizacja między katalogiem źródłowym a zamontowanym zdalnym systemem plików (SMB, NFS, AFP), który rsync będzie traktował tylko jako lokalny system plików.
Nie wiem jednak, jak dobrze to działa w praktyce, i musisz obejść różne problemy, na przykład algorytm transferu delta nie będzie domyślnie używany (ponieważ źródło i miejsce docelowe są „lokalne”) (może - no-cały plik będzie działał?), musisz sprawdzić np., że SMB skutecznie zachowuje czasy modyfikacji itp.
źródło
Możesz użyć
--iconv
opcji rsync do konwersji między UTF-8 NFC i NFD, przynajmniej jeśli korzystasz z komputera Mac. Istnieje specjalnyutf-8-mac
zestaw znaków, który oznacza UTF-8 NFD. Aby skopiować pliki z komputera Mac na serwer NAS, musisz uruchomić coś takiego:Spowoduje to konwersję wszystkich lokalnych nazw plików z UTF-8 NFD na UTF-8 NFC na zdalnym serwerze. Zawartość plików nie zostanie zmieniona.
źródło
UTF8-MAC
oznacza NFD; w połączeniu ziconv
samym sobą zapewnia ogólny mechanizm translacji w obie strony między NFC i NFD.brew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
rsync: --iconv: unknown option
Obecnie używam w
rsync --iconv
ten sposób:Kopiowanie plików z serwera Linux na komputer z systemem OS X
Powinieneś wykonać to polecenie z komputera z systemem OS X :
Kopiowanie plików z komputera z systemem OS X na serwer Linux
Powinieneś wykonać to polecenie z komputera z systemem OS X :
źródło
Nie używaj rsync do kopiowania plików na NAS. Kiedy użyjesz rsync do skopiowania plików, nazwy plików będą przechowywane na twoim NAS w formacie UTF NFD (tj. OSX), ale serwer Samba działający na twoim NAS rozumie tylko nazwy plików w formacie UTF NFC. Użyj interfejsu CIFS / SMB (Samba), aby skopiować pliki, a wszystko będzie dobrze.
źródło
Z mojego doświadczenia zalecam używanie SMB zamiast ssh. Iconv rozwiązuje problem z kodowaniem, ale nadal występuje problem z dozwolonymi znakami w różnych systemach:
Oryginalna nazwa pliku na komputerze Mac:
Po skopiowaniu przez rsync przez SMB:
Po skopiowaniu przez rsync przez ssh (z mrówką bez flagi iconv):
źródło