Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


Показаны сообщения с ярлыком rsync. Показать все сообщения
Показаны сообщения с ярлыком rsync. Показать все сообщения

вторник, 6 декабря 2016 г.

rsync: копирование с Windows на Linux

Решил я всё же добить возможность копирования rsync-ом из-под винды на линукс. Не, ну в самом деле, что за издевательство - такой удобный способ и недоступен!

За основу взял DeltaCopy - cygwin-порт самого rsync и нескольких дополнительных утилит плюс графическая обвязка как для клиента, так и для сервера. GUI-вая часть меня пока не интересует, а вот rsync/win решил испытать. Сразу уточню: есть и другие порты, но их я не проверял и не пробовал.

Особенности


Задавать имя входного каталога на системе с windows лучше в формате /cygdrive/БУКВА/путь, где "буква" - буква диска без двоеточия, например: /cygrive/c/windows.

Windows имеет дурную привычку хранить имена файлов в разных кодировках - и юникод и 1251 и 866, в общем, полный бардак. Юниксы давно перебрались на utf-8 и не заставляют своих пользователей париться по этому поводу.

Rsync из DeltaCopy не поддерживает копирование виндовых ACL и есть какие-то странности с копированием других расширенных атрибутов. Но в моем конкретном случае это не критично, потому не заморачивался уточнениями.

Грабли

Первые грабли, на которые я наступил, это трансляция имён файлов, написанных не латиницей. Порылся в интернетах, где мне напомнили, что есть параметр --iconv=код_из,код_в, позволяющий указать характеристики трансляции
"код_из" - из какой кодировки преобразуем, "код_в" - в какую. Для копирования с windows на linux получаем --iconv=cp866,utf-8.

Вторая грабля - неожиданное прекращение копирования при указании параметра iconv. Сообщение на отправляющей стороне было совсем невразумительным. А вот в протоколе на самом сервере ситуация немного прояснилась: "rsync: The server is configured to refuse --iconv". Вот те на! Что за нафиг такой?
Вылечилось, опять же, по советам из этих ваших интернетов, добавлением строки charset=utf-8 в /etc/rsyncd.conf.

Всякое разное

Для большей безопасности, я создал в конфиге rsync-а несколько "модулей" - секций, описывающих разные места для копирования и доступы к ним. Пример такого модуля:

[media]
    path = /media
    use chroot = yes
    lock file = /var/lock/media-restore.lock
    read only = no
    timeout = 600
    auth users = восстановитель
    uid=root


[media] - это имя модуля. Оно указывается в команде отправки:
... пользователь@сервер_rsync::media/путь
Пользователи вместе с их паролями задаются в файле, описанном в конфиге параметром
secrets file = /etc/rsyncd.secrets
Формат файла: каждый пользователь на отдельной строке в виде логин:пароль, например "восстановитель:пароль_восстановления". В конце файла желательна пустая строка.

path - путь в файловой системе сервера
use chroot - крайне желательно во избежание злоупотреблений с путями типа модуль/путь/../../запретная_зона
lock file - служебный файл, создаваемый при обработке операций в этом модуле.
auth users - можно задать не только глобальный список разрешенных пользователей, но и для каждого модуля указывать отдельные разрешения. В примере я не хочу, чтобы к модулю [media] получил доступ какой-нибудь другой пользователь
uid - идентификатор пользователя, от имени которого выполняются операции. Сам демон rsync обычно запускается от рута, поэтому проблем с мимикрированием быть не должно. Дополнительно см. описание параметра --super.

понедельник, 14 марта 2016 г.

RoboCopy: коды завершения

Есть у микрософта бледное подобие rsync-a, называется robocopy - robust file copy.
Ну, особо придраться не к чему - бледное подобие оно и есть бледное подобие. Но поскольку микрософт уверен, что все серверы в мире подключены к интернету и не поставляет оффлайновую справку, то лучше подстраховаться и кое-что из документации вынести в блог.

Коды завершения работы:
(кто-то вроде меня так же ведет блог, записывая туда свои "открытия", чтобы не искать их повторно)
Использована информация из базы знаний микрософта. У микрософта информация по комбинациям кодов немного полнее.
===

