ОПЫТ

Back PageHomeNext Page

Ошибки оболочек


Публикуется без комментариев. Стиль автора сохранен с незначительными изменениями . (Ред.)
Все работают в Windows, но все любят переключаться на DOS-режим (сессию) и какую-нибудь оболочку (NC, VC, DN) и быстро сделать что-нибудь, например переписать файлы. А что произойдет в том случае, если файловая система (на винчестере, на дискете) повреждена и вы переписываете поврежденный файл?
Сделаем маленький опыт. Я не буду рассказывать, как вручную разрушать файловую систему. Кто не поверит, тот пусть читает литературу и сам повторит эксперимент.
Файл на диске имеет размер, указываемый в элементе оглавления (директории). Файл хранится в кластерах. Номера кластеров перечислены в таблице FAT. Размер файла в правильной файловой системе должен укладываться в число кластеров. Что будет, если размер файла не соответствует числу кластеров? Все проверяющие файловую систему программы - CHKDSK, SCANDISK, NDD и все прочие подобные - эту ошибку ловят совершенно стандартно. Они для этого и предназначены. И пока вы их не запустите, вы можете продолжать работать с разрушенной файловой системой и разрушать ее дальше.
Автор создал тест на дискете и гарантирует, что в машине ничего не испортится, если вы сами его попробуете.
Возьмем какой-нибудь файл и сделаем цепочку FAT для него короче его размера (у меня это получилось в результате сбоя винчестера). Но это можно повторить искусственно, вручную исправив цепочку FAT. Попробуем скопировать такой порченный файл на другой логический диск.
Для проведения теста требуется чистая дискета и рабочий каталог на винчестере.
После окончания теста из каталога надо вычеркнуть записанные туда файлы. Не рекомендуется писать в корневой каталог диска C.
Технология следующая:
- переписать какой-либо маленький файл на дискету, маленький, чтобы было проще экспериментировать и не портить винчестер;
- нортоновской утилитой DISKEDIT вручную изобразить ошибку файловой системы на дискете, вручную выправить длину файла, больше, чем распределенная цепочка элементов FAT. В принципе это все напоминает хакерское копание, но в действительности это ручная работа по изображению последствий нарушения файловой системы при зависаниях машины, при перезагрузке или при запуске всевозможных интересных программ, конфликтующих друг с другом;
- переписать данный файл с дискеты на винчестер.
Повторюсь, что все программы проверки файловой системы - CHKDSK, NDD, SCANDISK - замечают подобные ошибки. Вопрос, может ли какая-либо DOS-оболочка, или Windows заметить ошибку разрушения файловой системы в реальном времени.
Вот тест. Для наглядности рекомендуется проводить его под какой-нибудь оболочкой типа NC, DN, VC.
1. На чистую дискету запишем файл AUTOEXEC.BAT. Он есть на каждой машине в корневом каталоге C. Переименуем его, например, в A.BAT.
2. Вызовем DISKEDIT.
3. В DISKEDIT выберем пункт Tools.
4. В пункте Tools / Configuration разрешим запись (у Read Only должно стоять пустое окно).
5. По ESC вернемся в каталог, передвинем курсор на длину файла (у меня - 1770) и вручную выправим его на что-нибудь, например на 4096.
6. Запишем изменения - по CTRL+W. Установим курсор на Write, нажмем ENTER.
7. Нажмем ESC, DISKEDIT выдаст запрос на выход. Ответим установкой курсора на "Yes" и ENTER. Выйдем из DISKEDIT.
8. Попробуем скопировать файл в рабочий каталог.
Результат следующий. Все оболочки исправно переписывали сбойный файл, часто еще и перевирая его конечный размер. Windows 3.11 не была исключением. И только Windows 95 дала сообщение о невозможности действий с файлом (причем неверное), но это хоть что-то. Во всех остальных системах результат зависит от типа и версии операционной системы и оболочки. Чаще всего нет никакого сообщения, происходит копирование и результат зависит от длины кластера дискеты (где исходный файл) и длины кластера винчестера (где результат).
Все, кто когда-либо занимался базами данных, знают, что для обеспечения целостности и непротиворечивости информации в базе данных требуется, чтобы любое значение базы данных стояло только в одном месте. Для больших баз данных для достижения производительности приходится дублировать значения в разных местах базы данных в ущерб целостности и непротиворечивости базы данных. В файловой системе DOS длина файла стоит в каталоге и не должна противоречить распределению через FAT. Длина файла и цепочка элементов FAT - дублирующая информация, обеспечивающая производительность.
Для проверки целостности файловой системы есть специальные программы. Но в реальном времени только Win'95 пытается сообщать пользователю что-то.
Подробно это все описано в №4 издания ПРОК. Заказать издание можно по адресу: 620033, а/я 4. Цена издания 10.000 руб/ номер.
© Двинянинов А. Б., 1997

Back PageHomeNext Page