Мини-HOWTO: Раздел подкачки Linux

Rahul U. Joshi

     jurahul@hotmail.com
   

Перевод: Станислав Рогин, SWSoft Pte Ltd.

Версия 1.41, 9 декабря 1999

В этом документе содержится информация о том, как использовать раздел подкачки (swap partition) вашего Linux совместно с Windows.


Содержание
1. Введение
2. Что вам понадобится
3. Изменения и дополнения
4. Административные упоминания
4.1. Copyright
4.2. Авторские права
4.3. Ответственность
5. Перед тем, как вы начнете
6. Процедура
6.1. Отключите подкачку и создайте DOS-раздел
6.2. Укажите Windows местонахождение нового файла подкачки
6.2.1. Windows 3.1
6.2.2. Windows 95/98
6.3. Сделайте резервную копию "Набора Специальных Секторов"
6.4. Исправьте скрипты загрузки и выключения для поддержки новой конфигурации
6.5. Включите подкачку
7. Пара замечаний
8. Что же мы сделали на самом деле?
9. Скрипт swapinit.sh
10. Скрипт swaphalt.sh
11. Скрипт msinfo.sh
12. Изначальный файл msinfo
13. Замечания для читателей версии 1.4 этого документа
14. Благодарности, отзывы и посвящения

1. Введение

Многие используют Linux и MS-Windows вместе. Возможность делать это - одно из условий "Linux-революции"; т.е. дать людям возможность экспериментировать с Linux (и привыкнуть к нему), сохраняя способы запускать их старые программы. Так как и Linux, и MS-Windows используют виртуальную память с подкачкой на диске, очень часто в конференции comp.os.linux.setup возникает вопрос "Как совместно использовать область подкачки", с целью сократить используемое дисковое пространство.

Существует несколько различных методов разделения областей подкачки - тот, который описывается в этом документе, видимо, самый сложный - но это единственный способ, достигающий максимального быстродействия в обеих системах без риска потерять данные на диске. Если вы используете DOS, то должны знать, что многие DOS-приложения также создают свои файлы подкачки. Можно использовать для этого раздел подкачки Linux так же, как и для Windows.

Предостережение

Внимание: В случае, если вы использовали советы старой версии этого документа (1.4), и сейчас ваш SCANDISK выдает ошибку на диске X:, прочтите раздел "Замечания для читателей версии 1.4 этого документа" , написанный специально для того, чтобы вы восстановили все в нормальное состояние.


2. Что вам понадобится

У всей этой процедуры очень немного требований. Однако, я настоятельно рекомендую, чтобы все эти требования были обязательно выполнены, т.к. с более старыми версиями возникают проблемы. Итак, потребуются:

  1. MS-DOS 5.0 или новее с MS-Windows 3.1/3.11 ИЛИ MS-Windows 95/98

  2. Программы shutdown/init, умеющие запускать файлы в процессе загрузки и выключения. (Пакет SysVinit-2.50, например, может это делать. SysVinit-2.50 можно найти на сайте sunsite.unc.edu в каталоге /pub/Linux/system/Daemons. Почти все нынешние дистрибутивы используют этот пакет.)


3. Изменения и дополнения

Изменения внесены Rahul U. Joshi

Дата: 26 ноября 1999


4. Административные упоминания

4.1. Copyright

Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.

If you have questions, please contact Tim Bynum, the Linux HOWTO coordinator, at linux-howto@sunsite.unc.edu via email.


4.2. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

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

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу


4.3. Ответственность

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

Этот документ распространяется "как есть". Я постарался описать весь процесс как можно точнее, но вы используете данную информацию на свой страх и риск. Я ни в коем случае не отвечаю за любые повреждения, явившиеся результатом использования этой информации.

Если вы планируете включить этот HOWTO в какой либо дистрибутив или использовать в печати, я буду рад получить уведомление об этом. В этом случае я могу предоставить вам последнюю версию этого документа.


5. Перед тем, как вы начнете

