IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Больше места или сделаем swap общим...

Как сэкономить дисковое пространство, путем использования общего раздела подкачки различными операционными системами.

Андрей Клепча

Далее все действия выполняем от пользователя root. Создадим раздел, который будет использоваться как swap. Процесс создания подробнее описывать не буду - здесь вроде все должно быть понятно. Берется досовский или линуховый fdisk и - вперед (те кому не нравится fdisk могут пользоваться другими утилитами, например, parted, Partition Magic и т.д.). Форматируем этот раздел в FAT16 (мне кажется, что для windows свопа FAT16 более предпочтительный вариант, чем FAT32 в плане скорости и меньшего размера самой таблицы размещения файлов). Для форматирования можно использовать как штатные досовские средства, так и mkdosfs из пакета dosfstools. Partition Magic, если мне не изменяет память, сразу же сам форматирует создаваемый раздел;

Здесь и далее по тексту я предполагаю, что для свопа мы используем /dev/hda6. Вы, в свою очередь вместо него используете имя того раздела, который выделили под swap. Итак в командной строке Linux'а даем команду 'mount -t vfat /dev/hda6 /mnt/temp', чем монтируем /dev/hda6 в каталог /mnt/temp (естественно он должен существовать к этому моменту);

Затем забьем нулями содержимое этого досовского диска (зачем - расскажу позднее). Для этого скажем в командной строчке 'dd if=/dev/zero of=/mnt/temp/zeros'. Команда завершится сообщением о том, что на устройстве назначения больше нет места и сколько записей произведено;

На всякий случай отмонтируем /dev/hda6 командой 'umount /mnt/temp' (это может делать и не обязательно, но так мы будем уверены, что в кэше ничего не осталось и все нули дошли до адресата :). Теперь примонтируем его снова 'mount -t vfat /dev/hda6 /mnt/temp' и удалим файл zeros командой 'rm -f /mnt/temp/zeros'. Теперь опять отмонтируем /dev/hda6 ('umount /mnt/temp');
Теперь у нас есть раздел с пустой fat16 и нулями в области данных.
У меня нет информации о том, как рассчитать сколько занимает места на разделе таблица размещения для FAT16. На диске емкостью 250М мне хватало примерно пяти мегабайт (те кто заинтересован разобраться во всем до конца могут попробовать найти старую досовскую программу TechHelp - там наверняка будет информация о DOS FAT). Возможно и меньшее число могло бы быть использовано, но мне нравиться цифра 5 ;). Вы спросите зачем нам это нужно? Для того, чтобы после использования Linux'ом раздела /dev/hda6 для свопа, можно было бы легко восстановить на диске таблицу размещения файлов.

Командой 'dd if=/dev/hda6 of=/etc/winswap bs=1k count=5000' мы создадим копию нашей таблицы в файле /etc/winswap. Команда последовательно скопирует пять тысяч блоков (count=5000) размером в один килобайт (Block Size = 1К) с исходного устройства или файла (Input File) в устройство или файл назначения (Output File). Получившийся файл занимает почти 5 мегабайт. Но мы же очень жадные люди на мегабайты, верно? Поэтому мы говорим 'gzip -9 /etc/winswap'. В результате пятимегабайтный winswap превращается в пятикилобайтный(!) winswap.gz (помните, мы забили диск нулями, а это значит, что файл очень хорошо сожмется. Ключ -9 задает максимальный уровень компрессии).

Теперь настало время позаботиться собственно о пункте 1.г. Для этого открываем на редактирование файл /etc/init.d/halt и делаем поиск слова 'swap'. Вы увидите что-нибудь вроде:

# Turn off swap, then unmount file systems.
SWAPS=`awk '! /^Filename/ { print $1 }' /proc/swaps`
[ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS

Во всяком случае, так обстоит дело с RedHat. Если у вас другой дистрибутив, то, возможно, файл будет называться по-другому. Во всяком случае вы должны будете найти скрипт, куда можно будет вставить строчку так, чтобы она выполнилась _после_ отключения swap. А строчка будет такой:

zcat /etc/winswap.gz >/dev/hda6

Она восстанавливает таблицу размещения файлов на устройстве /dev/hda6 (точнее zcat выводит распакованное содержимое указанного ей сжатого файла в стандартное устройство вывода, но '>/dev/hda6' перенаправляет вывод на раздел где был swap). Итак о досовском диске для swap файла Windows позаботились. Пришло время позаботиться о Linux.

Открываем файл, где включаются swap разделы (для RedHat это - /etc/rc.d/rc.sysinit). Опять ищем 'swap'. Видим:

# Start up swapping.
action $"Activating swap partitions: " swapon -a -e

комментируем эту строчку и пишем новые:

action "Build swap on /dev/hda6" mkswap /dev/hda6 265041
action "Activating swap..." swapon /dev/hda6

265041 - размер раздела /dev/hda6 и размер соответственно swap'а Linux. Это число вы заменяете своим.

Открываем файл /etc/fstab на редактирование и комментируем строчку "что-то вроде этого":

/dev/hda6 swap swap defaults 0 0

Да! Cейчас внезапно подумал... Если кто не знает - строка комментируется подстановкой символа '#' в ее начало.

После перезагрузки, загружаете windows и в установках 'My Computer' / 'Settings' / 'Perfomance' / 'Virtual Memory' устанавливаете swap файл на новый диск. Параметры minimum size и maximum size лучше установить одинаковыми (фиксированный файл подкачки) и максимально возможными (файл подкачки на весь диск).

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

Вот, наверное, и все. Попробуйте - должно получиться.

Напоследок - совет. При выполнении указанных мною пунктов читайте соответствующие страницы руководства ('man mount', 'man swapon', 'man dd' и т.п.) для того, чтобы вы точно представляли что именно вы делаете на данном этапе. Удачи!

 

<<Назад

 

 

Источник - SoftТерра, http://www.softerra.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com