Шарим память пингвина (использование раздела swap для windows)
Роман (rtg) ЕПИШЕВ
yepishev@ukr.net
Все началось примерно месяц назад, когда места на жестком диске для виртуальной памяти Windows стало катастрофически не хватать (HDD все еще 3 Гб, и это в наше время :-)). Linux же, напротив, работал без «тормозов» — у него был свой раздел подкачки, который я заботливо создал еще до установки. Существовало два выхода: или увеличить раздел Windows за счет раздела Linux (никогда! :-)), или же заставить Windows использовать этот самый свап-раздел. Но Windows этот раздел в упор не видела...
Я начал просматривать HOWTO (документы, в которых одни линуксоиды описывают решение проблем других линуксоидов, обычно /usr/share/doc/HOWTO) и таки нашел то, что искал: Swap-Space-miniHOWTO . Рекомендации этого документа я испробовал самолично; без лишней скромности скажу, что намного все упростил и теперь представляю вам свою инструкцию.
Уничтожаем еще один аргумент противников Linux — отдельный swap-раздел «только для Linux».
В чем суть?
Обе операционные системы при нехватке ОЗУ начинают использовать
виртуальную память (swap — «обменивать», в компьютерной терминологии swap file — файл подкачки) на жестком диске (у меня сложилось мнение, что Windows начинает писать в своп-файл информацию уже при загрузке). В большинстве случаев на одном компьютере одновременно исполняется только одна ОС, а после завершения работы любой из swap представляет собой кучу мусора — сохранять нет смысла. За тип раздела (Windows FAT16 или Linux Swap) отвечает всего лишь несколько первых секторов этого раздела, которые можно перезаписывать (читай: изменять файловую систему). Наша задача — заставить Linux при загрузке создавать для себя swap-раздел, а при выгрузке — восстанавливать энное количество секторов, тем самым превращая Linux Swap снова в FAT16.
Скрипты работают так: при загрузке проверяется, следует ли Linux создавать Swap-раздел или же использовать уже имеющийся (последнее происходит, когда при работе в Линуксе компьютер «падает», или если выключили электричество). Второй скрипт будет работать при завершении сессии в Linux и восстанавливать информацию для Windows.
Ни я, ни МК не несут ответственности за возможную порчу информации при соблюдении или не соблюдении всех инструкций.
Что нужно:
u2022 права root (суперпользователя) и его пароль. Все дальнейшие действия будем производить с root-аккаунта;
u2022 программа
mkdosfs (make DOS filesystem — создать файловую систему DOS, входит в стандартный пакет любого дистрибутива);
u2022 любой текстовый редактор и примерно полчаса драгоценного свободного времени.
Начинаем
Для начала следует уяснить, хватит ли Windows объема диска подкачки. Если вы работаете с приложениями, жадно пожирающими оперативную память (сама Windows, например), то чем больше вы выделите, тем лучше. У меня 152 Мб реальной памяти, и свопа в 100 Мб хватает обеим ОС сполна. Скажу даже, что такой объем памяти позволяет запустить (и работать) восемь Word’ов, восемь Excel’ей, Outlook, два Far Manager’а и три Сапера. Если вы посчитаете, что этого вам недостаточно (нужен еще один сапер?), то придется или увеличить раздел подкачки, или отказаться от этой затеи вообще.
Следующие скрипты нам будут жизненно необходимы в работе:
Файл swapinit.sh
Файл swaphalt.sh
Файл info.sh
Делаем их исполняемыми (chmod +x swap* info.sh). Файлы swapinit.sh и swaphalt.sh помещаем в директорию /etc/rc.d/init.d/.
Все, подготовка окончена, приступаем к делу. Привожу инструкции «шаг за шагом». Чтобы не получилось никаких глюков, все действия очень желательно производить в «голой» консоли (меньше нагрузка на память). Если вы абсолютно незнакомы с такой темной лошадкой как Консоль или ее эмуляторами
xterm,
konsole в KDE или
эмулятором терминала в GNOME, почитайте статьи «Консоль для линуксоида» Петра Roxton’а Семилетова. Все равно от командной строки вам никуда не деться.
0. Входим в систему как root. Если вы сейчас рядовой пользователь, используйте команду su:
и введите пароль.
1. Создаем символическую ссылку с вашего раздела свап на /dev/winswap. Эта ссылка используется в скриптах, к тому же при изменении расположения Swap раздела достаточно будет изменить только ее. Если не знаете, как зовут ваш swap-раздел, ни в коем случае не пользуйтесь методом научного тыка — опасно для жизни и здоровья информации на винчестере! Лучше откройте файл /etc/fstab, там найдите строчку, содержащую слово swap (
Рис. 1), — первые несколько символов (до пробела) будут именем вашего swap-раздела:
2. Отключаем swap Линукса.
3. Делаем из своп-раздела DOS-диск и параллельно присваиваем ему необходимую метку (ключ -n). Необходимую потому, что по наличию этой метки наши скрипты будут определять свои действия:
4. Перезагружаем компьютер.
5. Переходим туда, где сидит msinfo.sh, запускаем:
Нас интересует только число специальных секторов (у меня 447, но обозначим его как XXX).
6. Набираем в консоли:
# dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz
Переписываем FAT с раздела в архив блоками по 512Кб. Вместо XXX вставьте свои цифры. При последующих выгрузках из Linux'а FAT будет восстанавливаться именно из этого архива.
Теперь начинаем править скрипты загрузки и выхода. Советую комментировать каким-то словом. Например:
# Pupkin {
# закомментированные операторы...
# }
Это для того, чтобы через месяц вы смогли найти измененные участки.
7. Переходим в каталог /etc/rc.d/. Там находим файл rc.sysinit. Этот файл отвечает за процесс загрузки системы.. Открываем его и ищем строчку (Рис.1)
'action "Activating swap partitions: " swapon -a' ("Активация разделов Swap")
Закомментируем ее и под нею напишем:
/etc/rc.d/init.d/swapinit.sh
Сохраняем.
8. Идем дальше, в /etc/rc.d/init.d/. Здесь сидит файл halt, он исполняется при перезагрузке и выключении. Находим коментарий #Turn off swap, then unmount file systems.
После него идет команда размонтирования swap-разделов (Рис.2), после нее припишите:
/etc/rc.d/init.d/swaphalt.sh
Опять сохраняем.
Теперь есть два варианта: или же все заработает, или одно из двух. Надеемся на лучшее.
Перезагружаем компьютер и смотрим на сообщения. Если не появилась строка Пропуск восстановления, значит, пока все в порядке. Загружаем Linux снова и смотрим на реакцию. Не должно быть метки [СБОЙ] рядом с любой строчкой, содержащей слово «swap».
А теперь, войдя в систему, наберите команду free. Она выдает количество занятой/свободной памяти. Посмотрите на последнюю строчку (Рис.3). Если столбик Available («Доступно») для swap содержит значение, отличное от нуля, операция прошла успешно пациент будет жить! В противном случае пересмотрите все свои действия с самого начала и все символы в скриптах. Также проверьте, правильно ли вы присвоили метку: она должна содержать пробел SWAP SPACE.
Ну вот, Linux уже работает. Теперь осталось объявить Windows о наличии нового плацдарма для ее бесчинств: Пуск> Настройка> Панель Управления> Система (Windows+Break). На вкладке Быстродействие щелкните на Виртуальную память. Выберите новоявленный диск в качестве диска для виртуальной памяти и установите Максимум во втором окошке равным объему Swap-раздела (Рис.4). Подтвердите свое желание в следующем диалоге.
После перезагрузки вновь войдите в Windows и найдите на диске файл подкачки win386.swp (может находиться в C:\WINDOWS\ (в WinME он продублирован в папке C:\_RESTORE) и называться win386.swp.0). Удалите его он нам больше не понадобится. Если файлов нигде не видно, включите Показывать скрытые файлы и папки в Свойствах папки. Вообще, этот файл теперь должен быть только в одном экземпляре и только на разделе с меткой SWAP SPACE.
Внимание!
Если у вас произошел сбой системы, и пришлось перезагружать компьютер кнопкой имени RESET, при последующей загрузке Windows она не обнаружит swap-раздел, а найдет либо еще один логический диск винчестера, либо попытается использовать ваш CD-ROM (в этом случае она создаст скорее всего в своем корневом разделе файл win386.swp, а вот ярлыки действительно попутает прим.ред.) Если все-таки случилось такое горе загрузите Linux и выйдете из него при выходе необходимая Windows информация будет восстановлена.
Откат назад
Если вам не понравился результат, поставьте все на место в файлах /etc/rc.d/sysinit, /etc/rc.d/init.d/halt. После этого наберите:
# swapoff /dev/winswap
# mkswap /dev/winswap
# swapon /dev/winswap.
И в Windows выставьте параметры по умолчанию.
Вот все и получилось (надеюсь). Но задним числом возникает вопрос: кому мы лучше сделали? Напрашивается ответ: Windows. Неправильно! Лучше мы сделали самим себе. После внедрения этой «штучки» меня перестали досаждать наглые сообщения Windows об отсутствии свободной памяти. Жесткого места на диске стало больше, вся система работает стабильно, без глюков, а это ведь главное, товарищи!
P.S. Может показаться, что статья полезна только для владельцев небольших винчестеров никто (кроме здравого рассудка) вам не помешает сделать SWAP и на 2Гб. К тому же вы ставите обе операционки в равные условия, и это позволяет сравнить их. Приведу пример из моей жизни. На день пришлось одолжить другу 128Мб своей (компьютерной) памяти, и остались у меня на материнке 32Мб, а в системе 24 (8 ушло на встроенную «видяху» ). Windows Millennium без файла подкачки запустила обои для рабочего стола и зависла, сказав, что следует выгрузить ненужные программы (сама такая!) Linux загрузился в текстовом режиме. Ради чистоты эксперимента я скомандовал: swapoff -a, и отключил раздел подкачки. После этого я спокойно мог читать анекдоты в vi и работать с .rar-архивами в mc. До X'ов дело, конечно, не дошло за три минуты загрузилась только заставка KDE. Я просто нажал Alt+F1, выключил менеджер окон: killall xdm, и продолжил чтение анекдотов…