Этот документ не является пошаговой инструкцией. Предполагается, что читатель сначала изучит весь документ, чтобы быть осведомленным о различных подводных камнях и возможных трудностях. После того, как вы получите четкое представление о том, какие шаги будут вами предприняты, вы можете начать следовать инструкциям этого документа пошагово. Так как вы будете root-ом и вам предстоит изменять системные файлы инициализации, будьте осторожны с тем, что собираетесь делать. Пишите в этих файлах комментарии к тем секциям, которые добавляете, а когда хотите убрать секцию, не удаляйте ее - просто закомментируйте. (В скриптах комментарии начинаются с символа #). В случае, если что-то пойдет не так, вы сможете восстановить исходную конфигурацию, просто убрав те изменения, которые внесли. Несмотря на то, что вы не обязательно должны хорошо знать синтаксис скриптов, и то, что я дал в этом документе все, что необходимо, небольшие познания в этом вопросе могут быть полезны, как со стороны понимания, так и со стороны поиска ошибок.


6. Процедура

Предостережение

ВНИМАНИЕ: Эта глава написана с учетом особенностей RedHat Linux 6.0 Несмотря на то, что общие принципы, описанные здесь, применимы ко всем дистрибутивам, некоторые детали могут отличаться. Я приветствую любые отзывы с описанием деталей процедуры для других дистрибутивов. У многих пользователей существует раздел подкачки, выделенный специально для Linux. Я предполагаю, что вы - один из них.


6.1. Отключите подкачку и создайте DOS-раздел

  • Загрузите Linux. Отключите подкачку, отредактировав файл /etc/fstab, закомментировав в нем строки, описывающие раздел подкачки.

  • Используя команду fdisk в Linux, удалите раздел подкачки, таким образом освободив дисковое пространство.

  • Загрузите DOS. Создайте DOS-раздел (используя команду FDISK) с необходимым вам размером. Если вы не можете создать такой раздел (например, если DOS FDISK сообщает о том, что "в расширенном разделе все пространство занято под логические диски"), можно использовать fdisk или cfdisk из Linux для создания этого раздела. Вы даже можете просто сменить тип раздела подкачки с 82h (Раздел подкачки Linux) на 06h (FAT16). В этом случае не придется удалять этот раздел, а просто сменить тип.

  • После того, как создали раздел, загрузите DOS, если вы еще не в DOS. DOS выделит новому разделу букву диска. Используйте эту букву вместо X везде в этом тексте, где встретите команды типа "LABEL X:" или "COPY FOO X:DUMMY.DAT"

  • Отформатируйте этот раздел DOS-командой FORMAT.

     C:\>FORMAT X: 

  • Установите метку тома на эту новую "ОБЛАСТЬ ПОДКАЧКИ", используя DOS-команду LABEL. Проверьте правильность ее установки командой DIR. Проделайте это, как отдельный шаг. Некоторые версии FORMAT не устанавливали метку тома в загрузочный сектор, хотя должны были это делать. [Замечание: некоторые писали мне, что метка тома хранится в корневом каталоге. Это верно, но, начиная с DOS 5.0, она хранится также в загрузочном секторе.]

    C:\>LABEL X:
    C:\>DIR X:  

  • На этой фазе вы имеете готовый DOS-раздел для подкачки.


6.2. Укажите Windows местонахождение нового файла подкачки

6.2.1. Windows 3.1

  • Запустите Windows. Перейдите в Панель Управления (Control Panel), выберите пункт "386 расширенный" ("386 Enhanced"). Выберите "Виртуальная память" ("Virtual Memory") и создайте постоянный файл подкачки на диске X: максимально возможного размера (Его вам укажет Windows). Windows может пожаловаться, что не сможет использовать такой большой файл подкачки. Не обращайте на это внимания и все равно создайте файл.

  • Выйдите из Windows.


6.2.2. Windows 95/98

  • Запустите Windows. Перейдите в "Панель Управления" (Пуск| Настройка | Панель управления). Выберите пункт "Система". (В это окно можно попасть проще: нажмите Win+Break) В диалоговом окне "Свойства системы" выберите пункт "Быстродействие". Нажмите кнопку "Виртуальная память". На экране появится диалог настройки параметров виртуальной памяти. Выберите пункт "Я хочу задать параметры виртуальной памяти самостоятельно". Выберите диск, на котором хотите иметь разделенный с Linux раздел подкачки (X:). Оставьте максимальные и минимальные значения такими, какими их установит Windows. Нажмите OK. Windows попросит вас перезапустить компьютер. Так и сделайте.

  • После того, как вы перезапустите Windows, увидите, что на диске X: появился файл win386.swp. В дополнение к этому появился каталог Recycled. По той причине, что вы не собираетесь хранить другие файлы на этом диске, и одного файла будет более, чем достаточно (да и тот не жалко, в случае чего), укажите Windows не поддерживать корзину на этом диске (X:). На рабочем столе нажмите правую кнопку мыши на корзине и в открывшемся меню нажмите Свойства. На экране появится диалог настройки Корзины. Нажмите на закладку "Глобальные" и выберите "Независимая конфигурация дисков". После этого выберите диск X: drive (у которого будет метка SWAP SPACE). В этом диалоге сдвиньте указатель "Предельный объем корзины" на 0 процентов. В графе "Зарезервированное место" должно быть написано 0 байт. Нажмите ОК и перезагрузите компьютер.

  • Казалось бы: раз вы больше не поддерживаете корзину для диска X, то Windows каталог RECYCLED там больше не нужен, и она могла бы его удалить. Она не только не удаляет его, но и не разрешает вам сделать это. Как я говорил раньше, нам этот каталог не нужен, и мы хотим, чтобы на диске X: был только файл win386.swp. Чтобы удалить ненужный каталог, перезагрузите компьютер в Режиме Эмуляции MS-DOS. Выберите Пуск | Завершение работы | Перезапуск компьютера в режиме MS-DOS, или в момент загрузки Windows нажмите F8, и из появившегося меню выберите пункт "Command Prompt only". Попав в режим MS-DOS, выполните следующие команды:

    C:\>X:
    X:\>ATTRIB -R -H -S RECYCLED
    X:\>DELTREE RECYCLED

    Теперь на диске X: есть только один файл: win386.swp. Вы можете проверить этот факт, используя различные опции команды dir. Но это не означает, что каталог RECYCLED больше на диске X: не появится. Когда Windows загрузится и определит, что на диске X: нет каталога RECYCLED, то он его снова создаст. Однако, когда мы будем восстанавливать диск X: из Linux-а, он будет просто содержать один файл win386.swp. Если кто-нибудь знает способ избавиться от каталога RECYCLED в Windows, пишите мне.

  • Вас беспокоит "Очистка диска"?

    Если включена опция "Очистка диска", то иногда вы будете получать сообщения "Не хватает места на диске X:". Так как мы используем все пространство диска X: для подкачки, то нам это свободное место не нужно. Чтобы это предупреждение больше не появлялось запустите настройку Очистки Диска (Пуск | Программы | Стандартные | Служебные | Очистка диска). В появившемся диалоге выберите диск X: и нажмите OK. Появится диалоговое окно "Очистка диска X:". Нажмите пункт "Настройки" и отключите опцию "Если на диске останется меньше...".

Начиная с этого момента, Windows будет считать, что его диск подкачки - это диск X:. Поэтому диск X: должен быть доступен каждый раз при загрузке Windows. Если вы используете какие-нибудь дополнительные системные утилиты, например, Norton Utilities для Windows 95, то вам, наверное, придется прочитать документацию и настройки, чтобы эти утилиты знали об изменениях, иначе это может привести к ошибкам.


6.3. Сделайте резервную копию "Набора Специальных Секторов"

  • Загрузите Linux, и войдите в него как root.

  • Используйте команду fdisk, чтобы узнать название раздела и его размер в блоках. Создайте символьную ссылку /dev/winswap, указывающую на этот раздел. Например, если этот раздел - hda7, то наберите:

    # ln -s /dev/hda7 /dev/winswap 

    [ЗАМЕЧАНИЕ К ЛЮБИТЕЛЯМ ЧИСТОТЫ: Пожалуйста, используйте символьную ссылку. Название этого раздела попадет в некоторые конфигурационные файлы и несоответствия могут привести к фатальным результатам.]

  • Узнайте размер "Набора Специальных Секторов" для диска подкачки. Это ничто иное, как общее количество секторов, требуемое на загрузочный сектор, FAT и корневой каталог. Существует несколько способов узнать это число. Наиболее простой - использовать Разд. 11. Используйте следующие команды:

      
    # cp Swap-Space-HOWTO msinfo.sh 
    # chmod +x msinfo.sh 

    (Кстати, это значительно проще сделать в редакторах из KDE или GNOME)

    Откройте файл msinfo.sh file, в редакторе удалите все строки, кроме файла msinfo.sh из раздела 8. После этого запустите его командой

     
    # ./msinfo.sh /dev/winswap 

    Эта программа выдаст информацию о разделе подкачки. Запишите число под названием "Общее количество специальных секторов", и проверьте, чтобы метка тома называлась "SWAP SPACE". Если это не так, то перезагрузитесь в DOS и перезапустите команду LABEL

  • Замечание: Вы также можете определить это число утилитами, показывающими содержание загрузочного диска, например, Norton Disk Editor или minfo из пакета mtools в Linux. В Norton Disk Editor, выберите пункт "Boot Sector" в меню Object. Запишите следующие числа:

    Reserved Sectors at beginning : r
    FAT Copies                    : f
    Sectors per FAT               : s
    Root directory entries        : r

    Теперь, "Общее количество специальных секторов" будет равно

    T = r + (s * f) + (d / 16)

    Однако, использовать программу из этого HOWTO значительно проще.

    Запишем "Общее Количество Специальных Секторов", как XXX.

  • [Необязательный шаг] Windows может оставить на этом разделе немного свободного места, даже если ему указать не делать этого. Не пытайтесь использовать свободное место, так как оно будет уничтожаться при каждом запуске Linux. Если вы хотите избежать случайного использования этого места (с последующей потерей данных), создайте на нем поддельный файл, заполняющий эту пустоту, используя следующие команды:

    mkdir /mnt 
    mount -t msdos /dev/winswap /mnt 
    dd if=/dev/zero of=/mnt/dummy.fil 
    umount /mnt   

    оманда dd выдаст сообщение "No space left on device" (На устройстве не осталось места). Это именно то, что нам нужно.

  • В приглашении командной строки наберите:

     
    # dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz 
                                      ^^^

    ... где XXX надо заменить на "Общее количество специальных секторов".

    Таким образом, мы создали резервную копию всех специальных секторов в компрессированной форме в файле /etc/winswap.gz


6.4. Исправьте скрипты загрузки и выключения для поддержки новой конфигурации

  • Теперь мы исправим наши инициализационные скрипты, чтобы область подкачки создавалась при каждом запуске Linux, и специальные сектора DOS/Windows восстанавливались каждый раз при завершении работы Linux.

  • Вместо того, чтобы вставлять команды, отвечающие за эту часть процедуры, прямо в инициализационные скрипты, мы подготовим два отдельных файла, под названиями swapinit.sh и swaphalt.sh. Пример этих файлов, который будет работать в Red Hat Linux, дан в приложениях к этому документу. Вы можете поместить эти файлы в любой каталог, но наиболее предпочтительным будет /etc/rc.d/init.d. Создайте два файла в этом каталоге и скопируйте туда скрипты, приведенные в приложениях. Самый простой способ - скопировать этот документ в файлы командами

     
    # cp Swap-Space-HOWTO  /etc/rc.d/init.d/swapinit.sh
    # cp Swap-Space-HOWTO  /etc/rc.d/init.d/swaphalt.sh

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

    # chmod +x swapinit.sh
    # chmod +x swaphalt.sh

  • Запустите fdisk и найдите в нем размер раздела подкачки. В обоих файлах (swap????.sh) замените YYYYY на это число.

  • Проверьте имя скрипта завершения работы системы. В SysVinit этот файл указан в /etc/inittab; добавьте ссылку на него, если там ее нет.

    # Уровень запуска 0 означает завершение работы системы
    
    l0:0:wait:/etc/brc 

    (В Red Hat Linux, это, скорее всего, будет файл /etc/rc.d/init.d/halt) Если вы не в состоянии выяснить это, поищите в каталоге /etc файл, содержащий команду "swapon -a" command. Достаточно об этом!

    Далее в тексте я буду предполагать, что это все-таки файл /etc/rc.d/init.d/halt (для краткости halt).

  • Проверьте название файла инициализации системы. В SysVinit этот файл также указан в /etc/inittab.

         
    # Инициализация системы
    
    si::sysinit:/etc/rc.d/rc.sysinit 

    Имя файла может отличаться, если у вас не Red Hat. Я предполагаю, что это файл /etc/rc.d/rc.sysinit (для краткости rc.sysinit)

  • Добавьте следующие строки в файл инициализации системы (rc.sysinit), вместо команды "swapon -a". Я бы советовал вам не удалять эту команду, а просто закомментировать ее, чтобы восстановить скрипт в исходное состояние, если что-то пойдет не так.

    Если ваша команда swapon находится в каталоге /etc, замените команду /sbin/swapon на /etc/swapon. Если она в /bin, замените на /bin/swapon. Проделайте то же самое с mkswap.

    # ----------------------------------------------------------------------- 
    # строки удалены ФИО 
    # Запускаем подкачку.
    # action "Активизируем разделы подкачки" swapon -a 
    # ----------------------------------------------------------------------- 
     
    # ---------------------------------------------------------------------- 
    # строки добавлены ФИО 
    # Проверяем и инициализируем область подкачки
    # 
    /etc/rc.d/init.d/swapinit.sh 
    # ---------------------------------------------------------------------- 

  • Самый простой путь вставить текст в файл - это использовать две виртуальных консоли. Зарегистрируйтесь на обеих как root . Используйте свой любимый редактор, чтобы открыть это HOWTO на одной консоли, и модифицируемый скрипт на второй. Выделите кусок скрипта, приведенный выше, мышью и переключитесь на вторую консоль. Установите курсор в желаемую позицию и нажмите правую кнопку мыши. Выделенный ранее текст будет вставлен в скрипт.

  • Добавьте следующие строки в ваш скрипт завершения системы (halt). Поместите эти строки после всех команд, которые могут потребовать подкачку. Обычно, в этом файле будет команда "swapoff -a". Сначала замените -a на /dev/winswap. Затем, сразу после этой строки вставьте следующие команды.

    Предостережение

    Замечание для RedHat Linux 6.1: По-видимому, скрипт завершения работы в Red Hat Linux 6.1 автоматически находит все разделы подкачки и отключает их. Поэтому пользователям RedHat Linux 6.1 не требуется заменять команду swapoff $SWAPS на swapoff -a. В этом случае, просто добавьте команду /etc/rc.d/init.d/swaphalt.sh к файлу halt

    # ------------------------------------------------------------------------ 
    # Изменено ФИО 
    # заменено "swapoff -a" на "swapoff /dev/winswap" 
    # 
    # Отключаем подкачку, затем отключаем фалйовые системы.
    runcmd "Отключаем подкачку и учет ресурсов" swapoff /dev/winswap 
    [ -x /sbin/accton ] && /sbin/accton 
    # ------------------------------------------------------------------------ 
     
    # ------------------------------------------------------------------------ 
    # Добавлено ФИО
    # проверяем сигнатуру области подкаки и восстанавливаем информацию о файле подкачки Windows
    /etc/rc.d/init.d/swaphalt.sh 
    # ------------------------------------------------------------------------


6.5. Включите подкачку

Уберите комментарий со строки с разделом подкачки в файле /etc/fstab (который вы добавили ранее). (Это конечно необязательно, так как мы больше не используем fstab для разделов подкачки). Перезагрузите Linux. У вас должна быть включена подкачка на новом устройстве подкачки.


7. Пара замечаний


8. Что же мы сделали на самом деле?


9. Скрипт swapinit.sh

Этот скрипт инициализирует область подкачки на разделе. Код, отвечающий за определение сигнатуры, повторяется 6 раз, так как сигнатура иногда правильно определяется со второго или третьего раза. (Основано на скрипте, приведенном в Swap-Space-HOWTO автора H. Peter Anvin)

#!/bin/sh 
# 
# swapinit.sh - активизируем раздел подкачки (activate the swap partition) 
# 
# автор Rahul U. Joshi, перевод Станислав Рогин
# Проверяем и инициализируем область подкачки (Verify and initialize swap space)
# 
 
echo -n 'Проверка области подкачки (Verifying swap space...)' 
 
loopcount=0
 
# Флаг, указывающий, активизирован ли раздел
# flag to indicate whether the partition has been activated or not)
activated=0 
 
# Проверяем сигнатуру до 6 раз
# check for signatures 6 times before giving up
while [ $loopcount -lt 6 ] 
  do 
 
  if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10  skip=4086`" = 'SWAP-SPACE' ]; then 
    echo "Сигнатура Linux обнаружена с $loopcount раза" 
    echo "Активация раздела подкачки"  
    echo "Linux signature found, iteration $loopcount" 
    echo "Activating swap partitions"  
    swapon /dev/winswap 
    activated=1 
    break 
 
  elif [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=11 skip=43`" = 'SWAP SPACE ' ]; then    
    echo "Сигнатура DOS обнаружена с $loopcount раза" 
    echo "Подготовка раздела подкачки"   
    echo "DOS signature found, iteration $loopcount" 
    echo "Making swap partition"   
    mkswap /dev/winswap YYYYY 
    echo "Активация раздела подкачки"  
    echo "Activating swap partitions"  
    swapon /dev/winswap 
    activated=1 
    break 
 
  else    
   let loopcount=loopcount+1 
  fi   
 
  done 
 
if [ $activated -ne 1 ] ; then 
  echo "Сигнатура не найдена после $loopcount попыток" 
  echo "Разделы подкачки не активизированы" 
  echo "Swap signature not found after $loopcount tries" 
  echo "No swapping partitions activated" 
  exit 1 
fi
 


10. Скрипт swaphalt.sh

Этот скрипт сначала проверяет сигнатуру области подкачки Linux, а затем восстанавливает на разделе файловую систему Windows.

(Основано на скрипте, приведенном в Swap-Space-HOWTO автора H. Peter Anvin)

 
#!/bin/sh 
# 
# swaphalt.sh   Этот файл вызывается из /etc/rc.d/init.d/halt           
#	       после того, как будут выключены учет ресурсов и подкачка
#
#               This file is executed through the /etc/rc.d/init.d/halt
#	       script after swapping and accounting has been turned off.
# 
# Автор:        Rahul U. Joshi        Перевод: Станислав Рогин
# 
 
# проверяем сигнатуру раздела подкачки и восстанавливаем таблицы данных Windows
 
loopcount=0 
 
# флаг, указывающий была ли восстановлена информация раздела подкачки Windows
# flag to indicate whether the swap info has been restored or not 
restored=0 
 
# проверяем сигнатуру до 3 раз (check for swap signature 3 times before giving up)
while [ $loopcount -lt 3 ] 
  do 
 
  if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" = 'SWAP-SPACE' ]; then 
    echo "Восстановление структуры раздела подкачки DOS/Windows ($loopcount-я попытка)"  
    echo "Restoring DOS/Windows swap info , iteration $loopcount)"  
    /bin/zcat /etc/winswap.gz  >  /dev/winswap 
    restored=1 
    break 
  else 
    loopcount=loopcount+1 
  fi 
 
  done 
 
if [ $restored -ne 1 ] ; then 
   echo "Сигнатура области подкачки не обнаружена после $loopcount попыток" 
   echo "Swap signature not found after $loopcount tries" 
   echo "Восстановление таблиц не произведено" 
   echo "Skipping restoring" 
fi
 
 


11. Скрипт msinfo.sh

Этот скрипт анализирует загрузочный сектор заданного раздела и выдает различную информацию, включая "Общее Количество Специальных Секторов". Скрипт предполагает, что на данном разделе установлена файловая система FAT16. Если это не так, он выдаст сообщение об ошибке и прекратит работу. Скрипт запускается следующим образом

 
# msinfo <наименование раздела> 
 

Для запуска этого скрипта вам понадобится программа "dialog", которая может выводить диалоговые окна на экран. Вы можете найти ее здесь.

#!/bin/sh 
# 
# msinfo.sh           Этот скрипт показывает содержание загрузочного
#                     сектора заданного раздела.
#                     This shell script displays the boot sector of the 
#                     given partition.
# 
# Автор:              Rahul U. Joshi 
# Перевод:            Станислав Рогин
# 
# Изменения           Убрано использование команды expr, замененной на команду let 
# Modifications       Removed the use of expr and replaced it by the let 
#                     command. 
 
 
# проверяем параметры командной строки
# check for command line arguments 
if [ $# -ne 1 ]; then 
   echo "Использование: msinfo <наименование раздела>" 
   exit 1 
fi 
 
# проверяем, является ли входной файл блочным устройством
# check whether the input name is a block device 
if [ ! -b $1 ]; then 
   echo "msinfo: $1 не является блочным устройством"
   exit 1 
fi 
 
# создаем два временных файла
# create two temporary files for use 
TMPFILE=`mktemp -q /tmp/$0.XXXXXX` 
if [ $? -ne 0 ]; then 
    echo "msinfo: Не могу создать временный файл, прекращаю работу..." 
    exit 1 
fi 
 
TXTFILE=`mktemp -q /tmp/$0.XXXXXX` 
if [ $? -ne 0 ]; then 
   echo "msinfo: Не могу создать временный файл, прекращаю работу..." 
   rm -f $TMPFILE 
   exit 1 
fi 
 
backtitle="`printf "%78s" "msinfo, Информация о файловой системе FAT16 -- Rahul Joshi"`" 
 
dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox "\nАнализирую загрузочный сектор $1\nПодождите..."  14 60 
 
# создаем пустой текстовый файл TXTFILE
# truncate TXTFILE to zero length 
echo > $TXTFILE 
 
# Получаем версию форматировавшей DOS
# get Formatting DOS version 
dd 2>/dev/null if=$1  bs=1 count=8 skip=3 | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %s\n" "Версия форматировавшей DOS" "`cat $TMPFILE`" 
 
 
# Получаем файловую систему
# get file system 
dd 2>/dev/null if=$1  bs=1 count=8 skip=54 | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %s\n" "Файловая система" "`cat $TMPFILE`" 
 
# проверяем, является ли файловая система FAT16 
# check if filesystem in a FAT16 
if [ "`cat $TMPFILE`" != "FAT16   " ]; then 
  dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox  "\nФайловая система $1 не является FAT16"  14 60 
  exit 2 
fi 
 
# Получаем метку тома из загрузочного сектора
# get volume label in boot sector 
dd 2>/dev/null if=$1  bs=1 count=11 skip=43 | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %s\n" "Метка тома в загрузочном секторе" "`cat $TMPFILE`" 
  
 
# Получаем размер сектора
# get Sector size 
dd 2>/dev/null if=$1  bs=1 count=2 skip=11| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %d\n" "Размер сектора" `cat $TMPFILE` 
sector_size=`cat $TMPFILE` 
 
 
# Получаем количество резервных секторов
# get Reserved sectors 
dd 2>/dev/null if=$1  bs=1 count=2 skip=14| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %d\n" " Резервные сектора" `cat $TMPFILE` 
reserved_sectors=`cat $TMPFILE` 
 
 
# Получаем количество секторов FAT
# get FAT sectors 
dd 2>/dev/null if=$1  bs=1 count=1 skip=16| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
fat_count=`cat $TMPFILE` 
 
dd 2/dev/null if=$1  bs=1 count=2 skip=22| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
sectors_per_fat=`cat $TMPFILE` 
 
# расчитываем количество секторов, занимаемых FAT
# calculate the no of sectors allocated for FAT's 
let fat_sectors=fat_count*sectors_per_fat 
 
printf >>$TXTFILE "%30s : %u (%u x %u) \n" "Секторов FAT" "$fat_sectors" "$fat_count" "$sectors_per_fat" 
 
 
# Получаем количество секторов в корневом каталоге
# get root directory sectors 
dd 2>/dev/null if=$1  bs=1 count=2 skip=17| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
root_sectors=`cat $TMPFILE` 
 
# расчитываем количество секторов, занимаемых корневым каталогом
# calculate the no of sectors allocated for root directory 
let root_sectors=root_sectors*32/sector_size 
 
printf >$TXTFILE "%30s : %u\n" "Секторов корневого каталога" "$root_sectors" 
 
 
# получаем Общее Количество Специальных Секторов
# get Total special sectors 
let total=reserved_sectors+fat_sectors+root_sectors 
printf >>$TXTFILE "%30s : %u\n" "Всего специальных секторов" "$total" 
 
 
# вывод информации
dialog --title "Загрузочный сектор $1"  --backtitle "$back_title"  --msgbox "`cat $TXTFILE`" 14 60 
  
# удаление временных файлов
# delete temporary files
rm -f $TMPFILE 
rm -f $TXTFILE 
 
# end of msinfo.sh


12. Изначальный файл msinfo

Здесь приведен файл msinfo, при помощи которого можно определить "Общее Количество Специальных Секторов". Он был включен первоначальным автором этого HOWTO в закодированной форме. Скопируйте текст, начиная со строки "begin 755 msinfo.gz" до строки "end" во временный файл, скажем temp.uu. Затем раскодируйте и разархивируйте этот файл, чтобы получить файл msinfo.

 
# uudecode temp.uu 
# gunzip  msinfo.gz  

Затем запустите программу командой

    
# ./msinfo /dev/winswap 
Эта программа показывает информацию из загрузочного сектора, включая "Общее Количество Специальных Секторов".
begin 755 msinfo.gz 
---------------------------------------------------------------------
   Примечание переводчика: В этом месте автором текста была приведена
   программа msinfo.gz в формате UUENCODE. Однако многократные
   преобразования этого HOWTO могли повредить этот файл. Даже если он не
   был бы поврежден, то он бы выводил сообщения на английском. Используйте
   скрипт из предыдущей главы.
---------------------------------------------------------------------
end 


13. Замечания для читателей версии 1.4 этого документа

Я, к сожалению, выяснил, что мои советы, данные в версии 1.4 этого документа содержали ошибку. Если вы использовали советы из версии 1.4 для настройки совместного использования пространства подкачки Linux и Windows и, в результате, получаете от ScanDisk сообщения об ошибках на диске X:, проделайте следующее:


14. Благодарности, отзывы и посвящения

Этот Mini-HOWTO в значительной степени отталкивается от документа Swap-Space Mini HOWTO (автор H. Peter Anvin). Я добавил сюда специфичные вещи для Windows 95/98. Программа msinfo, полученная из оригинального HOWTO, не работала на моей системе Red Hat Linux 6, я сделал подобную программу. Однако, я также включил сюда оригинальную программу msinfo. Спасибо всем людям, которые собрали превосходный дистрибутив Linux - Red Hat и особенно Sanjiv Guha - один из соавторов "Red Hat Linux 6 Unleashed". Спасибо Matt Welsh, Greg Hankins и Eric S. Raymond - авторам SGML-Tool's Users Guide, которые помогли мне конвертировать этот документ в SGML формат. Спасибо Peter Norton и John Goodman за издание "Peter Norton's Inside the PC", которое помогло мне разобраться в структуре файловой системы DOS.

Я полагаю, читатели, что этот HOWTO будет вам полезен. Если у вас появляться предложения, комментарии, исправления, вопросы, флейм и т.п., не стесняйтесь связаться со мной (jurahul@hotmail.com или amitanatu@sprynet.com).

Наконец, я хотел бы выделить работу Robert Lafore - автора замечательных книг "Программирование на C с использованием Turbo C++" и "Объектно-ориентированное программирование с использованием Turbo C++".

Наслаждайтесь Linux,

Rahul :-)