Такая картина ждала меня, на неожиданно пропавшем из эфира сервере:
После перезагрузки в истори команд нашлась строчка: «mount -t ramfs -o size=256m ramfs /media/ramdisk/». На разделе в памяти размещались данные web-приложения. Интересно, согласно man mount у ramfs нет опции size, точнее у неё вообще нет опций. Действительно:
root@server:~# mount -t ramfs -o size=1m ramfs /media/ramdisk/ root@server:~# dd if=/dev/urandom of=/media/ramdisk/test bs=1024K count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 1.58535 s, 6.6 MB/s root@baku:~# ls -lh /media/ramdisk/ total 10M -rw-r--r-- 1 root root 10M Feb 8 18:35 123
ramfs проглатывает любые опции, что может ввести в заблуждение невнимательного администратора. На самом деле ramfs никак не ограничивает размер данных, который вы пытаетесь в неё поместить. Если размер данных достигнет размера оперативной памяти, то на экране вас будет ждать сообщение «Kernel panic - not syncing: Out of memory and no killable processes...» Даже если на компьютере достаточно swap'а, ramfs не будет его использовать.
С tmpfs таких проблем не возникнет. Если опция size, то она считается равной половине объёма оперативной памяти.
root@server:~# mount -t tmpfs -o size=1m ramfs /media/ramdisk/ root@server:~# dd if=/dev/urandom of=/media/ramdisk/123 bs=1024K count=10 dd: writing `/media/ramdisk/123': No space left on device 1+0 records in 0+0 records out 1040384 bytes (1.0 MB) copied, 0.160041 s, 6.5 MB/s
В общем, ramfs стоит использовать только если критично расположение данных именно в памяти (tmpfs может уходить в swap) и размер файлов находится под жестким контролем. В остальных случаях в качестве «быстрого раздела» лучше использовать tmpfs.
В Debian из коробки есть 2 раздела с tmpfs: /lib/init/rw и /dev/shm. Первый используется init-скриптами, второй доступен всем пользователям, является аналогом /tmp. По дефолту размер этих разделов равняется половине оперативной памяти, он может быть изменён с помощью переменных TMPFS_SIZE и SHM_SIZE в файле /etc/default/tmpfs. Первая переменная регулирует размер /lib/init/rw. Размер /dev/shm определяется переменной SHM_SIZE, если она не задана будет использована TMPFS_SIZE, если не задана и она - размер будет равным половине оперативной памяти.
Приветствую.
ОтветитьУдалитьХорошую идею подкинул для статьи.
Спасибо.