Запись данных на диск — достаточно сложный и ответственный процесс. В самом деле, при создании нового файла изменения должны быть проведены как минимум в трех местах: на самом диске — запись содержимого файла в кластеры, в FAT — пометка занимаемых файлом кластеров и указание их последовательности, и в файле каталога, содержащего этот файл — указание там его имени, времени создания, размера. При изменении файла должны быть перезаписаны данные на диске и информация в файле каталога — изменены его время создания и размер.
При нормальном режиме работы все эти мероприятия выполняются вполне корректно. Однако при аварийном завершении работы операционной системы (которое произойдет, скажем, при нажатии кнопки Reset во время записи файлов на диск) может возникнуть несоответствие между содержимым диска, FAT и каталога. Например, файл помещен на диск, в FAT расписана его кластерная структура, а в файле каталога остался его старый размер. Это, впрочем, не так опасно — просто, возможно, некоторые программы не смогут с ним работать. Но может также возникнуть путаница и в FAT, а вот это уже значительно хуже.
К примеру, операционная система поставила в записи FAT, относящейся к одному из кластеров, ссылку на другой кластер, содержащий продолжение файла, а вот пометить этот кластер с продолжением как занятый (поместив в соответствующую запись FAT либо ссылку на следующий кластер файла, либо символ конца файла) не успела — произошла перезагрузка или отключение компьютера.
В итоге кластер оказался помеченным в FAT как свободный, и при записи на диск следующего файла (после новой загрузки операционной системы) он был для него использован. В итоге этот кластер стал принадлежать сразу двум файлам — сделался общим. Ясно, что в итоге в кластер будут записываться попеременно данные для обоих файлов, что испортит и те, и другие.
Или другая ситуация: при записи нового файла операционная система для него отвела в FAT цепочку кластеров, а в каталог записать информацию о номере его первого кластера не успела. В итоге отведенные кластеры стали потерянными — и не пустые, и не принадлежащие какому-либо файлу. Данные в них, если все же оказались записанными, стали недоступными.
Все описанные ситуации могут серьезно затруднить работу с файлами. Общие кластеры приводят к потерям данных, а потерянные — к трате свободного места и утере их содержимого. Чтобы исправить подобные ошибки файловой системы, используются программы для проверки дисков — например, ScanDisk из поставки Windows или Norton Disk Doctor из комплекта Norton Utilities. Эти программы анализируют FAT и структуру каталогов, и в случае обнаружения потерянных кластеров сохраняют их в отдельные файлы, а общие кластеры копируют для каждого из их файлов.
Много интересных материалов об устройствах различных файловых систем и их характеристиках можно найти на сервере www.ixbt.ru, в разделе http://www.ixbt.ru/storage[23] ].
Об удалении файлов и восстановлении данных
Когда выполняется команда удаления файлов с жесткого диска (в Windows это происходит при очистке «Корзины», так как при простом удалении файлов с помощью команды «Удалить» или кнопки Delete файлы перемещаются в «Корзину», а не удаляются), то сама информация, находящаяся в ячейках жесткого диска, не уничтожается. Выполняется лишь пометка в FAT кластеров, ранее занимаемых этим файлом, как свободных, а в файле каталога, в котором этот файл находился, первый символ имени заменяется на знак"!". Так как длинные имена файлов хранятся в файле каталога отдельно от настоящих имен, то они в этом случае сохраняются.
Если в каталог и в кластеры, ранее занимаемые удаленным файлом, больше не производилось записи, то имеется возможность файл восстановить. Для этого нужно просто просмотреть файл каталога и найти в нем имя файла, узнать из записи, относящейся к этому файлу, номер первого кластера файла, а затем записать информацию из этого кластера в новый файл на свободное место винчестера.
Если файл занимал больше одного кластера, то наверняка восстановить можно лишь содержимое первого кластера. Информация о том, в каких кластерах располагалось остальное содержимое файла, утрачивается полностью, так как из FAT информация об удаленном файле стирается.
Поэтому программы восстановления удаленных файлов (к примеру, Norton UnErase Wizard) просто обьединяют в одном файле определенное число последовательных свободных кластеров (соответствующее записанному в файле каталога размеру удаленного файла) и именуют результат названием удаленного файла. Пример того, что получается — на рис. 8.10.
Рис. 8.10.