Краткое и грязное резюме: мне нужно что-то вроде кеша записи, который истощается только тогда, когда система не занята.
Я хочу что-то вроде этого вопроса RAM-диск и физический RAID с небольшим поворотом.
Для конкретной сборки, которую я часто делаю, я хотел бы сохранить вывод сборки на RAM-диске, который в конечном итоге будет записан на диск. Одна конкретная цель, которую я создаю, - это действительно связка cp, tar, gzip и тому подобное, поэтому я привязан к диску. В жестком цикле отладки я хочу, чтобы он был быстрым, и не особо беспокоюсь, если результат сборки будет разрушен из-за отключения питания. Однако было бы неплохо, если бы виртуальный диск синхронизировался с диском, когда система не была занята. Я могу представить, как сделать это с помощью cron, но я прошу вас всех на случай, если есть более последовательное решение, которое сочетает в себе характеристики другого вопроса (ramdisk, который переполняется на диск) с этим новым поворотом (при достаточно простаивающем диске время содержимое ramdisk тоже попадает на диск). В идеале все выглядит как одна точка монтирования, где я устанавливаю общий размер и количество используемой оперативной памяти.
--- обновлено ---
Я не думаю, что кеш страницы делает то, что я хочу, потому что мне действительно нужна высокая производительность записи.
но я прошу вас всех на случай, если есть более связное решение, которое сочетает в себе характеристики другого вопроса (ramdisk, который переполняется на диск) с этим новым поворотом (учитывая достаточное время простоя диска, содержимое ramdisk делает это на диск тоже).
То, что вы просите, - это механизм отложенной записи, то есть записи на RAM-диск получают приоритет над записью в постоянное хранилище, но все данные в конечном итоге записываются на диск, верно?
В идеале все выглядит как одна точка монтирования, где я устанавливаю общий размер и количество используемой оперативной памяти.
Как бы забавно это ни звучало, вы можете обойтись без зеркала LVM для завершения этого процесса.
Сделайте RAM-диск членом группы томов с физическим диском.
Отразите ramdisk на свой жесткий диск. Обратите внимание, что зеркала LVM зависят от направления, т.е. данные передаются от одного PV к другому в одном направлении.
Смонтируйте том LVM в качестве единой файловой системы.
Записи помещаются в буфер и записываются на виртуальный диск на основе LVM (а также на физический диск, благодаря зеркалу). В отличие от RAID-1, где записи являются синхронными и параллельными (оба диска записывают одновременно), зеркало LVM является асинхронным и последовательным (основной диск получает запись, затем LVM передает запись в зеркало). Это близко (но не на 100%) к тому поведению, которое вы ищете. Имейте в виду, что LVM оказывает давление на ожидающие записи для очистки на диск, поэтому любой "холостой ход", который вы видите, будет измеряться в лучшем случае секундами, в худшем - неполными секундами.
Обратной стороной этого механизма является то, что теперь у вас есть очень хороший механизм сохранения. При запуске создайте свой ramdisk и отразите на нем существующий диск; как только зеркало будет завершено, разбейте зеркало и измените направление (ramdisk -> hdd). Это означает, что каждый перезапуск приведет к тому, что ваши данные будут помещены на ramdisk, а непосредственно перед выключением будут записаны с ramdisk обратно на жесткий диск. Вероятно, это может быть сценарий на Perl или сценарий оболочки.
Я уверен, что есть и другие способы сделать это, но это самая быстрая версия. Я подумаю об этом еще немного и посмотрю, что смогу выяснить.
Вы описываете именно то, что должен делать кеш диска вашей операционной системы. Современные ОС очень хороши в этом, если в их распоряжении достаточно памяти.
На мой взгляд: дайте вашей машине достаточно оперативной памяти, и пусть ОС сделает всю тяжелую работу.
Пара дурацких идей. Во-первых, это вроде как делает Puppy Linux; он время от времени синхронизирует ваше рабочее пространство с постоянным. Кажется, это делается с помощью умных скриптов и простых команд копирования.
Во-вторых ... что, если бы вы запланировали rsync между ramdisk-> реальным диском время от времени?