В разрешении на робокопию отказано

65221
Edosoft

Robocopy предустановлен в Windows 7. Я использовал его много раз в прошлом. Я пытался скопировать папку на удаленный ресурс с

robocopy c:\source "\\server\share\path" /s /r:2 /w:2` 

В результате я получаю разрешение отказано. С помощью проводника я могу копировать файлы в эту папку. Я открыл командную строку с правами администратора с тем же результатом. Доля доступна для чтения / записи для общественности.

РЕДАКТИРОВАТЬ Я успешно сопоставил буклет буклетов для общего ресурса, но robocopy по-прежнему не удается

РЕДАКТИРОВАТЬ Я добавил / B ключ без успеха. Точная ошибка:

2009/09/26 20:43:14 ERROR 5 (0x00000005)  Accessing Destination Directory \\drobo\Drobo\fotos\__NEW\Ericsson\ 
10
Введите «net use» и нажмите ввод. Отредактируйте вопрос с результатом, пожалуйста Canadian Luke 12 лет назад 0
Вы пытались стать владельцем общей папки? Вы находитесь в рабочей группе или домене Active Directory? CGA 14 лет назад 0
Я использую рабочую группу. Я взял на себя ответственность. Edosoft 14 лет назад 0
Вы пытались сопоставить общую папку с буквой диска? CGA 14 лет назад 0
Да, я попробовал это первым. Тот же результат Edosoft 14 лет назад 0
@CGA: Robocopy прекрасно обрабатывает UNC-пути. surfasb 12 лет назад 0
Если вы используете параметр / V, дает ли режим Verbose какую-либо другую информацию? Ошибка 5 обычно является сообщением об отказе в доступе. Из командной строки вы можете использовать команду COPY? Работает ли это с другими UNC или Drobo не работает? Если это так, люди Дробо могут быть лучшим местом для ответов. Jeffery Hicks 14 лет назад 0

4 ответа на вопрос

12
harrymc

Цитируется здесь :

В моем случае я начал с полного контроля над исходными и целевыми акциями. Проблема заключалась в том, что Robocopy сбрасывал ACL на целевом ресурсе в нулевое значение (никто не имеет разрешения) до того, как он начал рекурсивные подкаталоги. После нескольких быстрых тестов я пришел к выводу, что Robocopy не обрабатывает унаследованные разрешения. Скажем, вы копируете C: \ Share1 в D: \, а C: \ Share1 наследует свои разрешения из корневого каталога C: \, на самом деле у него нет явного ACL. Поэтому, когда вы копируете его ACL, вы на самом деле копируете ... ничего. При копировании пустого списка ACL в пункт назначения ваши разрешения удаляются на первом этапе копирования, и все последующие записи в общий ресурс завершаются с ошибкой 5.

Это только проблема, когда вы копируете из источника, к которому вы обращаетесь, с помощью унаследованных разрешений WITH, и к месту назначения, к которому вы обращаетесь без унаследованных разрешений. Если вы копируете C: \ (в котором вы явно указаны в ACL), в D: \ проблем не возникает. Если это действительно ваша проблема, вы можете решить ее, добавив себя явно в ACL-источник с полным контролем. Когда копия запускается, ваша запись ACL дублируется к месту назначения, и последующие копии файла могут быть записаны. Вы можете отменить свои изменения (как для источника, так и для пункта назначения) после завершения копирования.

Если у вас по-прежнему возникают проблемы, несмотря на вышесказанное, вы можете попробовать использовать ключ / B, который пытается создать резервную копию файла, используя ваши привилегии в качестве оператора резервного копирования. Это позволит вам копировать файлы, которые в противном случае вы не смогли бы, например, если вы не в ACL на вашей целевой папке. По умолчанию Robocopy пытается перезапустить копию. При отказе от перезапускаемых копий в худшем случае вы теряете файл, передаваемый в данный момент, в случае сбоя. Следующий проход перезапустит этот файл с начала, а не на полпути.

Надеюсь, это поможет. Вот цитата из документа Microsoft Robocopy относительно параметра / B:

Цитата:

Если вы копируете информацию о безопасности NTFS (ACL) вместе с данными файла, можно копировать файлы, к которым у вас есть права на чтение, но нет прав на запись. После того, как такой файл будет скопирован один раз, и ACL будут применены, вы можете обнаружить, что возникает ошибка «Отказано в доступе» при попытке скопировать файл снова. В этой ситуации вы должны использовать ключ / B или / ZB для копирования файлов в режиме резервного копирования.

/ B копирует все файлы с семантикой резервного копирования (Backup Mode). / ZB сначала пытается скопировать файлы в режиме перезапуска (для большей отказоустойчивости), но если это не удается с ошибкой «Отказано в доступе», он автоматически повторяет попытку копирования в режиме резервного копирования.

5
Andreas Grech

Попробуйте скопировать файлы, используя Backupфлаг:

/ B: копировать файлы в режиме резервного копирования.

Спасибо, я попробую это. Edosoft 14 лет назад 0
Чем отличается команда / ZB? Senior Systems Engineer 9 лет назад 0
2
Marcus

В дополнение к предыдущим ответам я могу дополнить исправление, которое сработало для меня. В моем случае у меня были локальные папки и файлы, права на которые были заявлены другим пользователем системы. Я просто заявил, что владею всеми папками и подпапками, и все работало без выключателя резервного копирования.

Заявить право собственности на папку и ее подпапки: http://technet.microsoft.com/en-us/magazine/ff404240.aspx

Таким образом, в этом случае папка должна быть объявлена ​​владельцем учетной записи пользователя пакетного сценария? Senior Systems Engineer 9 лет назад 0
1
N.Naik

You can also write a script to fix this automatically

# To run robocopy with logging which logs errors robocopy source dest /MIR /NP /TEE /R:0 /W:1 /FFT /LOG+:log.txt # get errors from log and use set-content so it only writes if there are errors. get-content log.txt | select-string "0x00000005" | set-content errors.log #if statements to check if it even had errors. only if errors go into if statement. if (test-path errors.log) { #now capture the paths exactly. Get-unique so it writes one error only once. #Will assume you're using UNCs to copy vs. drive letters, please modify as necessary select-string -path errors.log -pattern "\\\\.*$" | %{ $_.Matches[0].captures[0].value} | get-unique > paths.log #just do foreach loop for each path. foreach ($path in $paths) { #use subinacl to take ownership and assign permissions, it is better and faster #than icacls and ps ways but you can use whatever works. Report the changes you #made. if '$path' is a folder then you will need to modify subinacl command to #inherit etc. look it up. .\subinacl /file "$path" /setowner="YOUR ID" >> change-perms.log .\subinacl "$path" /grant="your ID"=F >> change-perms.log } #run your robocopy command again to copy missed file in previous step. robocopy source dest /MIR /NP /TEE /R:0 /W:1 /FFT /LOG+:log.txt #Delete the error log file so it does not go in to if loop next time you run. remove-item error.log (use force, erroraction etc as necessary) } 
Стоит отметить, что этот скрипт предназначен для использования с Windows Powershell. Kevin Fegan 8 лет назад 0