public ODBFSImpl(IBlockStore blockStore) { if (blockStore == null) { throw new ArgumentNullException("blockStore"); } _blockStore = blockStore; var xBuff = new byte[blockStore.BlockSize]; blockStore.Retrieve(0, new ArraySegment<byte>(xBuff)); if (ByteConverter.ReadUInt32(xBuff, 0) != ODBFSMagic) { throw new Exception("Blockstore doesn't contain an ODBFS system!"); } _virtualBlockSize = ByteConverter.ReadUInt32(xBuff, 4); if (_virtualBlockSize % blockStore.BlockSize != 0) { throw new Exception("Corrupt data!"); } _rawBlocksPerVirtualBlock = _virtualBlockSize / blockStore.BlockSize; _metaGroupItemsPerVirtualBlock = (_virtualBlockSize - 32) / 32; LoadConfiguration(); }