Izin Robocopy ditolak

11

Robocopy sudah diinstal sebelumnya dengan Windows 7. Saya pernah menggunakannya berkali-kali. Saya mencoba menyalin folder ke share jarak jauh

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

Akibatnya saya mendapat izin ditolak. Menggunakan explorer saya dapat menyalin file ke share ini. Saya telah membuka prompt perintah dengan izin administrator dengan hasil yang sama. Bagikan dibaca / tulis untuk umum.

EDIT Saya sudah berhasil memetakan driveletter ke share, tetapi robocopy masih gagal

EDIT Saya telah menambahkan saklar / B tanpa hasil. Kesalahan sebenarnya adalah:

2009/09/26 20:43:14 ERROR 5 (0x00000005) 
    Accessing Destination Directory \\drobo\Drobo\fotos\__NEW\Ericsson\
Edosoft
sumber
Sudahkah Anda mencoba memetakan folder bersama ke huruf drive?
CGA
Ya saya sudah mencobanya dulu. Hasil yang sama
Edosoft
Sudahkah Anda mencoba mengambil kepemilikan folder bersama? Apakah Anda berada di workgroup atau domain direktori aktif?
CGA
Saya menggunakan Workgroup. Saya memang mengambil kepemilikan.
Edosoft
Jika Anda menggunakan parameter / V, apakah mode Verbose memberi Anda informasi lain? Kesalahan 5 biasanya merupakan pesan ditolak akses. Dari prompt perintah, bisakah Anda menggunakan perintah COPY? Apakah ini bekerja dengan UNC lain atau hanya Drobo yang gagal? Jika demikian, orang Drobo mungkin merupakan tempat terbaik untuk mencari jawaban.
Jeffery Hicks

Jawaban:

12

Dikutip dari sini :

Dalam kasus saya, saya mulai dengan kontrol penuh pada sumber dan tujuan berbagi. Masalahnya adalah bahwa Robocopy me-reset ACL pada share tujuan ke nilai nol (tidak ada yang memiliki izin) sebelum mulai mengulang subdirektori. Setelah beberapa tes cepat, kesimpulan saya adalah bahwa Robocopy tidak menangani izin yang diwarisi. Katakanlah Anda menyalin C: \ Share1 ke D: \, dan C: \ Share1 mewarisi izinnya dari direktori root C: \, ia sebenarnya tidak memiliki ACL eksplisit. Karena itu, ketika Anda menyalin ACL-nya, Anda sebenarnya menyalin ... tidak ada. Dengan menyalin ACL kosong ke tujuan Anda, izin Anda akan dihapus pada langkah pertama dari salinan, dan semua penulisan berikutnya untuk berbagi gagal dengan Kesalahan 5.

Ini hanya masalah ketika Anda menyalin dari sumber yang Anda akses dengan izin yang diwarisi dan tujuan yang Anda akses TANPA izin yang diwarisi. Jika Anda menyalin C: \ (yang membuat Anda secara eksplisit di ACL-nya), ke D: \, tidak ada masalah. Jika ini memang masalah Anda, Anda dapat mengatasinya dengan menambahkan diri Anda secara eksplisit ke sumber ACL dengan kontrol penuh. Ketika salinan berjalan, entri ACL Anda digandakan ke tujuan, dan salinan file selanjutnya dapat ditulis. Anda dapat membatalkan perubahan (baik pada sumber maupun tujuan) setelah salinan selesai.

Jika Anda terus mengalami masalah meskipun hal tersebut di atas, Anda mungkin ingin mempertimbangkan untuk mencoba sakelar / B, yang mencoba mencadangkan file menggunakan hak istimewa Anda sebagai Operator Pencadangan. Ini akan memungkinkan Anda untuk menyalin file yang Anda tidak bisa, misalnya, jika Anda tidak berada di ACL pada bagian tujuan Anda. Robocopy default untuk mencoba salinan yang dapat dimulai kembali. Dengan memberikan salinan yang dapat diulang kembali, kasus terburuknya adalah Anda kehilangan file yang sedang ditransfer saat terjadi gangguan. Lulus berikutnya akan me-restart file itu dari awal alih-alih setengah jalan.

Semoga itu bisa membantu. Berikut ini kutipan dari Microsoft Robocopy doc mengenai switch / B:

Mengutip:

Jika Anda menyalin informasi keamanan NTFS (ACL) bersama dengan data file, dimungkinkan untuk menyalin file yang telah Anda baca akses, tetapi tidak akses tulis. Setelah file seperti itu disalin sekali, dan ACL diterapkan, Anda mungkin menemukan bahwa untuk mendapatkan kesalahan "Akses Ditolak" ketika Anda mencoba untuk menyalin file lagi. Dalam situasi ini, Anda harus menggunakan saklar / B atau / ZB untuk menyalin file dalam Mode Cadangan.

/ B menyalin semua file dengan semantik cadangan (Mode Cadangan). / ZB pertama kali mencoba untuk menyalin file dalam mode restartable (untuk ketahanan yang lebih besar) tetapi jika gagal dengan kesalahan "Akses Ditolak" itu secara otomatis mencoba kembali menyalin menggunakan Mode Cadangan.

harrymc
sumber
5

Coba salin file menggunakan Backupflag:

/ B: Menyalin file dalam mode Cadangan.

Andreas Grech
sumber
Terima kasih, saya akan coba itu.
Edosoft
Apa bedanya dengan perintah / ZB?
Insinyur Sistem Senior
2

Selain jawaban sebelumnya, saya dapat memperluas dengan perbaikan yang bekerja untuk saya. Dalam kasus saya, saya memiliki folder dan file lokal yang kepemilikannya diklaim oleh pengguna lain pada sistem. Saya hanya mengklaim kepemilikan semua folder dan sub folder dan semuanya bekerja dengan baik tanpa saklar cadangan.

Klaim kepemilikan folder dan sub foldernya: http://technet.microsoft.com/en-us/magazine/ff404240.aspx

Marcus
sumber
Jadi dalam hal ini, folder tersebut harus diklaim kepemilikannya oleh akun pengguna skrip batch?
Insinyur Sistem Senior
1

Anda juga dapat menulis skrip untuk memperbaikinya secara otomatis

# 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)

}
N.Naik
sumber
Perlu dicatat bahwa skrip ini untuk digunakan dengan Windows Powershell.
Kevin Fegan