Пример: на компьютере установлено физически 2 ГБ оперативной памяти. До сих пор компьютер использовался в таком режиме, что не потреблял больше 500 мегабайт, поэтому раздела подкачки на нём не было запланировано, и он не существует. Но вдруг возникла необходимость запустить процесс, которому нужно 3 гига оперативы. Единовременно. В смысле — процесс должен отработать и всё. Больше такое количество оперативной памяти никогда не понадобится, компьютер продолжит работать в своём штатном режиме.

Как быть? Перезагружаться, двигать разделы с данными, создавать раздел подкачки, который не был нужен раньше и не будет нужен потом — тупо и не всегда возможно. Подключать флешку, форматированную в своп — опять же тупо, и опять же не всегда возможно.

Поможет создание области для подкачки в виде файла. Файла подкачки.
Да-да-да, как в виндах. Только наживую, без перезагрузок и не навсегда.

1. Создаём файл, который будет свопом. Например, будущий двухгиговый своп в корне ФС можно сделать такой командой:

dd if=/dev/zero of=/podka4ka bs=1M count=1 seek=2047

Файл появится мгновенно, будет весить нужные 2 ГБ, но есть нюанс. Если файловая система поддерживает дыры, то наша "podka4ka" будет представлять собой большую дыру размером 2047 мегабайт с одним мегабайтом нулей в конце. А дыры в файле для подкачки — недопустимы (иначе на следующем шаге будет "skipping - it appears to have holes").
Поэтому используем другую команду. Она отрабатывает помедленнее, но делает наверняка:

dd if=/dev/zero of=/podka4ka bs=1M count=2048

2. Подготавливаем файл форматированием:

mkswap /podka4ka

3. И добавляем его к оперативе:

swapon /podka4ka

Теперь у нас не 2, а 4 ГБ доступной памяти.
Проверяем, всё ли в порядке:

swapon -s

Вывод должен быть примерно таким:

Filename		Type		Size		Used		Priority
/podka4ka		file		2097148		0		-1

Всё, можно запускать ресурсоёмкий процесс.

После того, как он отработает — наведём порядок. Вернём взад состояние системы:

swapoff /podka4ka
rm /podka4ka


imen
2013.08.29 11:40:55
#cid72088

Ответить

Попрошу не халявить!
Традиционно ☹ наиболее сложные вопросы (как определить, что ошибка возникла вследствие недостатка памяти и сполько именно памяти недостаёт процессу) не были даже упомянуты.