[Решено] Как бы правильно сделать зеркало SSD на HDD (unionfs/aufs???)
Решил собрать новый комп, не удержался, заказал в числе прочего SSD на 60 Гб для ускорения. И вот только теперь изучаю вопрос.
Так-то всё хорошо. Как распределять каталоги по разделам и дискам, как выбрать ФС, что держать в оперативе - много где обсуждается, это не вопрос.
А смущает меня, собственно, надёжность всего решения. Нет, что пишут люди, я уже прочитал (типа, как не убить сразу SSD постоянной перезаписью). Я бэкап хочу на HDD - если сдохнет SSD, ну, значит сдохнет, пересобирать потом всё чтобы не пришлось.
Один вопрос я сейчас не понимаю. Итак, принципиально я решил использовать SSD не для кэширования HDD, а для хранения раздела с программами, чтобы повысить скорость их запуска. (С кэшированием-то всё просто было бы.)
Но хочется в то же время для надёжности держать копию этих данных на жёстком диске - что-то вроде программного зеркала типа RAID, но так, чтобы сохранить производительность SSD. Т.е., чтобы всё работало с SSD, а изменения копировались на HDD в фоновом режиме (или наоборот?). Т.е. предполагаю иметь раздел на SSD и раздел такого же размера на HDD, просто как резервное хранилище. Как их скорешить, пока не понимаю.
Путь прямолинейный - простой бэкап:
- собрать всё на HDD;
- сделать копию на SSD;
- использовать в работе SSD;
- периодически делать бэкап на HDD.
Нет в таком решении прозрачности, которая есть при использовании обычного RAID.
Все постоянно пишут про использование unionfs/aufs для таких вещей, но никак не соображу, как прикрутить её в данном контексте. Как я понимаю unionfs (она ведь не для того, что мне нужно, создавалась), изменения будут сохраняться на файловой системе с большим приоритетом. Можно сделать, допустим, так:
- собрать всё на HDD;
- потом системный раздел скопировать на SSD;
- смонтировать оба раздела с помощью unionfs (приоритет - у SSD);
- пользоваться;
- время от времени скидывать изменения обратно на HDD (через cron).
Это же ерунда получается - unionfs тут не нужен, это такой же бэкап. Хочется, чтобы последний шаг выполнялся сам в фоне и не время от времени, а постоянно при изменениях, т.е., прямо, как в RAID, но без ущерба производительности.
Или же можно так:
- SSD под unionfs на только чтение;
- HDD - чтение-запись;
- и периодически скидывать изменения на SSD.
Но тогда запись будет медленная на HDD. С другой стороны, там будет храниться только система (неизменяемые при обычной работе файлы), а я обновляю её раз в 2 месяца (по календарю). В промежутках лишь ставлю отдельные программы при необходимости. portage пусть всё собирает в tmpfs (оперативы у меня дохрена - она сейчас относительно остального дешёвая), а на hdd записывается только результат.
Может, я не пропустил какое-нибудь изящное решение вместо всех этих костылей?
PS. HDD у меня уже две штуки параллельно в RAID для надёжности. А рабочие (т.е. /home) данные будут храниться только на HDD и периодически rsync'ом копироваться на NAS, но это не столько для надёжности, сколько для синхронизации с ноутами, как "неотключаемый никогда общий репозиторий" (хотя надёжность тогда будет параноидальная - там тоже RAID из двух дисков; лишь бы молния в сеть не шибанула, но это отдельная история).
=========== Результат размышлений ===========
В результате, по крайней мере, для себя, я решил следующее.
1) Использовать SSD, как большой кэш HDD неэффективно.
2) Наилучшее решение - использовать SSD для хранения системы (программ).
3) autofs/unionfs - от лукавого (т.е. из EEEPC/Xandros, где поверх SSD с помощью unionfs монтировался ramdisk, чтобы пореже на SSD писать; если хранить на SSD только систему, файлы будут меняться редко и SSD не убьётся за разумное время)
4) Как лучше разбить на каталоги - варианты есть разные, более менее систематизированно описано здесь:
http://en.gentoo-wiki.com/wiki/Solid_State_Disk#HDD.2FSSD_combination
Но в этом деле нужен более творческий подход.
5) Какие использовать файловые системы - это вопрос до конца не устаканившийся, пока могу дать ссылку:
http://hakushka.wordpress.com/2011/08/13/ssd-disk-trim/
Тут хотя бы аргументировано объяснена позиция (хотя я сделаю по-другому, наверное)
6) TRIM - нужен (прощай, reiserfs! ты верно служил мне все эти годы ;).
Практически нужно в fstab добавить опцию discard, работает для ext3 и btrfs.
7) Ещё нужно добавить флаг noatime.
8) Данные на SSD убиться не должны, но я предполагаю делать бэкап с помощью rsync на раздел HDD того же объёма.
9) В случае проблем с SSD я просто буду грузиться с backup-раздела HDD (абсолютный минимум действий).
- Для комментирования войдите или зарегистрируйтесь
Если учесть, что оказ в
Если учесть, что оказ в дисках SSD характеризуется неспособностью изменить существующие данные, а не прочесть, то профита от зеркала не вижу.
PS: Опыта эксплуатации SSD не имею, так, что это просто рассуждения...
По идее-то оно так. Но разное
По идее-то оно так. Но разное пишут. Вот по этой ссылке, например:
http://habrahabr.ru/blogs/hardware/96896/
речь как раз идёт о потере данных.
$BOC(\pi, e)$
.
Я поступаю проще. Раз в неделю делается полный бэкап системы, а раз в день - конфигов. Ну можно еще дом. каталог хоть в раз в час. Только не зеркалом, а просто в архив пакуется.
Как вариант могу предложить запускать с периодичностью в фоне rsync - он и будет делать зеркало на ЖД. Системные файлы не изменяются каждую секунду, так что зеркало в реальном времени считаю излишеством. Часто изменяемые (/var, /tmp) тоже нет смысла синхронизировать. Ну разве что после крупных обновлений синхронизировать вручную...
ИМХО вы путаете технологии
ИМХО вы путаете технологии резервирования данных с технологиями защиты от аппаратных сбоев.
Рейд не бэкап. Это надо понимать четко. Бекап подразумевает наличие НЕСКОЛЬКИХ точек восстановления, и при определенных условиях способен спасти от аппаратных сбоев. Никакой рейд не может заменить необходимости делать резервные копии. Резервные копии по вполне понятным причинам надо делать на отличный от источника носитель.
В вашем случае зеркала несколько повышают скорость чтения (теоретически не более чем в 2 раза). О "надежности" сохранения данных, тоесть о возможности откатиться к ближайшей работоспособной точке восстановления речь не идет. На мой взгляд зеркало в домашних условиях - отличный способ увеличить стоимость собственного дискового пространства без особо видимых профитов. Куда как лучше былоб использовать второй диск в качестве резервного хранилища данных.
Теперь по поводу вашего ссд. По уму, вариант один - корень. На корне непостредственно bin sbin etc root ..., в общем все что меняется мало. Вары, темпы,хомы,портажи и прочая часто изменяющаяся белиберда - монтируются при загрузке фстабом. Просто и понятно. Сосно для этого и была разработана структура никсовых каталогов и возможность монтирования чего угодно куда угодно.
>>т.е. /home) данные будут храниться только на HDD и периодически rsync'ом копироваться на NAS
А не проще замонтировать нас в хому стационара и не напрягать систему рсинком?
Ну я вот к этому и склоняюсь,
Ну я вот к этому и склоняюсь, что просто надо делать копию периодически и всё.
Почему был вопрос - в интернете очень многие пишут, что можно применить unionfs/aufs в этой ситуации, но никто не пишет, как и зачем. Может, никто и не знает, пишут лишь "из общих соображений". Вот я об этом и задумывался. Пока смысла не увидел.
Что RAID и резервная копия - разные вещи, это понятно. Если, скажем, произойдёт некий программный сбой (допустим, на уровне модуля ядра ФС) и будут записаны неверные данные, испорчена файловая система - то сразу на обоих дисках вместе одинаково. RAID спасёт только от возникновения сбоев на уровне самих дисков, непосредственно в одном из них, т.е. аппаратных сбоев. Всё, что выше (модули ядра ФС и т.д.) - тут RAID не поможет.
Но и опасения есть как раз в надёжности самого SSD-диска. Поэтому и разговор был о некотором аналоге RAID. Т.е., как раз о борьбе с аппаратными сбоями.
По монтированию home по сети - NAS работает слишком медленно для этого.
Как раскидать структуру каталогов по дискам - это не вопрос, обсуждалось много раз.
$BOC(\pi, e)$
Насколько понимаю, речь идет
Насколько понимаю, речь идет не о "Супернадежном и офигительно нужном Кластере", и даже не об его узле. Ну не будет ваша домашняя машинка сутки работать, и что с того? Ну выгорит ссд, какие проблемы? Грузимся с лайва, восстанавливаем маааленький рут с резерва, правим загрузчик и фстаб. Дел минут на 10 (не учитывая времени подъема резервной копии). Имхо не стоит это трех килорублей за лишний винт на зеркало.
Нет, речь идёт, естественно,
Нет, речь идёт, естественно, не о кластере.
Восстановить систему из бэкапа - не вопрос. Вопрос в том, чтобы не лениться бэкапиться вовремя - все ведь забивают и я забиваю. В cron загнать бэкап надо.
А винты уже заказаны. Но отдельного винта для зеркала не предполагается. Два HDD в виде RAID - для всего-всего, и один SSD для рута с программами - просто чтобы быстро работало. Копию думал делать на HDD, там специальный раздел соответствующего объёма отвести. При необходимости просто SSD отключить и грузиться прямо с того раздела HDD, который копия SDD. Даже вообще ничего копировать не нужно, просто загрузочное устройство изменить, и всё.
Короче говоря, правильное решение, видимо - cron+rsync.
$BOC(\pi, e)$
Впечатления от системы.
Впечатления от системы. Программы стартуют мгновенно. Спасибо SSD.
Но есть и более приятная штука. Куча оперативной памяти не пропадает даром. Всё, что можно, я подмонтировал, как tmpfs. Результат:
>> time emerge libreoffice
...
real 34m4.266s
user 142m16.407s
sys 9m37.479s
Честно говоря, я не понял смысл user time. Я засекал сборку libreoffice секундомером, там получилось 34 минуты.
$BOC(\pi, e)$
(*)
Возможно, вы собирали в 4 потока.
Вот, я как-то сразу не
Вот, я как-то сразу не обратил внимание, а ерудна получилась. Процессор имеет 6 ядер с HyperThreating. Когда я загружался с SystemRescueCD, система видела 12 ядер. Сейчас смотрю - их только 8. Как система распределила реальные ядра? Судя по-всему система задействовала только 4 физических ядра и HyperThreating, а ещё два ядра вообще не использовались. Полез в ядро - а там лимит 8 ядер стоит. Так вот. Буду пересобирать и снова пробовать.
$BOC(\pi, e)$
Судя по всему вы включили в
Судя по всему вы включили в ядре ограничение на число ядер процессора:
CONFIG_NR_CPUS
Или добавили / указали по умолчанию параметр maxcpus для ядра.
user time - это общее
user time - это общее количество времени ЦП, которое процесс провел в пользовательском режиме. Максимальное значение = количество ядер/процессоров * на real time.