Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

In the bios interface of Serveraid controller is possible to set the PHY speed. Beside this there is a parameter called CRC check which can be set to true or false.

Knowing this, some questions:

  1. What CRC does exactly? Accordingly to wikipedia it should be an integrity check but how does it work?

  2. I discovered that setting this parameter to false my disks are finally recognized as sata2 rather than sata1 and speed are really increased. Why?

  3. I found this IBM paper in which they say: 'CRC Checking—(Default: No) Determines whether the controller verifies the accuracy of data transfer on the Serial bus. CRC Checking should be disabled on the controller and all devices if any device supported by the controller does not support CRC Checking." How do I discover if a hdd supports CRC?

  4. If CRC is disabled and a breaking event occurs, is there a risk?

share|improve this question

2 Answers 2

up vote 1 down vote accepted
  1. CRC is a basic integrity checking, it's a non-secure version of hashes like MD5 and SHA1.

  2. Computing CRC probably causes enough of a slowdown that either the controller or disks want to work in 1.5gbit mode

  3. No idea.

  4. Probably only slightly more of a risk then with it turned off.

share|improve this answer

CRC checks in disk I/O revolve around generating a unique checkword during a write operation to disk, and reading that checkword correctly back during the read operation.

A sector is a subdivision of a track on a magnetic disk. Sectors are where we store information. Newer hard drives use 4096 byte sector size.

Write operation. Imagine a 4096 byte buffer that represents the sector, and a 2 or 4 byte buffer [that initially contains all zeros, important] which will contain the checkword. When we write 4096 bytes to a sector on disk, the string of ones and zeros stream into the 4096 byte write buffer. Simultaneously, that same string of ones and zeros stream into the small checkword buffer. This checkword register is uniquely made, in that it selectively AND and ORs certain bit positions of the register back in on itself, effectively creating a checkword that is unique and wholly dependent on that same, exact stream of data do reproduce it. So, after all 4096 bytes are shifted into the checkword register, we've got a small complex number. The 4096 byte disk record is written and the small checkword appended to the end of the sector (in something called postamble).

Read operation. Let's reverse the process two weeks later. As before, we have a 4096 byte disk buffer and the 2 or 4 byte buffer which will contain the checkword. Both buffers are initially zero. We read the 4096 byte sector into disk buffer from the disk. As before, simultaneously, that same string of ones and zeros stream into the small checkword buffer. At the end of the sector read, the checkword buffer contains some crazy number, what, oh what, sequence might be needed to added to make it all turn to zeros? You guessed it, the checkword that is about to be read into the buffer. As it's read in, the buffer's bits go to all zeros. If the buffer's bits test all zeros, the disk verify check is complete and the data is sent to the system. If the CRC buffer did not end up all zeros then there was a failure somewhere in the writing of the original data sector or the checkword, or reading the data sector or the checkword. In any case the data are deemed to be corrupt.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.