Как ОС Windows, так и ОС Linux
используют так называемую подкачку, чтобы восполнить нехватку
оперативной памяти. Когда компьютер выключен, область подкачки содержит
ненужные данные и любой ОС не важно, что в действительности находится в
области подкачки. Вопрос состоит в следующем: поскольку в один момент
времени работает только одна из ОС, возможно ли, чтобы Windows и Linux
использовали одну и ту же область на диске для подкачки. Некоторая
сложность состоит в том, что Windows использует для подкачки файл, а
Linux - для этих же целей раздел на диске. (Конечно, и в Linux возможно
использовать для подкачки файл, но этого делать не рекомендуется). Если
попытаться выделить отдельный раздел для подкачки и разместить там файл
подкачки Windows, а затем запустить Linux, которая будет использовать
тот же раздел для тех же целей, то будет перезаписан загрузочный сектор,
FAT и другие таблицы, и при загрузке Windows эта ОС, потеряв файл
подкачки на этом разделе, не долго думая создаст его на своем
загрузочном диске.
Поэтому для решения этой задачи нам необходимо сохранять важные с точки
зрения Windows данные с начала раздела подкачки в каком-нибудь файле,
находящемся в разделе Linux. А при каждом запуске Linux надо будет
проверить, кем в последний раз использовалась область подкачки - Linux
или Windows. Если это был Linux, то просто разрешается подкачка, в
противном случае надо будет сохранить служебные данные с начала раздела
в файле, создать раздел подкачки на диске командой mkswap /dev/winswap и
затем разрешать подкачку. И теперь мы готовы настроить систему на
использование общей области подкачки. Правда, стоит отметить, что при
современных объемах винчестера это не столь актуально, но придает некую
завершенность совместному размещению Windows и Linux на одном винчестере
вашего компьютера.
Процедура на самом деле не сложна и требует выполнения следующих шагов:
1. Загружаемся в Linux, отключаем файл подкачки, отредактировав
файл /etc/fstab (закомментировав все строки, которые его описывают).
2. Перезагружаемся в Windows и форматируем раздел, на котором
будут находиться файлы подкачки Windows и раздел подкачки Linux в
FAT16.
3. В Windows устанавливаем файл подкачки фиксированного
размера на этот раздел.
4. Поскольку содержимое файла подкачки неважно, достаточно
сохранить загрузочный сектор, сектора с FAT и корневой каталог, так
называемые специальные сектора. Количество секторов, которые надо
сохранить определяется по формуле: T = r + (s * f) + (d / 16)
где: r - Reserved Sectors; f - Number of FATs; s - Sectors per FAT; d -
Root entries
В нашем случае: T = 1 + (251 * 2) + 512 / 16 = 535
Значения, используемые в формуле можно получить, используя любой
дисковый редактор. Главное, чтобы он мог видеть все пространство вашего
диска. Можно воспользоваться DiskEdit из пакета Norton Utilities 2002
или штатным дисковым редактором Win'2k - Disk Probe, для чего нужно с
дистрибутива Windows из папки SupportTools установить дополнительные
инструменты, в том числе установится и Disk Probe. Подойдет и утилита
PartitionInfo из пакета Partition Magic, для вызова которой надо
загрузить пакет Partition Magic, выделить раздел, нажать правую кнопку
мыши и выбрать соответствующий пункт контекстного меню Info, а в
открывшемся окне выбрать вкладку - FAT Info. Автор воспользовался двумя
последними программами.
5. Определим точный размер раздела подкачки, воспользовавшись
одним из дисковых редакторов. Если ваш выбор - Disk Probe, то значение
поля Large sectors умножьте на значение поля Bytes per sector, то есть
256977 * 512 = 131572224 Byte. Или же воспользовавшись утилитой
PartitionInfo из пакета Partition Magic на вкладке Partition Info
найдите значение Total physical sectors 256977 и умножьте его на
своеобразный стандарт для жестких дисков - 512 Byte и получите тоже
значение, что и при использовании Disk Probe - 131572224 Byte. Я
показываю использование двух разных инструментов в связи с
ответственностью этих вычислений и исключения возможных ошибок.
6. Перезагружаемся в DOS и удаляем каталог RECYCLED, конечно он
при загрузке Windows появится снова, но это будет уже не важно. (Не
совсем понятно зачем... -- прим. редактора)
7. Загружаемся в Linux, и входим в него как root.
8. При необходимости, используйте команду fdisk, чтобы узнать
название раздела и его размер в блоках (в моем случае hda5 и размер
256977 блоков).
9. Поскольку название этого раздела может попасть в
конфигурационные файлы в разных местах, создаем символьную ссылку
/dev/winswap, указывающую на этот раздел, следующей командой:
# ln -s /dev/hda7 /dev/winswap
(Обратите внимание на какой раздел делать сим.линк, здесь он hda7, у вас
же может быть совсем другим -- прим. редактора)
10. Для
создания копии специальных секторов в сжатом виде в файле
/etc/winswap.gz в приглашении командной строки наберите:
# dd if=/dev/winswap bs=512 count=T | gzip -9 >
/etc/winswap.gz
где T - число так называемых специальных секторов (в нашем случае 535),
вычисленных в п.4).
11. Подготовим два отдельных файла, под названиями swapinit.sh и
swaphalt.sh. Примеры этих файлов, которые будет работать в Red Hat
Linux, даны в приложении. Поместите эти файлы в каталог /etc/rc.d/init.d
Проставьте им флаг "исполняемых" командами:
# chmod +x
swapinit.sh
# chmod +x swaphalt.sh
12. Проверим имя файла инициализации системы, скорее всего это
будет /etc/rc.d/rc.sysinit Он должен, содержать команду "swapon -a",
вместо этой команды добавьте следующую строку:
/etc/rc.d/init.d/swapinit.sh
В зависимости от того, где находится команда swapon, заменяем ее в
скрипте swapinit.sh на команду /etc/swapon, если она в каталоге /etc,
или же на /bin/swapon - если она в каталоге /bin. То же самое сделаем с
командой mkswap.
13. Проверим имя скрипта завершения работы системы, скорее всего
это будет файл /etc/rc.d/init.d/halt. Обычно в этом файле будет команда
"swapoff -a". Замените эту команду на "swapoff /dev/winswap".
14. Добавьте следующие строки в этот скрипт. Поместите эти строки
после всех команд, которые могут потребовать подкачку. Проверьте, что
если скрипт завершения работы автоматически находит все разделы подкачки
и отключает их, то не требуется заменять команду swapoff $SWAPS на
swapoff -a. В этом случае, просто добавьте команду
/etc/rc.d/init.d/swaphalt.sh к файлу /etc/rc.d/init.d/halt [ -x
/sbin/accton ] && /sbin/accton /etc/rc.d/init.d/swaphalt.sh
15. Включаем подкачку в Linux, убрав комментарий со строки с
разделом подкачки в файле /etc/fstab (который вы добавили ранее). Это
конечно необязательно, так как больше не используется /etc/fstab для
задания разделов подкачки. Также нет никакой необходимости добавлять
/dev/winswap в файл /etc/fstab. Вероятно, это вообще нельзя делать.
16. Перезагрузите Linux.
17. Однако если Linux аварийно завершит работу без выполнения
/etc/rc.d/init.d/halt, то вам придется перезагрузиться, загрузить Linux
и выйти из него. Или же загрузившись в Windows, отформатировать раздел
подкачки в FAT16 и перенести на него файл подкачки.
Приложение 1. Скрипт swapinit.sh
Этот скрипт инициализирует область подкачки на разделе1.
Приложение 2. Скрипт swaphalt.sh
Этот скрипт сначала проверяет сигнатуру области подкачки Linux, а затем
восстанавливает на разделе файловую систему Windows.