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