Бывают задачи, когда нужно работать с большим количеством мелких файлов и делать это по возможности быстро, без завязок на меееедленную файловую подсистему. Ветераны вспомнят о том, что есть такой виртуальный диск, он же - RAM-дисках (ramdisk) и будут совершенно правы - это действительно выход, а сделать ramdisk в Linux можно буквально в один клик на клавиатуре.
Собственно, в ядре должна быть поддержка tmpfs, и если вы (или авторы вашего дистрибутива) не любители усложнять себе жизнь, она там должна быть.
Быстренько создаём новую точку монтирования:
# mkdir /mnt/tmpfs/и даём все права на использование. После этого даём команду (от рута или через sudo):
# chmod 777 /mnt/tmpfs/
# mount -t tmpfs -o size=xxxM tmpfs /mnt/tmpfs/где xxxM есть размер RAMdisk в Мегабайтах.
или
$ sudo mount -t tmpfs -o size=xxxM tmpfs /mnt/tmpfs/
Будьте осторожны и не размахивайтесь слишком широко: если вы попросите создать ramdisk больше, чем имеете оперативной памяти, система начнёт сгружать всё в swap-файл и дела пойдут очень медленно и грустно.
Если же вы хотите изменить размер ramdisk - это просто:
# mount -o remount -o size=yyyM /mnt/tmpfs/При этом содержимое диска не пропадёт, но его размер тут же увеличится (при уменьшении также ничего не пропадёт, если только данных не больше, чем диск).
или
$ sudo mount -o remount -o size=yyyM /mnt/tmpfs/
Другие способы создания виртуальных дисков в памяти хорошо описываются в англоязычном посте.
Предупреждаю особо горячих финских парней: это RAM-диск, а это значит, что всё его содержимое после отключения питания машины будет безвозвратно потеряно. Будьте бдительны.
Ссылки
Есть толковые посты о том, как в Linux сделать виртуальный диск в памяти здесь и тут.
15 комментариев: |высказаться!| RSS-лента дискуссии.|
Хм. Я в блоге тоже не так давно писал об этом.
Кстати говоря, это никакой не ramdisk. Это особенность ядра Linux и называется она tmpfs.
@bosha пишет...
Хм. Я в блоге тоже не так давно писал об этом.
А что ж ссылочку в посте не привели? Себя не похвалишь - никто не похвалит. В ваших блогах ничего сходного не нашел, увы.
Кстати говоря, это никакой не ramdisk.
Это понятно, просто для моих коллег, работающих под виндой, это самая близкая аналогия. Ну и в общем-то это можно и диском назвать :-)
Не знаю насколько хорошая это идея, но /tmp и каталог временных файлов для havp я так и монтирую, в tmpfs.
Правда полгига под это дело нервируют жабу:)
здорово, спасибо. А для чего конкретно вы используете tmpfs?
Спасибо за инструкцию. Я в последнее время подумываю над тем что лучше базу с мускулом в памяти держать. Так что для меня инструкция в тему :)
К стати для особо горячих финских парней можно еще добавить, что использовать это надо с осторожностью при нехватки памяти. Ибо уйдет в своп и весть профит от использования может сойти на нет. ;)
В большинстве современных дистров tmpfs уже примонтирован в /dev/shm. Так что можно эту ФС сразу использовать без дополнительных телодвижений.
По поводу использования. tmpfs очень удобно использовать для хранения lock-файлов, используемых в скриптах, т.к. в случае неожиданного ребута они сами-собой удалятся.
Спасибо. Полезная информация.
# mkdir -p /mnt/ram
# mount -t ramfs none /mnt/ram
- это _настоящая_ ram, со всеми ее преимуществами, но целиком.
Если очень надо ограничить объем:
# dd if=/dev/zero of=/mnt/ram/diskimg bs=1024 count=1024
# mke2fs -vFL RAMDisk /mnt/ram/disk.img
# mkdir -p /mnt/ramdisk
# mount -o loop /mnt/ram/disk.img /mnt/ramdisk
он же RAM-дисках
«он же — RAM-диск»
Для этого быстренько создаём новую точку монтирования:
Это предложение лучше записать так: «Быстренько создаём точку монтирования». А то создаётся впечатление, что ты всё ещё о tmpfs в ядре говоришь.
ramdisk<br>
больше
Откуда и зачем там перевод строки?
при уменьшении так же
Так же предупреждаю особо горячих финских парней
:)
Вроде как видел советы держать копию профиля Firefox в оперативке — мол, так быстрее работает.
@Анонимный, 15.03.2010 8:41:00
Не знаю насколько хорошая это идея, но /tmp и каталог временных файлов для havp я так и монтирую, в tmpfs.
Ну так знакомые виндузятники спросили: а есть в этих линупсах рамдиск!? Вот я им этим постом и ответил. Ясен пень, что это есть уж сто лет как и это не вполне диск (мне выше уже попеняли на это - и в общем-то правильно).
@escantor, 15.03.2010 8:55:00
А для чего конкретно вы используете tmpfs?
Архивирование и обработка большого количества мелких файлов, работа с данными сигналов в текстовом формате (выделение столбцов\строк) - так быстрее.
@Иван, 15.03.2010 9:31:00
Я в последнее время подумываю над тем что лучше базу с мускулом в памяти держать.
Я там про горячих парней уже писал: грохнете базу - чур меня в комментах не проклинать :-) А синхронизовать ее потом как с той, что на винчестере?
@Olly Cat, 15.03.2010 10:58:00
К стати для особо горячих финских парней можно еще добавить, что использовать это надо с осторожностью при нехватки памяти.
Каждый уважающий себя горячий пингвиновод должен лично познакомиться с oom_killer :-)
@Dormestmass
В большинстве современных дистров tmpfs уже примонтирован в /dev/shm.
А хочется свой лесапед с квадратными колесами :-) То есть свой каталог, где только твои файлы.
@Анонимный, 15.03.2010 18:08:00
# mount -t ramfs none /mnt/ram
- это _настоящая_ ram, со всеми ее преимуществами, но целиком.
Трюк интересный (я попробую на университетском кластере, который не жалко :-)). Но это вся оперативка - а хочется, чтоб еще осталось приложениями.
Если очень надо ограничить объем:
Конечно, надо, а то все в своп уйдет.
Спасибо тебе, анонимный разум, за столь интересный трюк. Будем пробовать.
@Minoru
И ты здесь, Брут? :-)
А то создаётся впечатление, что ты всё ещё о tmpfs в ядре говоришь.
Да, увлекся.
Откуда и зачем там перевод строки?
У меня экран Уже, чем окно Scribefire - иногда я переношу слова принудительно, чтобы видеть, что пишу.
:)
Таки требую отменить это дурное правило :-)
Вроде как видел советы держать копию профиля Firefox в оперативке — мол, так быстрее работает.
Это тормозное чудовище ничто не спасет. И хотя я пользователь Огнелиса, но факт его тормозов (а в последнее время и несовместимости расширений) меня начинает бесить.
Еще раз спасибо за интересные трюки, идеи, советы и конечно же найденные ошибки :-) А коли отыщутся новые - отгружайте в комментарии.
>Это тормозное чудовище ничто не спасет.
Прошу прощения, если знаете про VACUUM для фоксовского мускула. Помогало. Кэш фокса в tmps самообман. Меня огнелис уже не бесит. P.S. Сам давно на midori.
alias foxvacuum='find ~/.mozilla/firefox -name '*.sqlite' -print -exec sqlite3 {} "VACUUM; REINDEX;" \;'
Здравствуйте.
Может кто нибудь мне приведет пример, как запускать в потоке два bash-скрипта, script1 делает echo "имя файла" script2 на вход это имя получает и он его, например, копирует куда-нибудь. Поотдельности все работает, script1 печатает "имя", если это имя скопировать подставить параметром в script2 "имя" - нормально копирует. А если
запускаю в одной строке:
# script1 ; script2
- печатает "имя" и все, больше ничего!!! пусто на входе script2!!
Что не так???
Все не так.
С таким уровнем познаний рутом скрипты отлаживаешь...
Можно в обратные кавычки заключить то, что должно выполниться и подставиться вместо себя.
script1 `script2`
Или использовать xargs
script2 | xargs script1
у меня несколько клонов одной проги запущены под вайном под разными префиксами (чтобы могли работать параллельно)
каждой из прог надо для работы 14 гб архивов,
раньше я для каждого вайна создавал жесткую ссылку на файлы с архивами
а после того как я загнал архивы в память, жесткую ссылку создать невозможно.
как мне теперь вообще работать с этими файлами?
согласен на любой костыль.
PS файлы лежат в /dev/shm/ (/run/shm/)
Отправить комментарий