let read_block n buffer offset =
    if not !alive then system_error EIO "read_block: not alive" F.name;
    assert (String.length buffer - offset >= block_size);
    try lseek_block nreally_read disk buffer offset block_size
    with Unix_error (_,_,_) | End_of_file ->
      system_error EIO "readblock: Unix_error" F.name