Pull to refresh

Разгон Firefox при помощи TmpFS

Reading time 4 min
Views 12K
Firefox использует SQLite для хранения большинства служебной информации, что делает его работу заметно медленнее. Во время доступа к своей SQLite-базе, Firefox «замирает», когда другие процессы в системе активно используют IO-операции с диском.
Однако, есть решение по переносу профиля Firefox в раздел RAM, используя TmpFS.

Примечание: это решение было предложено на этом форуме. Я всего лишь слегка модифицировал его и представляю на суд общественности решение, использующее rsync для синхронизации профиля Firefox между RAM и жестким диском.

Итак, подготовим наш профиль, сделаем его легче. В первоисточнике предлагаются следующие изменения в настройках FF (посредством перехода по адресу about:config в FF):
set browser.cache.disk.capacity to 20000
set browser.safebrowsing.enabled to false
set browser.safebrowsing.malware.enabled to false


* This source code was highlighted with Source Code Highlighter.

Затем скопируем наш профиль в другую директорию. По умолчанию, профиль находится в ~/.mozilla/firefox/ и выглядит на манер xxxxxxxx.default.
Создадим новую директорию, назвав ее profile, затем копируем содержимое вашего реального профиля ( xxxxxxxx.default ) в созданную папку profile.
Однако, перед этим удалим файлы вида urlclassifier*.sqlite в профиле и очистим кэш браузера.
cd ~/.mozilla/firefox/
mkdir profile
cd xxxxxxxx.default/
rm -f  urlclassifier*.sqlite
cd ../
cp -r *.default/* profile/


* This source code was highlighted with Source Code Highlighter.


Примечание: подразумевается, что у вас один профиль Firefox. Если несколько — не огорчайтесь, это руководство легко применяется и для остальных профилей Firefox.
В дальнейшем, будем иметь ввиду, что мы используем профиль xxxxxxxx.default, однако на практике замените его на имя вашего профиля в Firefox.
То же относительно имени пользователя в системе: в настоящем руководстве используется имя xxxx, что на практике подразумевает имя вашего пользователя в системе.

Итак, приступаем к самой интересной части.

Создаем раздел RAM.


Добавьте следующую строку в файл /etc/fstab:
firefox /home/xxxx/.mozilla/firefox/xxxxxxxx.default tmpfs size=128M,noauto,user,exec,uid=1000,gid=1000 0 0

* This source code was highlighted with Source Code Highlighter.

Само собой, измените значения в соответствии с вашим именем пользователя, директорией профиля Firefox и вашими uid и gid в системе.

Тестируем профиль в RAM


Теперь нам необходимо закрыть Firefox, поэтому нелишне запомнить (или записать) следующие шаги.
Итак, закройте Firefox. Затем убедитесь, что ваш текущий профиль действительно скопирован в директорию ~/.mozilla/firefox/profile/. Теперь очистите ваш оригинальную директорию с профилем, т. е., просто сделайте ее пустой:
cd ~/.mozilla/firefox/
rm -Rf *.default/*


* This source code was highlighted with Source Code Highlighter.


Перед тем, как мы запустим Firefox, необходимо смонтировать раздел RAM, затем скопировать содержимое профиля в смонтированный раздел. В то же время, необходимо делать регулярное копирование обратно, из раздела RAM в директорию профиля на диске. В противнном случае, вы рискуете остаться без данных профиля, когда выключите компьютер.
Во избежание этого, используем rsync (гораздо лучшее решение, чем tar [Прим. Автора]). Мы создадим небольшой скрипт, который проверяет наличие нашего профиля в RAM ( распакованного файла). Если это не так, мы монтируем раздел RAM и копируем в него наш профиль. Если же профиль присутствует в RAM, мы синхронизируем директорию профиля на диске с профилем в RAM.
Итак, вот текст скрипта (назовем его tmpfs_firefox.sh):
#!/bin/bash

# Измените на соответствующее имя профиля
PROFILE="xxxxxxxx.default"

cd "${HOME}/.mozilla/firefox"

if test -z "$(mount | grep -F "${HOME}/.mozilla/firefox/${PROFILE}" )"
then
  mount "${HOME}/.mozilla/firefox/${PROFILE}"
fi

if test -f "${PROFILE}/.unpacked"
then
  rsync -av --delete --exclude .unpacked ./"$PROFILE"/ ./profile/
else
  rsync -av ./profile/ ./"$PROFILE"/
  touch "${PROFILE}/.unpacked"
fi

exit


* This source code was highlighted with Source Code Highlighter.

Итак, Firefox закрыт. Запустим скрипт в первый раз. Он смонтирует раздел в RAM и скопирует наш подготовленный профиль в него.
Если вы теперь посмотрите директорию профиля, то увидите все необходимые файлы профиля:

~/tmpfs_firefox.sh
ls ~/.mozilla/firefox/*.default/


* This source code was highlighted with Source Code Highlighter.


Запустим наш скрипт во второй раз. Этим самым мы синхронизируем сохраненный на диске профиль с профилем в RAM:
~/tmpfs_firefox.sh
# Вы увидите нечто вроде:
#  building file list ... done
#  sent 36643 bytes received 20 bytes 73326.00 bytes sec
#  total size is 45390178 speedup is 1238.04

* This source code was highlighted with Source Code Highlighter.


Теперь кульминация: тестируем Firefox.


Во-первых, убедитесь, что профиль был корректно смонтирован в разделе RAM. Если хотите, вы можете попытаться отмонтировать раздел RAM и запустить наш скрипт снова. Если все гладко и ваш профиль в надлежащем состоянии, примонтирован — просто запускаем Firefox.
Надеюсь, вы ощутили, что он работает теперь значительно быстрее. Возможно, это заметнее с так называемой фишкой « smart bar auto completion»: результаты дополнения должны выводиться мгновенно.
Все же нам необходимо регулярная синхронизация профиля между диском и RAM. Мы можем делать это при выходе из системы, однако такое решение недостаточно надежно. Поскольку мы используем rsync для синхронизации, то можно запускать его довольно часто. Используем cron для этой задачи: будем запускать скрипт каждые 5 или 10 минут.
Таким образом, даже если ваш компьютер внезапно отключится, вы всегда будете иметь свеженький профиль, сохраненный пару минут назад.
crontab -e
*/5 * * * * $HOME/tmpfs_firefox.sh


* This source code was highlighted with Source Code Highlighter.

Для пущего удобства создадим еще один маленький скрипт для запуска Firefox. Он будет проверять, загружен ли профиль RAM перед загрузкой Firefox. Вы можете использовать этот вместо обычного ярлыка запуска Firefox:

#!/bin/bash
~/tmpfs_firefox.sh
firefox &
exit


* This source code was highlighted with Source Code Highlighter.


Итоги.


Мы сделали не так уж много:
  • обычный бэкап профиля Firefox
  • написали скрипт, монтирующий обычный профиль с диска в RAM
  • обеспечили довольно надежную синхронизацию профиля между RAM и жестким диском.
  • каждые 5 минут наш профиль сохраняется из RAM в директорию на диске.

Несомненно, Firefox должен просто работать, как и раньше. Однако — значительно быстрее, чем раньше. Ценою всего лишь 128 мегабайт RAM!

Источник: verot.net

P.S. Однако, работает, как и описано. Почему и перевел :)
Tags:
Hubs:
+28
Comments 82
Comments Comments 82

Articles