diff --git a/esp8266/main.c b/esp8266/main.c
index 9883f9f96d10d3cd613a008fe526380400ef08b0..6814248aa6259c4d66b238403d781ba606dd5739 100644
--- a/esp8266/main.c
+++ b/esp8266/main.c
@@ -52,9 +52,6 @@ STATIC void mp_reset(void) {
     mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_lib));
     mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_));
     mp_obj_list_init(mp_sys_argv, 0);
-    #if MICROPY_VFS_FAT
-    memset(MP_STATE_PORT(fs_user_mount), 0, sizeof(MP_STATE_PORT(fs_user_mount)));
-    #endif
     MP_STATE_PORT(mp_kbd_exception) = mp_obj_new_exception(&mp_type_KeyboardInterrupt);
     MP_STATE_PORT(term_obj) = MP_OBJ_NULL;
     MP_STATE_PORT(dupterm_arr_obj) = MP_OBJ_NULL;
diff --git a/py/runtime.c b/py/runtime.c
index 0ecccbd8740f55229823b7f3e28798c6b48553f1..e7e35a081afcc3a92cf7c118a21006b508c2d054 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -91,6 +91,11 @@ void mp_init(void) {
     MP_STATE_VM(mp_module_builtins_override_dict) = NULL;
     #endif
 
+    #if MICROPY_FSUSERMOUNT
+    // zero out the pointers to the user-mounted devices
+    memset(MP_STATE_VM(fs_user_mount), 0, sizeof(MP_STATE_VM(fs_user_mount)));
+    #endif
+
     #if MICROPY_PY_THREAD_GIL
     mp_thread_mutex_init(&MP_STATE_VM(gil_mutex));
     #endif
diff --git a/stmhal/main.c b/stmhal/main.c
index b5d0916f3a71848844c0be077d923b75723ab9d8..78afe54ef691b481ce6aa3d9c47b077c43095ed5 100644
--- a/stmhal/main.c
+++ b/stmhal/main.c
@@ -439,9 +439,6 @@ soft_reset:
     mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_flash_slash_lib));
     mp_obj_list_init(mp_sys_argv, 0);
 
-    // zero out the pointers to the mounted devices
-    memset(MP_STATE_PORT(fs_user_mount), 0, sizeof(MP_STATE_PORT(fs_user_mount)));
-
     // Initialise low-level sub-systems.  Here we need to very basic things like
     // zeroing out memory and resetting any of the sub-systems.  Following this
     // we can run Python scripts (eg boot.py), but anything that is configurable