Файл подкачки: swap-файл и swap-раздел в Linux



31 коммент.
Все мы знаем, что swap-файлы в Linux делаются просто и легко - настолько просто, что иногда забываем, как это делается. Прежде, чем что-то создавать, хорошо бы узнать, сколько swap-пространства у нас уже имеется в системе - для этого следует дать команду в консоли от рута:
# swapon -s
Результат будет в виде:

Filename Type Size Used Priority
/dev/hda1 partition 289128 0 -1

Описание вывода команды:
  • Filename описывает имеющиеся у вас своп-пространства и где они находятся.
  • Type указывает тип пространства: partition (раздел) или file (файл).
  • Size сообщает общий размер Swap-пространств.
  • Used говорит о том, сколько сейчас свопа задействовано.
  • Priority указан приоритет, т.е. какие пространства системе использовать вначале.
Тот же самый результат мы получим по команде cat /proc/swaps

Создание swap-файла в Linux
1. Открываем консоль\терминал и получаем полномочия root или используем sudo:
$ su
2. Думаем*, какой размер swap-файла нам нужен в мегабайтах. Подумавши, даём команду:
sudo dd if=/dev/zero of=/swapfile bs=1M count=500
или
# dd if=/dev/zero of=/swapfile bs=1M count=500
В команде dd для задания размеров можно использовать суффиксы K, M, G для килобайт, мегабайт и гигабайт соответственно. В данном примере это 500 Mегабайт файла подкачки.

* Многие задаются фундаментальными вопросами бытия вроде "каков рекомендуемый размер swap в linux"? Можно не думать, а просто создать SWAP-файл по размеру оперативной памяти, периодически посматривая на её, подкачки, использование с помощью команды top. При необходимости добавить\уменьшить своппинг системе. Можно использовать несколько файлов подкачки.

3. Поясняем системе, что созданный пустой файл это всё-таки файл подкачки для Linux:
sudo mkswap /swapfile
или
# mkswap /swapfile

4. Подключаем созданный swap-файл:
sudo swapon /swapfile
или
# swapon /swapfile
При этом в выводе команды top или команды free должно появиться упоминание, что свопинга в системе поприбавилось. Чтобы отключить файл подкачки, пишем
sudo swapoff /swapfile
или
# swapoff /swapfile
Чтобы не подключать swap-файл или swap-раздел каждый раз, полезно занести запись в /etc/fstab следующего содержания:
/swapfile none swap sw 0 0
На всякий случай отмечу, что каждый раз создавать swap-файл не нужно: просто подключаете и отключаете его с помощью swapon/swapoff. Работа со swap-разделами в Linux происходит аналогичным образом.


Приоритет SWAP-файлов
Создавать и использовать swap-файлов в Linux можно любое количество. При этом можно указать приоритет подключаемого swap-файла или раздела (хотя ядро умеет самостоятельно распределять по разделам/файлам подкачки).

Например, высший приоритет для файла подкачки задаётся так:
swapon -p 1 /opt/swapfile
Приоритет является целым числом от 0 до 32767.


Очистка swap-пространства после ресурсоёмких приложений
Командой swapoff -a, запущенной от имени root, можно отключить использование всех разделов и файлов подкачки. После ввода команды содержимое свопа за несколько минут загружается обратно в оперативную память, а сам раздел подкачки отключается.
После загрузки содержимого свопа в оперативную память включем своп обратно командой swapon -a.


2. Системные настройки использования своппинга - Linux
За интенсивность обращения системы к swap-файлам и swap-разделам отвечает параметр swappiness, равный по умолчанию 60. Значение параметра может быть в пределах от 0 - наименьшее использование подкачки, до 100 - подкачка используется часто.

Насчёт оптимального значения параметра
swappiness есть много разных мнений. Так, например, один из ведущих разработчиков ядра Эндрю Мортон считает, что для десктопа лучше ставить большое значение, чтобы всякое bloatware скинуть в своп и использовать оперативную память для чего-то нужного.

Чрезмерное значение здесь приведёт к интенсивному использованию swap-файла, что нежелательно. Слишком маленькое значение может привести к тому, что при заполнении памяти будет принудительно запущен OOMkiller (процесс, запускающийся при исчерпании памяти и убивающий наиболее ресурсоёмкие задачи).

Временно (до перезагрузки системы) изменить этот параметр можно с помощью команды:

echo 50 > /proc/sys/vm/swappiness

Чтобы изменить значение по умолчанию, необходимо изменить параметр vm.swappiness:

