Захотелось мне еще немного ускорить Firefox после сборки стабильной версии. Самый простой и очевидный способ — переместить кэш браузера с жесткого диска в оперативную память. Плюс такого решения очевиден:
- Оперативная память быстрее жёсткого диска.
Но и минусы есть:
- Необходимо хранить более-менее актуальную версию кэша на жестком диске.
- Нужно копировать данные с жесткого диска в оперативную память при запуске браузера, что увеличивает время загрузки Firefox.
- Какой-никакой а контроль на случай непредвиденных ситуаций должен присутствовать.
На мой взгляд более-менее нормальная реализация — использование системы инициализации системы (systemd или SysVinit). При старте системы оно бы копировало кэш с жесткого диска в оперативную память, а при выключении компьютера — в обратном порядке.
Однако это усложняет демонстрацию принципа работы. При желании это можно сделать самостоятельно, в моём же примере главное — изложить суть понятно, и в первую очередь для себя из будущего =)
Подготовка и кратко о tmpfs
Tmpfs — файловая система,которая размещается в оперативной памяти. Её то и будем использовать. Для этого в файл /etc/fstab добавим примерно такую строчку:
tmpfs /home/ozi/.cache/mozilla tmpfs noauto,user,size=400M 0 0
Где
- /home/ozi — домашняя папка пользователя, для которого будет переноситься кэш
- .cache/mozilla — директория, где Firefox хранит свои временные файлы
- noauto — монтировать файловую систему можно только вручную
- user — смонтировать файловую систему может пользователь
- size=400M — размер в мегабайтах
Стоит отметить, что размер должен быть чуть больше, чем установленные для кэша Firefox в его настройках:
Скрипт запуска Firefox с копированием кэша в оперативную память
Необходимо создать файл с именем, к примеру, firefox_tmpfs.sh следующего содержания:
#!/bin/bash
#папка с кэшем программ в домашней директории
cache_dir=/home/ozi/.cache/
#папка с кэшем Firefox
mozilla_dir=$cache_dir/mozilla
#директория, предназначенная для хранения кеша, когда Firefox не работает
mozilla_backup_dir=$cache_dir/mozilla_b
#файл, необходимый для блокировки запуска в случае непредвиденной ситуации
lock_file=$cache_dir/firefox_lock
if [ -f $lock_file ]; then
echo "Существует $lock_file, Firefox запущен или был некорректно завершен"
echo "Для избежание потери данныех требуется ручное вмешательство"
exit 1
fi
echo "Монтируем ФС в памяти"
touch $lock_file
rm -rf $mozilla_dir/*
mount $mozilla_dir
echo "Копируем кэш Firefox с жесткого диска в память"
cp -r $mozilla_backup_dir/* $mozilla_dir/
echo "Запускаем Firefox"
firefox
echo "Копируем кэш Firefox из памяти на жесткий диск после окончания работы"
rm -rf $mozilla_backup_dir/*
cp -r $mozilla_dir/* $mozilla_backup_dir/
echo "Отключаем tmpfs"
umount $mozilla_dir
rm $lock_file
echo "Готово"
И дать ему права на исполнение:
$ chmode +x firefox_tmpfs.sh
Осталось переместить актуальный кэш в папку его хранения и создать точку монтирования tmpfs:
$ mv ~/.cache/mozilla ~/.cache/mozilla_b
$ mkdir ~/.cache/mozilla
Готово, теперь Firefox запускать нужно через эту обёртку (и только через неё):
./firefox_tmpfs.sh