Назад | Перейти на главную страницу

Ленивое резервное копирование RAM-диска в Linux?

Краткое и грязное резюме: мне нужно что-то вроде кеша записи, который истощается только тогда, когда система не занята.

Я хочу что-то вроде этого вопроса RAM-диск и физический RAID с небольшим поворотом.

Для конкретной сборки, которую я часто делаю, я хотел бы сохранить вывод сборки на RAM-диске, который в конечном итоге будет записан на диск. Одна конкретная цель, которую я создаю, - это действительно связка cp, tar, gzip и тому подобное, поэтому я привязан к диску. В жестком цикле отладки я хочу, чтобы он был быстрым, и не особо беспокоюсь, если результат сборки будет разрушен из-за отключения питания. Однако было бы неплохо, если бы виртуальный диск синхронизировался с диском, когда система не была занята. Я могу представить, как сделать это с помощью cron, но я прошу вас всех на случай, если есть более последовательное решение, которое сочетает в себе характеристики другого вопроса (ramdisk, который переполняется на диск) с этим новым поворотом (при достаточно простаивающем диске время содержимое ramdisk тоже попадает на диск). В идеале все выглядит как одна точка монтирования, где я устанавливаю общий размер и количество используемой оперативной памяти.

--- обновлено ---

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

но я прошу вас всех на случай, если есть более связное решение, которое сочетает в себе характеристики другого вопроса (ramdisk, который переполняется на диск) с этим новым поворотом (учитывая достаточное время простоя диска, содержимое ramdisk делает это на диск тоже).

То, что вы просите, - это механизм отложенной записи, то есть записи на RAM-диск получают приоритет над записью в постоянное хранилище, но все данные в конечном итоге записываются на диск, верно?

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

Как бы забавно это ни звучало, вы можете обойтись без зеркала LVM для завершения этого процесса.

  1. Сделайте RAM-диск членом группы томов с физическим диском.

  2. Отразите ramdisk на свой жесткий диск. Обратите внимание, что зеркала LVM зависят от направления, т.е. данные передаются от одного PV к другому в одном направлении.

  3. Смонтируйте том LVM в качестве единой файловой системы.

Записи помещаются в буфер и записываются на виртуальный диск на основе LVM (а также на физический диск, благодаря зеркалу). В отличие от RAID-1, где записи являются синхронными и параллельными (оба диска записывают одновременно), зеркало LVM является асинхронным и последовательным (основной диск получает запись, затем LVM передает запись в зеркало). Это близко (но не на 100%) к тому поведению, которое вы ищете. Имейте в виду, что LVM оказывает давление на ожидающие записи для очистки на диск, поэтому любой "холостой ход", который вы видите, будет измеряться в лучшем случае секундами, в худшем - неполными секундами.

Обратной стороной этого механизма является то, что теперь у вас есть очень хороший механизм сохранения. При запуске создайте свой ramdisk и отразите на нем существующий диск; как только зеркало будет завершено, разбейте зеркало и измените направление (ramdisk -> hdd). Это означает, что каждый перезапуск приведет к тому, что ваши данные будут помещены на ramdisk, а непосредственно перед выключением будут записаны с ramdisk обратно на жесткий диск. Вероятно, это может быть сценарий на Perl или сценарий оболочки.

Я уверен, что есть и другие способы сделать это, но это самая быстрая версия. Я подумаю об этом еще немного и посмотрю, что смогу выяснить.

Вы описываете именно то, что должен делать кеш диска вашей операционной системы. Современные ОС очень хороши в этом, если в их распоряжении достаточно памяти.

На мой взгляд: дайте вашей машине достаточно оперативной памяти, и пусть ОС сделает всю тяжелую работу.

Пара дурацких идей. Во-первых, это вроде как делает Puppy Linux; он время от времени синхронизирует ваше рабочее пространство с постоянным. Кажется, это делается с помощью умных скриптов и простых команд копирования.

Во-вторых ... что, если бы вы запланировали rsync между ramdisk-> реальным диском время от времени?