ROBOCOPY Exit Codes

The return code from Robocopy is a bitmap, defined as follows:
    Hex   Decimal  Meaning if set

    0×00   0       No errors occurred, and no copying was done.
                   The source and destination directory trees are completely synchronized. 

    0×01   1       One or more files were copied successfully (that is, new files have arrived).

    0×02   2       Some Extra files or directories were detected. No files were copied
                   Examine the output log for details. 

    0×04   4       Some Mismatched files or directories were detected.
                   Examine the output log. Housekeeping might be required.

    0×08   8       Some files or directories could not be copied
                   (copy errors occurred and the retry limit was exceeded).
                   Check these errors further.

    0×10  16       Serious error. Robocopy did not copy any files.
                   Either a usage error or an error due to insufficient access privileges
                   on the source or destination directories.

These can be combined, giving a few extra exit codes:
    0×03   3       (2+1) Some files were copied. Additional files were present. No failure was encountered.

    0×05   5       (4+1) Some files were copied. Some files were mismatched. No failure was encountered.

    0×06   6       (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered.
                   This means that the files already exist in the destination directory

    0×07   7       (4+1+2) Files were copied, a file mismatch was present, and additional files were present.

Any value greater than 7 indicates that there was at least one failure during the copy operation.

You can use this in a batch file to report anomalies, as follows:
    if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
    if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
    if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
    if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
    if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
    if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
    if %ERRORLEVEL% EQU 8 echo FAIL & goto end
    if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
    if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
    if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
    if %ERRORLEVEL% EQU 2 echo XTRA & goto end
    if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
    if %ERRORLEVEL% EQU 0 echo No Change & goto end
    :end  
Example:
Copy files from one server to another
ROBOCOPY \\Server1\reports \\Server2\backup *.*
IF %ERRORLEVEL% LSS 8 goto finish

Echo Something failed & goto :eof

:finish
Echo All done, no fatal errors.
Bugs
Version XP026 returns a success errorlevel even when it fails.
“Few men of action have been able to make a graceful exit at the appropriate time” ~ Malcolm Muggeridge
===

пятница, 20 марта 2015 г.

RSYNC: как читать результаты --itemize-changes

С ключом -i (--itemize-changes) rsync выводит перечень проделанных изменений в виде:

~ $ rsync src/ dest/ -ai
.d..t.... ./
>f+++++++ newfile
>f..t.... oldfil

Интересно, но непонятно. Кто-то постарался и покурив маны создал вот такую схему, что есть что в выводе rsync. Разумеется, любой из нас может сделать то же самое, но почему-то никто не сделал. :-)

I wrote this little schema that helped me to understand this output format and I'm publishing hoping it will be useful for others.

YXcstpoguax  путь/к/файлу
|||||||||||
`----------- тип проделанных изменений:
 ||||||||||   <: файл был передан на удаленный узел (отправка).
 ||||||||||   >: файл был передан на локальный узел (приём).
 ||||||||||   c: локальное создание/изменение, например:
 ||||||||||      - создан каталог
 ||||||||||      - изменился симлинк,
 ||||||||||      - и т.д.
 ||||||||||   h: элемент суть жесткая ссылка на другой элемент (требуется --hard-links).
 ||||||||||   .: файл не обновлен (хотя некоторые его атрибуты могли измениться).
 ||||||||||   *: means that the rest of the itemized-output area contains a message (e.g. "deleting").
 ||||||||||
 `---------- тип файла:
  |||||||||   f файл,
  |||||||||   d каталог,
  |||||||||   L симлинк (symlink),
  |||||||||   D устройство (device),
  |||||||||   S специальный файл (например, сокет).
  |||||||||
  `--------- c: изменилась контрольная сумма (для обычных файлов)
   ||||||||     изменилось содержимое (для симлинков, устройств и специальных файлов)
   `-------- s: отличается размер
    `------- t: отличается время последнего изменения
     `------ p: изменились права доступа
      `----- o: изменился владелец
       `---- g: изменилась группа
        `--- u: (резерв на будущее)
         `-- a: изменилась информация в ACL
This schema is based on the contents of the rsync manual.
Наводку на схему получил здесь