vm.swappiness=50

в файле /etc/sysctl.conf

Следует, впрочем, отметить, что со vm.swappiness сильно перегибать палку не стоит. При больших значениях система потеряет в отзывчивости (будет вытеснять память, с которой работают приложения, в своп, хотя оперативной памяти ещё много). При малых значениях система работает отзывчивей, но когда оперативная память заканчивается, система начинает активно свопиться и притормаживать.

Также можно попробовать увеличить\уменьшить объём потребляемой системой памяти за счёт изменения размеров дискового кеша. Уровень выделяемой под кеш памяти хранится в
/proc/sys/vm/vfs_cache_pressure
Значение по умолчанию: 100. Чтобы использовать меньше памяти под дисковые кеши (что вообще говоря не есть хорошая идея), ставим значение 50. Если, наоборот, хочется больше отзывчивости системы, увеличиваем размер кеша не скупясь:
echo 1000 > /proc/sys/vm/vfs_cache_pressure
и далее продолжаем играться с параметрами вплоть до полного удовлетворения. Для того, чтобы настройки стали постоянными, заносим параметр
vm.vfs_cache_pressure = 1000
в файл /etc/sysctl.conf и со следующей загрузки дисковые кеши будут смачно чавкать вашей оперативной памятью.

Ссылки
Источники вдохновения здесь, там, среди замечательных комментариев к этому посту и кое-что из Цифровой кладовки.
Читать далее

Конвертировать img-образ QEMU в VirtualBox без vditool



8 коммент.
Для запуска приложений Windows, аналогов которым в Linux пока не видно, а особенно программ, работающих с сетью или требующих сетевого подключения, в последнее время я всё чаще использую VirtualBox. В отличие от QEMU, VirtualBox изначально сильно заточен именно под Windows (Guest addons, разные варианты ACPI, seamless-перехват мыши). Но у меня есть уже установленные варианты Windows в QEMU и их хотелось бы использовать в VirtualBox. Ниже небольшой пост о конвертации QEMU-образов в образы VirtualBox.


Конвертирование образов QEMU в VirtualBox, и, может быть, обратно Собственно, это не сложно, но задачу в первый раз при поиске осложняет масса устаревшего мусора в Сети, который рекомендует пользоваться vditool, однако насколько мне известно эту утилиту больше не скачать. А на самом деле, всё, что нужно для преобразования, уже находится в комплекте VirtualBox.

Итак, чтобы преобразовать образ диска QEMU под названием test.img в образ диска VirtualBox а-ля test.vdi, делаем вот что:
qemu-img convert -O raw test.img test.raw

VBoxManage convertdd test.raw test.vdi
как вариант: VBoxManage convertfromraw -format VDI test.raw test.vdi

VBoxManage modifyvdi /full/path/to/test.vdi compact


Здесь есть один момент, который важной упомянуть: обратная конвертация из VirtualBox в QEMU затруднена. Это означает, что если вы не найдёте vditool для Linux, обратно преобразовать данные не выйдет. Но если вам всё-таки улыбнётся удача, то последовательность действий такова:

vditool COPYDD vbox-image.vdi raw-image.img

qemu-img convert -f raw raw-image.img -O qcow2 qemu-image.qcow

То есть сначала перегоняем данные из vdi-формата в img, при этом размер файла будет 8Гб независимо от того, насколько заполнен диск. Далее уже стандартной утилитой в QEMU сжимаем образ и получаем на выходе QEMUшный диск, готовый для запуска.

Благодаря комментаторам, выяснилась возможность конвертировать образ Virtualbox в образ QEMU

VBoxManage internalcommands converttoraw src.vdi dst.raw

И ещё. В отличие от образов QEMU, примонтировать которые не составляет проблемы, образы VirtualBox примонтировать вовсе не так просто. Так что если вы хотите иметь постоянный (и простой) доступ к файлам гостевой ОС, имеет смысл использовать QEMU. Если же вам нужно запустить Windows в Linux без особых сложностей, VirtualBox всё-таки лучше.


Примечание
В последних версиях QEMU (по крайней мере, 0.12.3) имеется поддержка vdi формата VirtualBox 1.1. Для более ранних версий патч можно найти на сайте QEMU Forum в разделе Patches Repository.
Спасибо анонимному комментатору за ценные сведения!

Ссылки
Краткое изложение можно почерпнуть на опеннете, а очень ценный пост по обратной конвертации из Virtualbox в QEMU можно найти здесь.
Читать далее