I use Robocopy (XP010) to facilitate data migrations from W2k/2003 servers to NetApp appliances. Up til now, I've run the Robocopy command from the source server using the following command:
I would use this command numerous times from the initial data sync until the final sync (sometimes weeks away). The process worked well, though because it was single threaded and CIFS is notoriously chatty and half-duplex, the process never pushed the network. This also ment that the migration required more time than necessary.
I now have a Windows 7 workstation, and I thought I'd try out the multi-threaded capability. Although this ment copying from an attached share to another attached share (and twice the network traffic), the first copy went very, VERY fast! Subsequent invocations of the command took far too long (minutes vs seconds using the XP010 version of Robocopy). After quite a bit of trial and error I realized that both the "/b" and "/mir" options seem to have a significant (negative) impact on the time required as well as extra network traffic when using the Windows 7 (XP027) version of Robocopy but not with the XP010 version (can't speak to other versions).
I ran tests using two version of Robocopy and different combinations of options (/b, /e, /mir, etc) between the following source and destination:
I) Copy from Windows 2003 SP2 (SMB) to newer NetApp (SMB2 protocol) via Robocopy XP010 (run from my Windows 7 PC)
II) Copy from newer NetApp (SMB2 protocol) to Windows 2003 SP2 (SMB) via Robocopy XP010 (run from my Windows 7 PC)
III) Copy from Windows 2003 SP2 (SMB) to newer NetApp (SMB2 protocol) via Robocopy XP027 (run from my Windows 7 PC)
IV) Copy from newer NetApp (SMB2 protocol) to Windows 2003 SP2 (SMB) via Robocopy XP027 (run from my Windows 7 PC)
V) Copy from Windows 2003 SP2 (SMB) to older NetApp (SMB protocol) via Robocopy XP027 (run from my Windows 7 PC)
In each instance I sync'd the data, then ran robocopy one more time while capturing the network traffic via WireShark. In total, there were five directories and 20 files - each 1 MB in size. Here are the results:
I) Six variations of options using Robocopy XP010 (on my Windows 7 PC) from Windows 2003 server to newer NetApp (SMB2):
1. "/e /b" - 232 packets (95 from src, 137 to dest)
2. "/e" - 282 packets (95 from src, 187 to dest)
3. "/e /z" - 282 packets (95 from src, 187 to dest)
4. "/mir /b" - 232 packets (95 from src, 137 to dest)
5. "/mir" - 282 packets (95 from src, 187 to dest)
6. "/mir /z" - 282 packets (95 from src, 187 to dest)
II. Six variations of options using Robocopy XP010 (on my Windows 7 PC) from newer NetApp (SMB2) to Windows 2003:
1. "/e /b" - 218 packets (79 from src, 139 to dest)
2. "/e" - 248 packets (109 from src, 139 to dest)
3. "/e /z" - 248 packets (95 from src, 139 to dest)
4. "/mir /b" - 218 packets (95 from src, 139 to dest)
5. "/mir" - 248 packets (95 from src, 139 to dest)
6. "/mir /z" - 248 packets (95 from src, 139 to dest)
III) Six variations of options using Robocopy XP027 (on my Windows 7 PC) from Windows 2003 server to newer NetApp (SMB2):
1. "/e /b" - 4,980 packets (271 from src, 4,709 to dest)
2. "/e" - 452 packets (207 from src, 245 to dest)
3. "/e /z" - 452 packets (207 from src, 245 to dest)
4. "/mir /b" - 4,980 packets (271 from src, 4,709 to dest)
5. "/mir" - 4,980 packets (271 from src, 4,709 to dest)
6. "/mir /z" - 4,980 packets (271 from src, 4,709 to dest)
IV. Six variations of options using Robocopy XP027 (on my Windows 7 PC) from newer NetApp (SMB2) to Windows 2003:
1. "/e /b" - 3,242 packets (149 from src, 3,093 to dest)
2. "/e" - 524 packets (105 from src, 419 to dest)
3. "/e /z" - 524 packets (105 from src, 419 to dest)
4. "/mir /b" - 3,242 packets (149 from src, 3,093 to dest)
5. "/mir" - 3,242 packets (149 from src, 3,093 to dest)
6. "/mir /z" - 3,242 packets (149 from src, 3,093 to dest)
V) Six variations of options using Robocopy XP027 (on my Windows 7 PC) from Windows 2003 server to newer NetApp (SMB):
1. "/e /b" - 6,774 packets (271 from src, 6,503 to dest)
2. "/e" - 646 packets (207 from src, 439 to dest)
3. "/e /z" - 646 packets (207 from src, 439 to dest)
4. "/mir /b" - 6,774 packets (271 from src, 6,503 to dest)
5. "/mir" - 6,774 packets (271 from src, 6,503 to dest)
6. "/mir /z" - 6,774 packets (271 from src, 6,503 to dest)
So, if either the "/b" or "/mir" options are utilized with the XP027 version of Robocopy, the number of packets between my PC and the destination share increased tenfold. More interesting is a look at the packets... I see repeated attempts to read what appears to be random sections of the files on the destination share, though no attempts to read any of the data on the source share (remember, the data has already been copied and is identical in size and dates). Here's the summary information from packet header pertaining to just one file:
robocopy <src> <dest> /copyall /r:0 /w:0 /mir /bwhere <dest> would be an attached share.
I would use this command numerous times from the initial data sync until the final sync (sometimes weeks away). The process worked well, though because it was single threaded and CIFS is notoriously chatty and half-duplex, the process never pushed the network. This also ment that the migration required more time than necessary.
I now have a Windows 7 workstation, and I thought I'd try out the multi-threaded capability. Although this ment copying from an attached share to another attached share (and twice the network traffic), the first copy went very, VERY fast! Subsequent invocations of the command took far too long (minutes vs seconds using the XP010 version of Robocopy). After quite a bit of trial and error I realized that both the "/b" and "/mir" options seem to have a significant (negative) impact on the time required as well as extra network traffic when using the Windows 7 (XP027) version of Robocopy but not with the XP010 version (can't speak to other versions).
I ran tests using two version of Robocopy and different combinations of options (/b, /e, /mir, etc) between the following source and destination:
I) Copy from Windows 2003 SP2 (SMB) to newer NetApp (SMB2 protocol) via Robocopy XP010 (run from my Windows 7 PC)
II) Copy from newer NetApp (SMB2 protocol) to Windows 2003 SP2 (SMB) via Robocopy XP010 (run from my Windows 7 PC)
III) Copy from Windows 2003 SP2 (SMB) to newer NetApp (SMB2 protocol) via Robocopy XP027 (run from my Windows 7 PC)
IV) Copy from newer NetApp (SMB2 protocol) to Windows 2003 SP2 (SMB) via Robocopy XP027 (run from my Windows 7 PC)
V) Copy from Windows 2003 SP2 (SMB) to older NetApp (SMB protocol) via Robocopy XP027 (run from my Windows 7 PC)
In each instance I sync'd the data, then ran robocopy one more time while capturing the network traffic via WireShark. In total, there were five directories and 20 files - each 1 MB in size. Here are the results:
I) Six variations of options using Robocopy XP010 (on my Windows 7 PC) from Windows 2003 server to newer NetApp (SMB2):
1. "/e /b" - 232 packets (95 from src, 137 to dest)
2. "/e" - 282 packets (95 from src, 187 to dest)
3. "/e /z" - 282 packets (95 from src, 187 to dest)
4. "/mir /b" - 232 packets (95 from src, 137 to dest)
5. "/mir" - 282 packets (95 from src, 187 to dest)
6. "/mir /z" - 282 packets (95 from src, 187 to dest)
II. Six variations of options using Robocopy XP010 (on my Windows 7 PC) from newer NetApp (SMB2) to Windows 2003:
1. "/e /b" - 218 packets (79 from src, 139 to dest)
2. "/e" - 248 packets (109 from src, 139 to dest)
3. "/e /z" - 248 packets (95 from src, 139 to dest)
4. "/mir /b" - 218 packets (95 from src, 139 to dest)
5. "/mir" - 248 packets (95 from src, 139 to dest)
6. "/mir /z" - 248 packets (95 from src, 139 to dest)
III) Six variations of options using Robocopy XP027 (on my Windows 7 PC) from Windows 2003 server to newer NetApp (SMB2):
1. "/e /b" - 4,980 packets (271 from src, 4,709 to dest)
2. "/e" - 452 packets (207 from src, 245 to dest)
3. "/e /z" - 452 packets (207 from src, 245 to dest)
4. "/mir /b" - 4,980 packets (271 from src, 4,709 to dest)
5. "/mir" - 4,980 packets (271 from src, 4,709 to dest)
6. "/mir /z" - 4,980 packets (271 from src, 4,709 to dest)
IV. Six variations of options using Robocopy XP027 (on my Windows 7 PC) from newer NetApp (SMB2) to Windows 2003:
1. "/e /b" - 3,242 packets (149 from src, 3,093 to dest)
2. "/e" - 524 packets (105 from src, 419 to dest)
3. "/e /z" - 524 packets (105 from src, 419 to dest)
4. "/mir /b" - 3,242 packets (149 from src, 3,093 to dest)
5. "/mir" - 3,242 packets (149 from src, 3,093 to dest)
6. "/mir /z" - 3,242 packets (149 from src, 3,093 to dest)
V) Six variations of options using Robocopy XP027 (on my Windows 7 PC) from Windows 2003 server to newer NetApp (SMB):
1. "/e /b" - 6,774 packets (271 from src, 6,503 to dest)
2. "/e" - 646 packets (207 from src, 439 to dest)
3. "/e /z" - 646 packets (207 from src, 439 to dest)
4. "/mir /b" - 6,774 packets (271 from src, 6,503 to dest)
5. "/mir" - 6,774 packets (271 from src, 6,503 to dest)
6. "/mir /z" - 6,774 packets (271 from src, 6,503 to dest)
So, if either the "/b" or "/mir" options are utilized with the XP027 version of Robocopy, the number of packets between my PC and the destination share increased tenfold. More interesting is a look at the packets... I see repeated attempts to read what appears to be random sections of the files on the destination share, though no attempts to read any of the data on the source share (remember, the data has already been copied and is identical in size and dates). Here's the summary information from packet header pertaining to just one file:
Src | Dest | Len | Protocol | Info |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:512 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:512 Off:1048064 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 650 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1047602 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1099 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1040637 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1039576 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1042432 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1047765 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1047746 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:1041987 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:256 Off:7172 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 394 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:512 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 650 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:512 Off:65024 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 650 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:2 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 140 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:512 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 650 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:4096 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
MyPC | NetApp | 54 | TCP | 51321 > microsoft-ds [ACK] Seq=285732 Ack=1208513 Win=16425 Len=0 |
NetApp | MyPC | 1314 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:4096 Off:1044480 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
MyPC | NetApp | 54 | TCP | 51321 > microsoft-ds [ACK] Seq=285849 Ack=1212693 Win=16425 Len=0 |
NetApp | MyPC | 1314 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:4096 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
MyPC | NetApp | 54 | TCP | 51321 > microsoft-ds [ACK] Seq=285966 Ack=1216873 Win=16425 Len=0 |
NetApp | MyPC | 1314 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:512 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 650 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:64 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 202 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:512 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 650 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:4096 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
NetApp | MyPC | 1514 | TCP | [TCP segment of a reassembled PDU] |
MyPC | NetApp | 54 | TCP | 51321 > microsoft-ds [ACK] Seq=286434 Ack=1222393 Win=16425 Len=0 |
NetApp | MyPC | 1314 | SMB2 | Read Response |
MyPC | NetApp | 171 | SMB2 | Read Request Len:4 Off:0 File: netapp\data$\test\B1\B2\1m-C.txt |
NetApp | MyPC | 142 | SMB2 | Read Response |