Here's an interesting issue I worked on the other day and since I didn't see it documented anywhere I thought it would be worth a mention here just in case someone else runs across it:
=====
The issue we were running into was one where tapes are labeled as “Unrecognized” after just previously writing to them and removing them from the library in System Center Data Protection Manager 2007.
To figure out why this was happening we gathered a trace of the problem and found that we were failing on the following code:
arrLabelTokens[6].GetLong((LONG*)&m_tapeHeaderInfo.m_mediaLabel.m_usSide)
The returned error code was 0x80070057 which means “ERROR_INVALID_PARAMETER” or “The parameter is incorrect.”
In this section of the code we are parsing the tape header and in this example the tape header was the following:
[MTF Media Label|1.0|Microsoft|2.0.8861.0|2010/03/19.21:04:11|Files Servers| Domain Controllers-LT-1Weeks-Copy0-00000125|0|{c5dd3d54-d495-4139-9212-e9fb72e2cf27}|{42bb9f73-f162-429b-93d3-e4a1fd257c7a}|]
Let’s break it down so it is easier to read:
Element 0 = MTF Media Label
Element 1 = 1.0
Element 2 = Microsoft
Element 3 = 2.0.8861.0
Element 4 = 2010/03/19.21:04:11
Element 5 = File Servers
Element 6 = Domain Controllers-LT-1Weeks-Copy0-00000125
Element 7 = 0
Element 8 = {c5dd3d54-d495-4139-9212-e9fb72e2cf27}
Element 9 = {42bb9f73-f162-429b-93d3-e4a1fd257c7a}
To break the code down a little further, we see that arrLabelTokens is grabbing the 6 th element of the header ( arrLabelTokens[6]) . It is expecting it to be a number ( GetLong((LONG*) ).
The 6 th element of the header, which is delimited by the “|” character would have been:
Domain Controllers-LT-1Weeks-Copy0-00000125
That isn’t a number so this is why we are getting “invalid parameter” as a returned error. If you look closely, you also notice that there is a space at the beginning of the 6 th element.
It was discovered that the name of the protection group that had this particular data source within it contained a “|” character. If the particular tape we are using doesn’t contain a header, then we use the protection group name in a portion of the header when we create it for the first time. In our example above it is actually element 5 that contains the protection group name. Since we are using the “|” character as the delimiter to parse the header, we will fail every single time if the protection group name contains a “|” character as well. Had the protection group not contained the “|” character we would have parsed it as follows:
Element 0 = MTF Media Label
Element 1 = 1.0
Element 2 = Microsoft
Element 3 = 2.0.8861.0
Element 4 = 2010/03/19.21:04:11
Element 5 = File Servers Domain Controllers-LT-1Weeks-Copy0-00000125
Element 6 = 0
Element 7 = {c5dd3d54-d495-4139-9212-e9fb72e2cf27}
Element 8 = {42bb9f73-f162-429b-93d3-e4a1fd257c7a}
Element 6 is a number!
Final Thoughts
So the bottom line here is that if you see this issue, check the name of the protection group and make sure it doesn't contain any special characters. To go even further, as a general rule of thumb it isn’t a good idea to ever use any special characters in your protection group names. This would include special characters such as the ampersand (&), percent (%), greater than (>), less than (<), and the period (.), comma (,) and the semicolon (;).
Note: This can issue can occur on long term as well as short term protection to tape.
Chuck Whitson | Support Escalation Engineer
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.