docstr: Copy file/folder to persist storage
  
  Examples:
      Copy file 'args.json' to '{storage}/args.json'
      >>> fs.add('/path/args.json')
  
      Copy file 'args.json' to '{storage}/folder/opts.json'
      >>> fs.add('/path/args.json', 'folder/opts.json')
  
      Copy folder 'folder' to '{storage}/folder'
      >>> fs.add('/path/folder')
  
      Copy folder 'folder' to '{storage}/path/folder'
      >>> fs.add('/path/folder', 'path/folder')
  
  Args:
      path (Union[str, Path]): path to the resource
      dest_rel_path (Optional[Union[str, Path]]): relative path in storage to file or folder
code: def add(
      self,
      path: Union[str, Path],
      dest_rel_path: Optional[Union[str, Path]] = None,
  ):
      """Copy file/folder to persist storage
  
      Examples:
          Copy file 'args.json' to '{storage}/args.json'
          >>> fs.add('/path/args.json')
  
          Copy file 'args.json' to '{storage}/folder/opts.json'
          >>> fs.add('/path/args.json', 'folder/opts.json')
  
          Copy folder 'folder' to '{storage}/folder'
          >>> fs.add('/path/folder')
  
          Copy folder 'folder' to '{storage}/path/folder'
          >>> fs.add('/path/folder', 'path/folder')
  
      Args:
          path (Union[str, Path]): path to the resource
          dest_rel_path (Optional[Union[str, Path]]): relative path in storage to file or folder
      """
      if self.sync is True:
          self.pull()
      with FileLock(self.folder_path, mode="w"):
          path = Path(path)
          if isinstance(dest_rel_path, str):
              dest_rel_path = Path(dest_rel_path)
  
          if dest_rel_path is None:
              dest_abs_path = self.folder_path / path.name
          else:
              dest_abs_path = self.folder_path / dest_rel_path
  
          copy(str(path), str(dest_abs_path))
  
          if self.sync is True:
              self._push_no_lock()
  
imports: import os
  import io
  import shutil
  import tarfile
  import hashlib
  from pathlib import Path
  from abc import ABC, abstractmethod
  from typing import Union, Optional
  from dataclasses import dataclass
  from datetime import datetime
  import threading
  import psutil
  from checksumdir import dirhash
  from mindsdb.utilities.config import Config
  from mindsdb.utilities.context import context
  import mindsdb.utilities.profiler
  from mindsdb.utilities import log
label_desc: Use image node_id 9 for calling the FileStorage obj's underlying member method code with example usage: obj.add(path, dest_rel_path) without return types