Я пытаюсь сделать резервную копию общего ресурса Windows, используя rsync, из коробки FreeBSD8.2:
bash$ sudo -i
bash# uname -a
FreeBSD zeus.companyname.gr 8.2-RELEASE ...amd64
bash# cat /root/.nsmbrc
...
[MACHINENAME:ADMINISTRATOR]
password=mysuperuncrackablepassword
bash# mount_smbfs -N -E utf-8:cp737 -I 192.168.0.2 //Administrator@machinename/f$ /iso1/
bash# ls -l -raw /iso1/prj/
ΠΡΟΕΤΟΙΜΑΣΙΑ ΔΕΔΟΜΕΝΩΝ ΠΑΡΕΛΘΟΝΤΩΝ ΕΤΩΝ
Πανεπιστήμιο - Προβολή, Δημοσιότητα
Проще говоря, я правильно вижу папки с греческими символами (в зависимости от локали). Приведенный выше список относится к сеансу PuTTY (т. Е. Сеансу SSH), и PuTTY был настроен для перевода UTF-8 по умолчанию.
Обратите внимание, я не коснулся локали:
bash# locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Так что, кажется, все в порядке.
Однако, когда я попытался выполнить rsyncing из подключенной папки, некоторые файлы исчезли ...
bash# rsync --inplace -rltvxp /iso1/ /backups/backup-machinename/
sending incremental file list
file has vanished: "/iso1/prj/..."
Сообщение "файл исчез" означает, что rsync вызвал надлежащие системные вызовы для чтения содержимого папки (я полагаю, dir/dirent), и когда позднее он попытался прочитать один из содержащихся файлов, он не нашел его, т.е. «open (2)» не удалось.
Я проверил сообщенный файл: (а) он существует, (б) он имеет права на чтение для всех.
Затем я предположил, что проблема в cp737 (греческая кодовая страница), поэтому я снова подключился с ...
bash$ mount_smbfs -N -E utf-8:utf-8 -I 192.168.0.2 //Administrator@machinename/f$ /iso1/
... то есть я использовал utf-8 для Windows тоже. Однако когда я снова попробовал rsync, он застрял (!) со 100% загрузкой процессора ... Присоединение с помощью GDB показало:
bash# gdb /usr/local/bin/rsync 3109
GNU gdb 6.1.1 [FreeBSD]
Attaching to program: /usr/local/bin/rsync, process 3109
Reading symbols from /lib/libc.so.7...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.7
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...done.
Loaded symbols for /libexec/ld-elf.so.1
0x0000000800709c0a in getdirentries () from /lib/libc.so.7
... кажется, что rsync застрял в ожидании возврата getdirentries, или каждый вызов getdirentries занимает невероятное количество времени ...
Есть идеи?
Кто-нибудь сумел сделать то, что я делаю? Т.е. Использовать FreeBSD для rsync файлов с символами, специфичными для локали в их именах файлов, из общего ресурса Windows, который монтируется с помощью mount_smbfs?
PS Если кому-то интересно, почему я пытаюсь это сделать, ответ прост: ZFS.