**Describe the situation**

The author implemented it but enabled only for DiskS3.
CC @excitoon 
it can use memory tracker in the ~ThreadStatus in order to alloc/free untracked_memory,\
                 and by this time user-level memory tracker may be already destroyed.
                
                
                CurrentThread::get().memory_tracker.setParent(&total_memory_tracker);
            );
            callback();
        });
    };
    auto s3_buffer = std::make_unique<WriteBufferFromS3>(
        settings->client,
        bucket,
        remote_fs_root_path + blob_name,
        settings->s3_min_upload_part_size,
        settings->s3_upload_part_size_multiply_factor,
        settings->s3_upload_part_size_multiply_parts_count_threshold,
        settings->s3_max_single_part_upload_size,
        std::move(object_metadata),
        buf_size, std::move(schedule));
    auto create_metadata_callback = [this, path, blob_name, mode] (size_t count)
    {
        readOrCreateUpdateAndStoreMetadata(path, mode, false, [blob_name, count] (Metadata & metadata) { metadata.addObject(blob_name, count); return true; });
    };
    return std::make_unique<WriteIndirectBufferFromRemoteFS>(std::move(s3_buffer), std::move(create_metadata_callback), path);
}
void DiskS3::createHardLink(const String & src_path, const String & dst_path)