У дозволі роботокопії відмовлено


11

Робокопію попередньо встановлено під Windows 7. Я використовував її вже багато разів. Я спробував скопіювати папку у віддалену спільну доступність

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

В результаті мені в дозволі відмовлено. Використовуючи Explorer, я можу скопіювати файли на цю спільну частину. Я відкрив командний рядок з правами адміністратора з тим самим результатом. Частка читається / пише для публіки.

РЕДАКЦІЯ Я успішно склав карту для передачі даних, але роботокопія все ще не вдається

EDIT Я невдало додав перемикач / B. Точна помилка:

2009/09/26 20:43:14 ERROR 5 (0x00000005) 
    Accessing Destination Directory \\drobo\Drobo\fotos\__NEW\Ericsson\

Ви спробували зіставити спільну папку на букву диска?
CGA

Так, я спробував це першим. Той же результат
Edosoft

Чи намагалися ви взяти право власності на спільну папку? Ви перебуваєте в робочій групі або домені Active Directory?
CGA

Я використовую робочу групу. Я взяв право власності.
Edosoft

Якщо ви використовуєте параметр / V, чи надає багатослівний режим будь-яку іншу інформацію? Помилка 5 зазвичай є повідомленням, яким заборонено доступ. З командного рядка можна використовувати команду COPY? Це працює з іншими ООН, або Дробо - єдиний, хто не працює? Якщо так, люди Drobo можуть бути найкращим місцем, де можна отримати відповіді.
Джеффірі Хікс

Відповіді:


12

Цитується звідси :

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

Це лише проблема, коли ви копіюєте з джерела, до якого ви звертаєтесь із успадкованими дозволами та пункту призначення, до якого ви отримуєте доступ БЕЗ успадкованих дозволів. Якщо ви скопіюєте C: \ (що явно містить вас у своєму ACL), до D: \, проблеми не виникає. Якщо це справді ваша проблема, ви можете вирішити її, додавши себе явно до вихідного ACL з повним контролем. Коли копія запускається, ваш запис ACL дублюється до місця призначення, і наступні копії файлів можуть бути записані. Ви можете скасувати зміни (як у вихідному, так і в кінцевому пункті) після завершення копії.

Якщо у вас все ще виникають проблеми, незважаючи на вищезазначене, ви можете розглянути спробу перемикача / B, який намагається створити резервну копію файла, використовуючи ваші привілеї як оператора резервного копіювання. Це дозволить вам скопіювати файли, які ви в іншому випадку не змогли, наприклад, якщо ви не перебуваєте у списку ACL на вашому загальному папку. Робокопія за замовчуванням до спроби копії, яку можна перезапустити. Відмовившись від перезавантажених копій, найгірший випадок - ви втратите файл, який зараз передається, у разі збою. Наступний пропуск перезапустить цей файл з його початку, а не частково.

Сподіваюся, що це допомагає. Ось цитата від документа «Робокопія» від Microsoft щодо перемикача / B:

Цитата:

Якщо ви копіюєте інформацію про безпеку NTFS (ACL) разом із файловими даними, можна скопіювати файли, до яких у вас є доступ для читання, але не доступ до запису. Після того, як такий файл буде скопійовано один раз і застосовано ACL, ви можете виявити, що отримати помилку "Відмовлено у доступі" при спробі скопіювати файл знову. У цій ситуації слід скористатися перемикачем / B або / ZB для копіювання файлів у режимі резервного копіювання.

/ B копіює всі файли із семантикою резервного копіювання (Резервне копіювання). / ZB спочатку намагається скопіювати файли в режимі перезавантаження (для більшої стійкості), але якщо це не вдалося з помилкою "Заборонено доступ", він автоматично повторює копію в режимі резервного копіювання.



2

На додаток до попередніх відповідей я можу поширитись на виправлення, яке працювало на мене. У моєму випадку у мене були локальні папки та файли, права власності яких вимагала інший користувач у системі. Я просто стверджував право власності на всі папки та допоміжні папки, і все працювало нормально без перемикача резервного копіювання.

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


Отже, у цьому випадку папка повинна вимагати права власності на обліковий запис користувача пакетного сценарію?
Старший системний інженер

1

Ви також можете написати сценарій, щоб виправити це автоматично

# 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.
Кевін Феган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.