private void formulateFolders() {
    systemDir = addDataHomeDir(systemDir);
    schemaDir = addDataHomeDir(schemaDir);
    consensusDir = addDataHomeDir(consensusDir);
    iotConsensusV2DeletionFileDir = addDataHomeDir(iotConsensusV2DeletionFileDir);
    dataRegionConsensusDir = addDataHomeDir(dataRegionConsensusDir);
    ratisDataRegionSnapshotDir = addDataHomeDir(ratisDataRegionSnapshotDir);
    schemaRegionConsensusDir = addDataHomeDir(schemaRegionConsensusDir);
    indexRootFolder = addDataHomeDir(indexRootFolder);
    extDir = addDataHomeDir(extDir);
    for (int i = 0; i < loadActiveListeningDirs.length; i++) {
      loadActiveListeningDirs[i] = addDataHomeDir(loadActiveListeningDirs[i]);
    }
    loadActiveListeningPipeDir = addDataHomeDir(loadActiveListeningPipeDir);
    loadActiveListeningFailDir = addDataHomeDir(loadActiveListeningFailDir);
    udfDir = addDataHomeDir(udfDir);
    udfTemporaryLibDir = addDataHomeDir(udfTemporaryLibDir);
    triggerDir = addDataHomeDir(triggerDir);
    triggerTemporaryLibDir = addDataHomeDir(triggerTemporaryLibDir);
    pipeDir = addDataHomeDir(pipeDir);
    pipeTemporaryLibDir = addDataHomeDir(pipeTemporaryLibDir);
    for (int i = 0; i < pipeReceiverFileDirs.length; i++) {
      pipeReceiverFileDirs[i] = addDataHomeDir(pipeReceiverFileDirs[i]);
    }
    for (int i = 0; i < iotConsensusV2ReceiverFileDirs.length; i++) {
      iotConsensusV2ReceiverFileDirs[i] = addDataHomeDir(iotConsensusV2ReceiverFileDirs[i]);
    }
    iotConsensusV2DeletionFileDir = addDataHomeDir(iotConsensusV2DeletionFileDir);
    mqttDir = addDataHomeDir(mqttDir);
    extPipeDir = addDataHomeDir(extPipeDir);
    queryDir = addDataHomeDir(queryDir);
    sortTmpDir = addDataHomeDir(sortTmpDir);
    formulateDataDirs(tierDataDirs);
  }
if the folders are relative paths, add IOTDB_DATA_HOME as the path prefix
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java