diff --git a/mmengine/__init__.py b/mmengine/__init__.py
index 916c3628b288fbcb22a56029cc125f721bf1c280..1e4ec2f92e90b9da95e22765fab789d5f1e03ef0 100644
--- a/mmengine/__init__.py
+++ b/mmengine/__init__.py
@@ -1,3 +1,4 @@
 # Copyright (c) OpenMMLab. All rights reserved.
 # flake8: noqa
+from .fileio import *
 from .utils import *
diff --git a/mmengine/utils/fileio/__init__.py b/mmengine/fileio/__init__.py
similarity index 100%
rename from mmengine/utils/fileio/__init__.py
rename to mmengine/fileio/__init__.py
diff --git a/mmengine/utils/fileio/file_client.py b/mmengine/fileio/file_client.py
similarity index 96%
rename from mmengine/utils/fileio/file_client.py
rename to mmengine/fileio/file_client.py
index afc19bb7406619126935bdabbcbcc5d18b6a5fa3..955643eef772410814e307ff4f916f67c4bff37f 100644
--- a/mmengine/utils/fileio/file_client.py
+++ b/mmengine/fileio/file_client.py
@@ -4,7 +4,6 @@ import os
 import os.path as osp
 import re
 import tempfile
-import warnings
 from abc import ABCMeta, abstractmethod
 from contextlib import contextmanager
 from pathlib import Path
@@ -43,47 +42,8 @@ class BaseStorageBackend(metaclass=ABCMeta):
         pass
 
 
-class CephBackend(BaseStorageBackend):
-    """Ceph storage backend (for internal use).
-
-    Args:
-        path_mapping (dict|None): path mapping dict from local path to Petrel
-            path. When ``path_mapping={'src': 'dst'}``, ``src`` in ``filepath``
-            will be replaced by ``dst``. Default: None.
-
-    .. warning::
-        :class:`mmcv.fileio.file_client.CephBackend` will be deprecated,
-        please use :class:`mmcv.fileio.file_client.PetrelBackend` instead.
-    """
-
-    def __init__(self, path_mapping=None):
-        try:
-            import ceph
-        except ImportError:
-            raise ImportError('Please install ceph to enable CephBackend.')
-
-        warnings.warn(
-            'CephBackend will be deprecated, please use PetrelBackend instead',
-            DeprecationWarning)
-        self._client = ceph.S3Client()
-        assert isinstance(path_mapping, dict) or path_mapping is None
-        self.path_mapping = path_mapping
-
-    def get(self, filepath):
-        filepath = str(filepath)
-        if self.path_mapping is not None:
-            for k, v in self.path_mapping.items():
-                filepath = filepath.replace(k, v)
-        value = self._client.Get(filepath)
-        value_buf = memoryview(value)
-        return value_buf
-
-    def get_text(self, filepath, encoding=None):
-        raise NotImplementedError
-
-
 class PetrelBackend(BaseStorageBackend):
-    """Petrel storage backend (for internal use).
+    """Petrel storage backend (for internal usage).
 
     PetrelBackend supports reading and writing data to multiple clusters.
     If the file path contains the cluster name, PetrelBackend will read data
@@ -152,8 +112,8 @@ class PetrelBackend(BaseStorageBackend):
 
         Returns:
             memoryview: A memory view of expected bytes object to avoid
-                copying. The memoryview object can be converted to bytes by
-                ``value_buf.tobytes()``.
+            copying. The memoryview object can be converted to bytes by
+            ``value_buf.tobytes()``.
         """
         filepath = self._map_path(filepath)
         filepath = self._format_path(filepath)
@@ -770,7 +730,6 @@ class FileClient:
 
     _backends = {
         'disk': HardDiskBackend,
-        'ceph': CephBackend,
         'memcached': MemcachedBackend,
         'lmdb': LmdbBackend,
         'petrel': PetrelBackend,
diff --git a/mmengine/utils/fileio/handlers/__init__.py b/mmengine/fileio/handlers/__init__.py
similarity index 100%
rename from mmengine/utils/fileio/handlers/__init__.py
rename to mmengine/fileio/handlers/__init__.py
diff --git a/mmengine/utils/fileio/handlers/base.py b/mmengine/fileio/handlers/base.py
similarity index 100%
rename from mmengine/utils/fileio/handlers/base.py
rename to mmengine/fileio/handlers/base.py
diff --git a/mmengine/utils/fileio/handlers/json_handler.py b/mmengine/fileio/handlers/json_handler.py
similarity index 100%
rename from mmengine/utils/fileio/handlers/json_handler.py
rename to mmengine/fileio/handlers/json_handler.py
diff --git a/mmengine/utils/fileio/handlers/pickle_handler.py b/mmengine/fileio/handlers/pickle_handler.py
similarity index 100%
rename from mmengine/utils/fileio/handlers/pickle_handler.py
rename to mmengine/fileio/handlers/pickle_handler.py
diff --git a/mmengine/utils/fileio/handlers/yaml_handler.py b/mmengine/fileio/handlers/yaml_handler.py
similarity index 100%
rename from mmengine/utils/fileio/handlers/yaml_handler.py
rename to mmengine/fileio/handlers/yaml_handler.py
diff --git a/mmengine/utils/fileio/io.py b/mmengine/fileio/io.py
similarity index 91%
rename from mmengine/utils/fileio/io.py
rename to mmengine/fileio/io.py
index fbfa93d3731821c71d6651fb11c0ab6d4ab1c35f..8a451f1de7e9ae16569336e790124c0a7ae187df 100644
--- a/mmengine/utils/fileio/io.py
+++ b/mmengine/fileio/io.py
@@ -2,7 +2,7 @@
 from io import BytesIO, StringIO
 from pathlib import Path
 
-from mmengine import is_list_of, is_str
+from ..utils import is_list_of, is_str
 from .file_client import FileClient
 from .handlers import BaseFileHandler, JsonHandler, PickleHandler, YamlHandler
 
@@ -20,9 +20,8 @@ def load(file, file_format=None, file_client_args=None, **kwargs):
 
     This method provides a unified api for loading data from serialized files.
 
-    Note:
-        In v1.3.16 and later, ``load`` supports loading data from serialized
-        files those can be storaged in different backends.
+    ``load`` supports loading data from serialized files those can be storaged
+    in different backends.
 
     Args:
         file (str or :obj:`Path` or file-like object): Filename or a file-like
@@ -32,7 +31,7 @@ def load(file, file_format=None, file_client_args=None, **kwargs):
             Currently supported formats include "json", "yaml/yml" and
             "pickle/pkl".
         file_client_args (dict, optional): Arguments to instantiate a
-            FileClient. See :class:`mmcv.fileio.FileClient` for details.
+            FileClient. See :class:`mmengine.fileio.FileClient` for details.
             Default: None.
 
     Examples:
@@ -72,9 +71,8 @@ def dump(obj, file=None, file_format=None, file_client_args=None, **kwargs):
     This method provides a unified api for dumping data as strings or to files,
     and also supports custom arguments for each file format.
 
-    Note:
-        In v1.3.16 and later, ``dump`` supports dumping data as strings or to
-        files which is saved to different backends.
+    ``dump`` supports dumping data as strings or to files which is saved to
+    different backends.
 
     Args:
         obj (any): The python object to be dumped.
@@ -83,7 +81,7 @@ def dump(obj, file=None, file_format=None, file_client_args=None, **kwargs):
             specified by the filename or file-like object.
         file_format (str, optional): Same as :func:`load`.
         file_client_args (dict, optional): Arguments to instantiate a
-            FileClient. See :class:`mmcv.fileio.FileClient` for details.
+            FileClient. See :class:`mmengine.fileio.FileClient` for details.
             Default: None.
 
     Examples:
diff --git a/mmengine/utils/fileio/parse.py b/mmengine/fileio/parse.py
similarity index 84%
rename from mmengine/utils/fileio/parse.py
rename to mmengine/fileio/parse.py
index 582221a3dd0480d5769440e9982bef6a2adff4ca..8353b622971d67649fb04f7a14166ee66a76d78f 100644
--- a/mmengine/utils/fileio/parse.py
+++ b/mmengine/fileio/parse.py
@@ -12,10 +12,8 @@ def list_from_file(filename,
                    file_client_args=None):
     """Load a text file and parse the content as a list of strings.
 
-    Note:
-        In v1.3.16 and later, ``list_from_file`` supports loading a text file
-        which can be storaged in different backends and parsing the content as
-        a list for strings.
+    ``list_from_file`` supports loading a text file which can be storaged in
+    different backends and parsing the content as a list for strings.
 
     Args:
         filename (str): Filename.
@@ -25,7 +23,7 @@ def list_from_file(filename,
             zeros and negatives mean no limitation.
         encoding (str): Encoding used to open the file. Default utf-8.
         file_client_args (dict, optional): Arguments to instantiate a
-            FileClient. See :class:`mmcv.fileio.FileClient` for details.
+            FileClient. See :class:`mmengine.fileio.FileClient` for details.
             Default: None.
 
     Examples:
@@ -61,10 +59,8 @@ def dict_from_file(filename,
     whitespaces or tabs. The first column will be parsed as dict keys, and
     the following columns will be parsed as dict values.
 
-    Note:
-        In v1.3.16 and later, ``dict_from_file`` supports loading a text file
-        which can be storaged in different backends and parsing the content as
-        a dict.
+    ``dict_from_file`` supports loading a text file which can be storaged in
+    different backends and parsing the content as a dict.
 
     Args:
         filename(str): Filename.
@@ -72,7 +68,7 @@ def dict_from_file(filename,
             type conversion will be performed if specified.
         encoding (str): Encoding used to open the file. Default utf-8.
         file_client_args (dict, optional): Arguments to instantiate a
-            FileClient. See :class:`mmcv.fileio.FileClient` for details.
+            FileClient. See :class:`mmengine.fileio.FileClient` for details.
             Default: None.
 
     Examples:
diff --git a/mmengine/utils/__init__.py b/mmengine/utils/__init__.py
index e709a4ef62efe2c91d77a7bf3eed9098ba21672a..952b2dc3c306dfa3ebf968e3de1e4907a09c2a73 100644
--- a/mmengine/utils/__init__.py
+++ b/mmengine/utils/__init__.py
@@ -1,6 +1,4 @@
 # Copyright (c) OpenMMLab. All rights reserved.
-from .fileio import (FileClient, dict_from_file, dump, list_from_file, load,
-                     register_handler)
 from .misc import (check_prerequisites, concat_list, deprecated_api_warning,
                    has_method, import_modules_from_strings, is_list_of,
                    is_method_overridden, is_seq_of, is_str, is_tuple_of,
@@ -17,6 +15,5 @@ __all__ = [
     'is_filepath', 'fopen', 'check_file_exist', 'mkdir_or_exist', 'symlink',
     'scandir', 'deprecated_api_warning', 'import_modules_from_strings',
     'to_1tuple', 'to_2tuple', 'to_3tuple', 'to_4tuple', 'to_ntuple',
-    'is_method_overridden', 'has_method', 'dict_from_file', 'list_from_file',
-    'register_handler', 'dump', 'load', 'FileClient'
+    'is_method_overridden', 'has_method'
 ]
diff --git a/tests/test_data/test_base_dataset.py b/tests/test_data/test_base_dataset.py
index ff4f60fcfab4f5d812bfa337d391f1cbebb3fc84..2a33427cfa21eb5c50b86dc60bb54e423ffbcd3d 100644
--- a/tests/test_data/test_base_dataset.py
+++ b/tests/test_data/test_base_dataset.py
@@ -1,3 +1,4 @@
+# Copyright (c) OpenMMLab. All rights reserved.
 import os.path as osp
 from unittest.mock import MagicMock