Что не понятного? что функция выполняется на самом деле после выполнения всего кода? Это особенность setTimeout что он так выполняется, если задержка 0. Если бы выполнялся прямо в коде.
В биосе наверно был выставлен режим контроллера жестких дисков Эмуляция IDE и при сбросе сменился на AHCI - а это другое устройство, в ядре системы драйверов на него нет - естественно после загрузки ядра вылетает, так как жесткий диск не найден. Меняй обратно как было.
Биос ноутбука не умеет аппаратный RAID, следовательно нужно програмный RAID - а он только в редакциях win 10 pro/corp, и скорее всего не будет работать до загрузки ядра - тоесть нужен загрузочный раздел, что создает дополнительный изврат.
Все просто: читаешь документацию по файловым системам, разбираешься как каждая из них хранит файлы и выполняет их удаление. Потом подключаешься к нужному жесткому диску в режиме прямого доступа к бинарному содержимому, определяешь тип файловой системы, проходишься по содержимому выявляя начало и конец файла, по сигнатуре заголовка определяешь тип - сохраняешь данные в файл, имя скорее всего потеряется, но не во всех файловых системах, также как сожержимое может оказаться частично перезаписанным.
Работать проще в linux - там жесткий диск и его разделы представленны в виде файловых нод и читаются обычной командой open() в бинарном режиме.
Можно конечно из питона запускать консольную утилиту, но это совсем не то - вдруг она чего пропустит?
А еще чтобы он показывал наличие товара в ближайшем магазине. Думаю можно. Первое нужна связь с реальными магазинами и их базами, они завезли товар, пробили его в свою базу, переместили в магазин - ты это увидел, и показал своим пользователям. Допустим крупные сети могут помочь тебе(себе), но мелкие забегаловки - придется ножками обойти, уговорить и т.д.
Возможно в будущем можно будет запустить роботов типа гугл машин и они будут ходить по магазинам и смотреть что там есть. Или как вариант магазинов не будет вовсе - все будут заказывать онлайн.