Файловая система ( / rootfs) полностью в RAM... | [Харзах]-[РУ]
Давно наблюдаю за Puppyrus Linux очень мне нравится идея работать полностью в оперативной памяти. И быстро и диски не вырабатывают свой ресурс. И надёжно, так как чтобы ни случилось, после перезагрузки, у тебя новая система. Но, почему-то никто не хочет видеть очевидное и все основные дистрибутивы (и не основные тоже) ничего не делают, чтобы дать возможность работать всем в оперативной памяти. Хотя, технология довольно проста, правда не для всех дистрибутивов. На эту тему я нашёл всего две статьи, 2011 и 2015 годов. Одна на английском, вторая на русском.
Почему я вообще затронул эту тему и решил провести такой эксперимент, всё очень просто, у меня полетел SSD-диск, а на HDD, на который я переустановил систему, всё работает очень уж неторопливо. И мне это не нравится. Покупать новый диск? Так он тоже может полететь, причём весьма неожиданно. Если HDD-диски становятся нежизнеспособными не в один момент (хотя, не всегда), то SSD у меня умер сразу, буквально за пару минут. Очень неприятное чувство, хорошо, что у меня были бэкапы и системных настроек и тем, которые мне нравятся.
Итак, приступим. Начнём с того, что HOWTO для первого способа были написаны только для Debian-совместимых дистрибутивов, поэтому мне пришлось, установить на соседний раздел, MXLinux и сделать всё с его помощью. Конечно, некоторые настройки изменились и в файлах всё не так, как четыре и девять лет назад, но слава всевышним силам, до initramfs шаловливые руки Поттеринга и иже с ним, ещё не добрались и код рабочий. Сначала приведу две статьи источника, вот эту (сразу скажу, что код там с ошибками и надо будет кое-что поправить) и вот эту, здесь предлагается использовать дополнительно файл, в который надо было бы загрузить всю систему, которая находится на диске, так как это лишняя сущность, то этот код я использовал больше для справки.
Первый способ:
1. В файле /usr/share/initramfs-tools/scripts/local ищем на строках 179-185 (предварительно сделав бэкап файла):
И меняем этот код на такой:
2. Сохраняем файл. И вводим команду в терминале от рута:
3. Проверяем, что файл создан в папке /boot и возращаем старый local в папке /usr/share/initramfs-tools/scripts/local на место (или удаляем все наши изменения, которые мы сделали в шаге 1).
4. Идём в папку /etc и находим файл fstab, сохраняем его копию и редактируем его, ищем в первых строках что-то вроде этого:
и меняем на:
5. Сохраняем и идём в папку /boot/grub, находим grub.cfg и изменяем (предварительно сохранив копию) эти строки 106-121:
на тот код, что находится ниже, то есть, просто добавляем ещё одно меню, немного видоизменённое в названии и на строчке initrd (для других систем, этот код меню, естественно, будет другой, но те изменения, которые сделали мы, будут те же самые):
Теперь у нас два варианта меню. Если надо зайти в быструю систему и комфортно работать, то мы идём в RAMBOOT, а если надо обновиться или что-то сделать с системой, то идём во второе меню, которое никак не изменилось. Конечно, нельзя не сказать о недостатках, а именно о долгой загрузке такой системы, то есть, чем больше у вас на диске занимает файловая система ( / rootfs), тем дольше будет загружаться компьютер. Но на самом деле это не так страшно. Дело привычки, да и систему можно постараться уменьшить в размере. Наверняка возможны какие-то варианты со сжатыми файловыми системами только для чтения и тд. Лучше всего, конечно, всё это реализовано в Puppyrus Linux, но там другая проблема, нет стабильного репозитария и собирают пакеты все, кто может и часто нет того, что нужно.
Добавлено(1) - через несколько часов: После нескольких часов работы, могу сказать, что ощущения от работы в оперативной памяти просто несравнимы. Ни с SSD, ни с HDD. Особенно это заметно при просмотре сайтов в интернете. Всё просто летает, открывается мгновенно, браузер не тормозит, ни при возвращении на предыдущую страницу, ни при открытии новых (которые теперь зависят действительно только от интернета). И это Vivaldi (основанный на Хроме), что уж говорить о других, более легковесных браузерах, там вообще даже минимальных задержек нет. Интересное ощущение, удивительное...
Добавлено(2) - 26.10.2020: Для изменения последующей загрузки, чтобы не работать в вечно неизменной системе, я изменяю состояние раздела, с которого загрузился. Например, добавил ссылку в закладки браузера или наоборот, удалил что-нибудь ненужное, монтирую (разделы наверняка будет примонтированы автоматически при загрузке, тогда их сначала отмонтируем и перемонтируем в ручном режиме) тот раздел, который у меня теперь в RAM и меняю там файлы, которые нужно. У браузера просто копирую папку настроек, которые находятся в домашнем разделе (/home//"user"), у других программ - аналогично. Таким образом, все изменения в системе находятся под моим контролем и если мне что-то не нужно, то этого у меня не будет. Также, могу тестировать какие-нибудь программы, не опасаясь за целостность ОС (код для примера, на других компьютерах нужно указать другие значения диска):
Добавлено(3) - 28.10.2020: Использую в течение нескольких дней такую систему. Очень всё быстро работает, постепенно начинаю привыкать к такой скорости, но всё равно, всё радует. Например, фильмы онлайн если смотреть, на youtube всё стало отзывчивей. Единственный недостаток, это долгая загрузка ОС. С моими почти 10GB, загружается 7 минут 10 секунд (специально секундомером мерил). Также приобретаю привычку, при нужных изменениях (закладки, изменения в настройках), записывать сразу изменения на диск, чтобы не забыть. Зато выключение компьютера почти мгновенное. На самом деле, со скоростью загрузки можно, наверное, что-то сделать... почистить логи, кеши, а может быть вообще всё поотключать, но это сделаю позднее. Кстати, с SSD-диска скорость загрузки должна быть выше. Не знаю, насколько, но должно быть существенно, так что имеет смысл подумать об этом...
Второй способ:
Нашёл его в обсуждении на ЛОРе. Оригинал кода здесь. Это уже изменённый мной скрипт. По умолчанию, он создавал rootfs в памяти только 10GB, чего естественно мне не хватало. Я поправил код и теперь root раздел в RAM занимает 80% от существующей памяти. Можно и меньше сделать, я думаю... Чтобы всё работало, перед выполнением этого кода, создайте в папке /mnt папку mnt - или измените пути в скрипте.
После этого убиваем дисплейный менеджер (у меня Slim) и заходим заново (меня выбрасывает в консоль и я стартую через startx) и смотрим, что осталось от старой системы, командой:
Всё это убиваем. И собственно, всё. Я для этого запускаю небольшой скрипт, типа такого (в другом окружении наверняка убивать надо будет что-то другое, но как пример):
Третий способ:
Разработано специально для ArchLinux. Так что, скорее всего, не работает в других дистрибутивах (не протестирован) ramroot.
Ну и несколько скриншотов напоследок, по работающей системе, в conky видно, что десять с лишним гигабайт заполнены (раньше было меньше 1GB) в оперативной памяти и ещё десять свободны, используемые гигабайты - это именно наша rootfs: