...
...

По-прежнему актуальная проблема

... Мне в прошлом месяце повезло: удалось получить денег достаточно, чтобы купить новый винчестер объемом 1 Гбайт. Это очень важно, так как я нуждаюсь в месте нескольких графических программ и еще хочу иметь возможность установить несколько игр. ... Пожалуйста, расскажите, как определить, сколько места будет потеряно в связи с размерами кластеров. Есть ли способ точно это узнать? Что вы считаете полезным сделать в таком случае? Сергей Петриченко, г. Гомель

Гм... Сначала я удивился: неужто снова надо об этом писать? А потом, после некоторых размышлений, понял, что тема эта не только не сходит с повестки дня, но даже становится все более актуальной. Связано это с тем, что для работы современных приложений требуется все больше и больше дискового пространства, все больше пользователей делают такие апгрейды, новые компьютеры продаются с винчестерами большой емкости, а вот наиболее популярная, наверное, операционная система Windows 95 как получила в наследство и морально, и физически устаревшую файловую систему FAT, так и по сей день с ней остается.

А ведь в первое время ходили слухи, что Microsoft так построила архитектуру Windows 95, чтобы можно было впоследствии без коренной переделки заменить VFAT, косметически отличающуюся от старушки-родительницы, на куда более удобную, мощную и надежную файловую систему NTFS, которая используется в Windows NT и многими специалистами признана лучшей. Вроде бы даже сроки какие-то назывались. Однако сейчас об этом уже никто не вспоминает и рассчитывать на это бессмысленно.

Ну, не суждено массовому пользователю получить такой подарок, так не суждено. Тем более что реализация NTFS способна оказаться более требовательной к ресурсам и поэтому более дорогой, чем VFAT. Об этом заставляет задуматься завидный аппетит самой Windows NT. И уж совсем не кстати, если бы это изменение вызвало очередной виток накачивания компьютерных мускулов и заставило вновь раскошелиться на апгрейд винчестера.

Итак, не светит. А раз так, то давайте посмотрим, как обстоят дела у нас сейчас и что можно сделать, чтобы подправить положение, если оно окажется чересчур тяжелым. И для начала совсем Немного теории.

При хранении информации в цифровом виде она все время представлена некоторыми блоками. Минимальная ее единица - бит, передающий понятия только "есть" или "нет" и способный сохранить всего два состояния. Чтобы записать буквы, биты объединяют в байты, каждый из которых состоит из 8 битов и передает уже 256 состояний. Далее блоки укрупняются снова, так как для сохранения, например, машинописной страницы текста надо не меньше 2,000 байт.

Если бы вопрос заключался только в пассивном хранении информации, с винчестерами не было бы проблем. Но мы ведь с информацией работаем. Причем ее объемы растут как на дрожжах, а работа становится все интенсивнее.

Что за действия выполняются при этом над файлами, находящимися на устройстве внешней памяти? Перечисляю: создание, чтение, запись (возможно с изменением размера как в большую, так и в меньшую сторону), удаление. Только чтение из перечня базовых операций не изменяет положения дел на диске. При такой мобильности ситуации главными при разработке способа хранения файлов становятся как раз вопросы, связанные с его длиной.

Решение (принцип) было найдено уже очень давно. Надо разбить весь дисковый объем на небольшие блоки для записи информации, файл при этом будет вписываться как минимум в один такой блок ( назвали их кластерами), а чаще всего располагаться в нескольких кластерах, образующих кластерную цепочку.

Раз число кластеров, в принципе, конечно, можно организовать достаточно простой их учет, отслеживать положение цепочек, контролировать изменение длин файлов, выдавая им пустые блоки и при уменьшении длины или при удалении файла собирая освобождающиеся блоки в пул свободного дискового пространства. Этим и занимается таблица FAT (File Allocation Table), от которой и произошло название файловой системы, построенной Microsoft по этому принципу.

Было это очень давно, когда о гигабайтных винчестерах никто и не фантазировал. Понятно, то, что приемлемо для гибких дискет, оказалось совсем не практичным для жестких дисков. Об ограничениях системы FAT можно говорить целыми днями, но для нас сегодня они не важны. Нас интересуют потери дискового пространства, связанные с выдачей места под файлы достаточно большими кластерами.

Суть проблемы в том, что в кластере может быть записана информация только из одного файла. И если файл длиной всего в 1 байт (или 1 байт не вместился в предыдущем кластере цепочки), ему будет предоставлен целый кластер. Нет, это не смертельно, тем более что и наисовременнейшие системы NTFS от Windows NT и HPFS от OS/2 действуют по тому же принципу и тоже имеют кластеры. И действуют весьма успешно, хотя, конечно, и не безупречно.

Беда не в самих кластерах, а в их размере. А размер кластеров, в свою очередь, определяется длиной используемой для контроля за расположением файлов таблицы FAT и емкостью дискового тома. Именно тома, а не всего винчестера, так как на каждом логическом диске строятся свои таблицы FAT. И раз уж зашла речь о размерах, потребуются Кое-какие расчеты.

Размер кластера всегда кратен размеру дискового сектора, то есть 512 байтам. На дискетах кластеры состояли из 2 секторов и имели размер 1,024 байта. На гигабайтном винчестере парой секторов дело не кончается и в кластер входит до 64 секторов. Чтобы вы могли сориентироваться загодя, привожу таблицу с типичными размерами кластеров для дисковых томов разного объема.

При расчетах логично предположить, что раз потери дисковой памяти на каждый файл лежат пределах от 1 байта до размера кластера минус 1 байт, в среднем они составляют половину кластера. Должен заметить, что как эта величина, так и общее число файлов на винчестере (в дисковом томе) сильно зависят от характера ваших приложений. Понятно, что при профессиональной работе с графикой полиграфического назначения и качества файлы получаются во много раз больше и их число скорее всего будет меньшим, чем при графических работах, но, например, предназначенных для Web-страниц.

И тем не менее можно, если и не с достаточно высокой точностью, то, по крайней мере, с достаточно красноречивой пропорцией, просчитать и спрогнозировать будущие при таком варианте разметки потери.

Это на стадии планирования. Когда же ваш винчестер уже ломится от файлов, можно или получить совершенно точную цифру, или собрать уточняющие сведения для расчета (точное число файлов, точный размер кластера и т.п.).

Первым и основным источником информации служат программы просмотра диска на предмет обнаружения и устранения ошибок. Такие программы обычно в конце работы выдают статистическую сводку, анализ которой способен привести вас к интересным решениям. К числу таких программ, кстати, относятся имеющиеся у всех, так как они входят в состав дистрибутивов MS-DOS и MS Windows разных версий, утилиты Chkdsk.exe и Scandisk.exe от Microsoft.

Вот, например, что сообщила мне программа Scandisk.exe для Windows 95 после просмотра моего винчестера (см. рис. 1). Во-первых, его полная емкость составляет 811,040,768 байт или 773.5 мегабайта.

Во-вторых, на этом пространстве сейчас расположилось 325 папок (директорий), 85 скрытых (скорее всего системных или временных) файлов и 4,287 обычных файлов, которые Microsoft назвала пользовательскими, хотя добрая четверть их относится не к моей работе, а к произведению самой Microsoft - Windows 95. В сумме получаем 4,697 файлов.

В-третьих, размер кластера на моем винчестере, сформатированном в один раздел (дисковый том), равен 16,384 байтам или 16 килобайтам. Это 32 сектора, из которых для каждого файла предположительно будут потеряны (выведены из обращения) 16 незанятых никакими данными секторов, то есть 8 килобайт.

Перемножаем и получаем, что на моем диске в данный момент потери за счет неиспользуемого места на концах кластерных цепочек должны составить приблизительно 37,576 килобайт, или 36.7 мегабайта. Это очень условная оценка, истинная величина потерь лежит в пределах от 4,697 байт до 73.4 мегабайта. Оба числа не слишком реальны, но сдвиг от середины происходит, к сожалению, чаще в сторону увеличения. По крайней мере так гласит мой опыт и почитаемые программистами законы Мэрфи.

Пользователям Windows 95 могу предложить достаточно легкий способ узнать точное число потерь. Он основан на том, что свободное и занятое место на диске можно рассчитывать, с одной стороны, вычитая точную сумму длин всех файлов, а с другой стороны, умножая количество свободных кластеров, выдаваемое FAT, на их размер. Второй способ быстрее и дает более корректные результаты, когда вас интересует именно свободное место.

Имея на руках числа, выданные по обеим методикам, не составляет труда вычесть из полученного по второму способу занятого файлами пространства ту же цифру, но рассчитанную по первой методике, и получить точную величину потерь. Это понятно. А где взять числа? Их, между прочим, выдает "Проводник". Тот самый "Проводник", без которого не обходится в Windows 95 ни одно дело. Данные, полученные по информации из FAT о занятых и свободных кластерах, то есть по второй методике, программа показывает, когда вы запрашиваете "Свойства" для локального жесткого диска (см. рис. 2). В моем случае занятыми по таблице FAT были посчитаны 359, а свободными - 414 мегабайт.

Чтобы узнать точную сумму длин всех четырех с половиной тысяч файлов, совсем не обязательно вооружаться калькулятором и терпением. Это сизифов труд. Нужную работу с удовольствием выполнит сам компьютер. От вас требуется сделать всего несколько действий.

Сначала следует включить опцию отображения всех файлов - скрытых, системных и т.п. Делается это через команду "Вид"/"Параметры"/"Просмотр". Если это не выполнить, из расчета выпадут скрытые файлы, что несмертельно ввиду их небольшого числа, но обидно - мы ведь ищем точную цифру.

Следующие действия - помечаете клавишами [Ctrl] + [А] все файлы в корневом оглавлении интересующего вас диска и запрашиваете "Сведения" для помеченных объектов (см. рис. 3). И на этот раз вам предоставляется возможность полюбоваться на процесс подсчета объема накопленной вами информации и получить второе число для нашего расчета. В моем случае оно равно 315 мегабайтам (330,428,528 байт).

Если кто-то не верит, что всего за несколько секунд машина успела столько пересчитать, можете убедиться, что выданное ею число не кратно 16,384 байтам (размер кластера). А раз так, то понятно, что вычислено оно путем сложения длин файлов, а не по данным их FAT.

Итак, оба числа есть, пора узнать точную сумму потерь. У меня получилось 44 мегабайта. Как я и говорил, немного больше прогнозируемого среднего значения. Это не так уж и мало, согласитесь.

Это способ для тех, у кого есть Windows 95. Я, честно говоря, хоть и не нахожу эту систему верхом совершенства, считаю тем не менее, что она значительно удобнее предшественниц и обладает куда более широкими возможностями. Аналогичный по идее способ определения потерь для Windows 3.х, например, я сразу, навскидку, назвать не могу. Про DOS и вообще разговор скучный. Но это не самое главное. Если вы поняли, в чем суть, посмотрите внимательно на появляющиеся перед вами цифры и найдете подходящий вариант.

Надо только, наткнувшись на то, что не бьют выдаваемые машиной цифры, не спешить усомниться в ее умственных или арифметических способностях, а предположить, что есть еще одно слагаемое, вам не показанное. И тогда, если вы станете искать, не только разберетесь в том, что творится на вашем компьютере, но, не исключено, получите новый интересный инструмент управления им.

После того как узнаете точный или прогнозируемый ущерб, у вас закономерно появится желание прекратить этот бардак. И для этого имеются Способы.

Один вариант - перейти на более крутую FAT-систему. Более простой вариант - создать несколько дисковых томов. Сделать это или за счет разбивки винчестера на разделы и логические тома (требует полной перестановки софта и не дает возможности переиграть размеры разделов) или путем создания виртуальных компрессированных томов с помощью, например, Drive Space.

При компрессированном диске, естественно, незначительно снизится скорость обмена с ним и возрастет риск потери информации при сбое (полетит один здоровенный файл - образ сжатого диска - накроются все записанные на него файлы). Это пассив. В активе - увеличение емкости винчестера, ликвидация потерь и возможность легко изменять объем томов без уничтожения файлов, "на лету".

Лично мне более симпатичен вариант сжатого диска. Я таковым (созданным Drive Space 3 из набора MS Plus! for Windows 95) пользовался свыше года и ни разу не столкнулся с проблемами. Надо просто поддерживать все диски - как физические, так и логические - в приличном состоянии, регулярно сканировать их на ошибки и оперативно устранять проблемы. Тогда вероятность того, что "винт посыплется", снизится до минимума.

Если сейчас я обхожусь без него, то это временно и связано с переходом на новую машину, процесс обживания которой еще не кончился. Однако в скором времени я, очевидно, опять поставлю DriveSpace'овский диск, и как раз подвернется случай поговорить об этом подробнее.

Роман Соболенко

© Компьютерная газета