Смонтировать /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", как предложено в комментарии.