**Describe the situation**

The author implemented it but enabled only for DiskS3.
CC @excitoon 
{
    if (!key.starts_with(path))
        throw Exception("The key " + key + " prefix mismatch with given " + path, ErrorCodes::LOGICAL_ERROR);
    return key.substr(path.length());
}
String DiskS3::revisionToString(UInt64 revision)
{
    return std::bitset<64>(revision).to_string();
}
String DiskS3::pathToDetached(const String & source_path)
{
    if (source_path.ends_with('/'))
        return fs::path(source_path).parent_path().parent_path() / "detached/";
    return fs::path(source_path).parent_path() / "detached/";
}
void DiskS3::onFreeze(const String & path)
{
    createDirectories(path);
    auto revision_file_buf = metadata_disk->writeFile(path + "revision.txt", 32);
    writeIntText(revision_counter.load(), *revision_file_buf);
    revision_file_buf->finalize();
}
void DiskS3::applyNewSettings(const Poco::Util::AbstractConfiguration & config, ContextPtr context_, const String &, const DisksMap &)
{
    auto new_settings = settings_getter(config, "storage_configuration.disks." + name, context_);
    current_settings.set(std::move(new_settings));
    if (AsyncExecutor * exec = dynamic_cast<AsyncExecutor*>(&getExecutor()))
        exec->setMaxThreads(current_settings.get()->thread_pool_size);
}
DiskS3Settings::DiskS3Settings(