Saya memiliki server file rumah yang menjalankan FreeNAS 8. Beberapa hari yang lalu saya menggunakan rsync untuk mengunggah seluruh pustaka iTunes saya dari Mac sehingga saya bisa memuat pustaka saya melalui jaringan daripada mematikan drive USB yang lambat. Ini sebagian besar berhasil, dan iTunes berjalan jauh lebih baik sekarang, tapi saya mengalami masalah mengakses lagu apa pun yang memiliki karakter non-ascii di dalamnya (saya pertama kali melihat masalah saat memuat lagu Queensrÿche). File akan muncul di Finder, tetapi setiap upaya untuk mengaksesnya membuat mereka menghilang sampai saya terhubung kembali ke server.
Setelah beberapa penelitian saya menemukan ini karena OSX menggunakan urutan karakter UTF berbeda dari Linux. Sistem file OSX menggunakan Unicode Normalization Form D (NFD), di mana linux menggunakan Form C (NFC). Rsync tidak mengonversi bentuk-bentuk ini ketika melakukan copy dari mac saya ke server, sekarang ketika iTunes mencoba mengakses file dengan karakter khusus melalui jaringan, file-file di server memiliki pengodean yang salah dan laporan afpd yang mereka tidak miliki. tidak ada.
Apa cara terbaik untuk mengatasi masalah ini? Apakah mungkin untuk membuat rsync melakukan konversi unicode saat mengunggah perpustakaan dasar ke server? Dapatkah saya mengkonfigurasi afpd untuk mengirim / menerima nama file dalam format NFD? Apakah ada solusi mudah untuk mengubah nama file di server? Saya menemukan beberapa hal tentang sebuah program bernama convmv, tetapi saya tidak tahu apakah saya dapat menjalankannya di FreeNAS.
Jawaban:
Sesuatu yang seharusnya bekerja adalah menyinkronkan antara direktori sumber dan sistem file jarak jauh yang dipasang (SMB, NFS, AFP), yang rsync hanya akan memperlakukan sebagai sistem file lokal.
Namun, saya tidak tahu seberapa baik ini bekerja dalam praktiknya, dan Anda harus mengatasi masalah yang berbeda, misalnya algoritma delta-transfer tidak akan digunakan secara default (karena sumber dan tujuan adalah "lokal") (mungkin - no-whole-file akan berfungsi?), Anda harus memeriksa, misalnya, bahwa SMB secara efektif mempertahankan waktu modifikasi, dll.
sumber
Anda dapat menggunakan
--iconv
opsi rsync untuk mengkonversi antara UTF-8 NFC & NFD, setidaknya jika Anda menggunakan Mac. Adautf-8-mac
set karakter khusus yang merupakan singkatan dari UTF-8 NFD. Jadi untuk menyalin file dari Mac ke NAS Anda, Anda harus menjalankan sesuatu seperti:Ini akan mengonversi semua nama file lokal dari UTF-8 NFD ke UTF-8 NFC pada server jarak jauh. Konten file tidak akan terpengaruh.
sumber
UTF8-MAC
berarti NFD; bila digunakan denganiconv
dirinya sendiri, ini menyediakan mekanisme umum untuk menerjemahkan bolak-balik antara NFC dan NFD.brew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
rsync: --iconv: unknown option
Saat ini saya menggunakan
rsync --iconv
seperti ini:Menyalin file dari server Linux ke mesin OS X
Anda harus menjalankan perintah ini dari mesin OS X :
Menyalin file dari mesin OS X ke server Linux
Anda harus menjalankan perintah ini dari mesin OS X :
sumber
Jangan gunakan rsync untuk menyalin file ke NAS Anda. Ketika Anda menggunakan rsync untuk menyalin file, nama file akan disimpan pada NAS Anda dalam format UTF NFD (yaitu format OSX) tetapi server Samba yang berjalan pada NAS Anda hanya memahami nama file format UTF NFC. Gunakan antarmuka CIFS / SMB (Samba) untuk menyalin file dan semuanya akan baik-baik saja.
sumber
Dari pengalaman saya, saya sarankan menggunakan SMB daripada ssh. Iconv memecahkan masalah dengan pengkodean, tetapi masih ada masalah dengan karakter yang diizinkan pada sistem yang berbeda:
Nama file asli di Mac:
Setelah menyalin oleh rsync melalui SMB:
Setelah menyalin oleh rsync melalui ssh (dengan semut tanpa flag flagv):
sumber