Смонтировать /usr в ОЗУ (загрузка с жесткого диска при запуске и сохранение при выключении)

У меня есть текущий сценарий:

  • 16 ГБ или ОЗУ. По большей части, около 10~12 ГБ не используется

  • Практически никогда не устанавливайте и не удаляйте программное обеспечение, это зрелая система

  • Выполняйте перезагрузку только один раз в неделю, поэтому (пере) время загрузки не имеет значения

  • /usr около 8 ГБ

  • HDD работает медленно, и нет бюджета, чтобы изменить это в ближайшем будущем

  • монтаж /tmp как tmpfs в fstab делал чудеса для производительности

И у меня просто возникла эта безумная идея:

Можно ли как-то использовать мою оперативную память для "хранения" /usr ?

В том что при запуске читает текущий /usr содержимое с жесткого диска и скопировать его на tmpfs и смонтировать это как /usr?

По возможности также сбросить (возможно, обновленное) содержимое обратно на жесткий диск при завершении работы? Или, возможно, позволил мне легко "временно переключиться обратно на жесткий диск", когда в конечном итоге потребуется установить / удалить новое программное обеспечение или обновления?

Любой подход приветствуется, готовые к использованию команды будут высоко оценены.

Спасибо!

2 ответа

Решение

Это возможно, но бессмысленно. Ядро хранит кэш данных с диска в оперативной памяти. Данные, которые вы использовали в последнее время, хранятся в оперативной памяти. Вы, естественно, в конечном итоге с частями /usr который вы часто используете в ОЗУ, а части, которые вы не используете, не будут занимать ОЗУ.

Если вам нужно лучшее время реакции при запуске приложения, вы можете заполнить кеш. Файл загружается в память при первом его использовании и остается там до повторного использования памяти для чего-то другого. Вы можете принудительно загрузить файл:

cat /path/to/file >/dev/null

Например, чтобы предварительно загрузить все исполняемые файлы и библиотеки в оперативную память:

cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null

Это может занять некоторое время, поэтому вы должны сделать это в фоновом режиме. Вы можете поместить следующую команду в /etc/rc.local:

ionice -c 3 cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null &

Чтобы также загрузить все библиотеки в подкаталогах /usr/lib* это может быть полезно для запуска find:

ionice -c 3 find /bin /usr/bin /usr/lib* -type f -exec ionice -c 3 cat '{}' ';' > /dev/null &
ionice -c 3 cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null &

Не будет работать, потому что в библиотеках много каталогов. попробуйте найти:

ionice -c 3 find /bin /usr/bin /usr/lib* -type f -exec cat '{}' ';' > /dev/null &

Все, что он производит, отправляется в /dev/null, так что ничто вас не раздражает

Я думаю, что оба ionice необходимы, потому что find выполняет команды в своем собственном процессе. Пожалуйста, поправьте меня, если я ошибаюсь. (Похоже, я был неправ.)

Эта строка в rc.local должна помочь уже выбранному ответу.

[править] удалил вторую "ionice", как предложено в комментарии.

Другие вопросы по тегам