ОПЫТ



Ошибки оболочек
Публикуется без комментариев. Стиль автора сохранен с незначительными
изменениями . (Ред.)
Все работают в 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


