для простоты понимания я объясню как это происходило в одной из первых систем формата Fat 16 = Таблица расположения файлов. смотрите внизу картинки.
И так что мы видим в редакторе чисел. Первые восемь байтов это имя файла. Запись должна производиться минимум с "! знака" дес. 33, а 32 - это пробел. Если записать 0, то файл стёрт и игнорируется таблицей. Следующие три байта - это расширение файла (точка отсутствует - она ставится интерпретатором по умолчанию.). Хотя их может и не быть, а стоять 3 пробела (32) затем идёт атрибут 1 байт. Там разные варианты: скрытый, только для чтения, архивный и т.д. Следующие 2 байта время создания, затем два байта дата. И определяется расположения файла, далее 2 байта начала, и следующие 4 байта длина файла.
Итог: 22 байта на файл. Если в таблице в имени файла записан 0, то файл удалён. При первом же дефрагментировании, при заполнении пустот он будет перезаписан. Если дефрагментирование не производилось, восстановить его пара пустяков. Пишем букву по смыслу, сохраняем и вот он.
Но я описала самую простую систему. Современная NTFS и другие системы гораздо сложнее. Ведь там имена можно писать русскими буквами и очень длинные, а расширения не три знака, а больше. Но принцип удаления файлов такой же. И восстановить легко, но только не с SSD диска. Там система TRIM перетаскивает ячейки для равномерного старения, на уровне железа и отключить её невозможно. То есть инфо восстановлению не подлежит без физического вмешательства. Тоже самое касается и флешек.
Надеюсь я понятно объяснила, как устроена таблица файловой системы не залазия в дебри.