private void CalcPositionDiskToVirtual(int start, int diskId, out int ret)
        {
            ret = -1;
            int repeatSizeOnDisk = NumDiscs * ChunkSize;
            int dataSizeOnDisk   = (NumDiscs - 1) * ChunkSize;

            int offsetInChunk     = start % ChunkSize;
            int chunkAdressOnDisk = start - offsetInChunk; // pos in %ChunkSize

            int chunkOffsetOnDisk = chunkAdressOnDisk % repeatSizeOnDisk;

            int basePosOnDisk = chunkAdressOnDisk - chunkOffsetOnDisk;

            int basePos = basePosOnDisk / repeatSizeOnDisk * dataSizeOnDisk * NumDiscs;

            int inTablePos = DiskPositions[diskId] + NumDiscs * (chunkOffsetOnDisk / ChunkSize);

            if (Arrangement.Where(o => o.Value == inTablePos).Select(o => o.Key).Any())
            {
                int otherPos = Arrangement.Where(o => o.Value == inTablePos).Select(o => o.Key).First();
                ret = basePos + otherPos * ChunkSize + offsetInChunk;
            }
        }