1

Я пытаюсь сделать резервную копию общего ресурса 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.

1 ответ1

1

Я не уверен, что запуск rsync через samba - хорошая идея. Я не знаю, что делает rsync внутри, но он может генерировать много сетевого трафика, чтобы проверить, какие файлы изменились.

Существует также версия rsync для Windows, которая может быть запущена как системная служба (http://www.brentnorris.net/rsyncntdoc.html). Таким образом, у вас не будет сетевой нагрузки, и поскольку для резервного копирования используются только локальные вызовы на компьютере, это также может исправить вышеуказанные проблемы. Я использовал этот метод для резервного копирования пользователей ноутбуков.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .