Выбор отказоустойчивой файловой системы для FreeBSD?
Случилось тут у меня сегодня страшное, и я в растерянности.
Хроника пикирующей FS: — весь день 01.06 — изменения в коде приложения, запись на том UFS, как он был создан при установке FreeBSD 8.2 (mount ufs, local, noatime, soft-updates), background_fsck=«NO».
— вечером поднял туннель на главный сервер, решил забекапить, как доеду до дома
— через три часа сервак не отвечает, в офисе никого нет
— наутро попросил включить сервак (был выключен, работал по временной схеме без UPS через обычный сетевой фильтр)
— допрос с пристрастием местной Гюльчатай (уборщицы) выдал «насяльника, я фильтра выключила, потом включила»
— все файлы, которые менялись в этот день (01.06) имеют нулевую длину
Файлы в итоге восстановил (включенный backup изменений в редакторе — хорошо), но остались вопросы:
1. Почему убились именно эти файлы, особенно учитывая, что сервак перегружался раз 5, перед моим уходом перегружался тоже, и все файлы были на месте (не очень важно).
2. Как сделать так, чтобы так не было? :)
Понятно, что там будет UPS, но все же…
При этом сама производительность тома не имеет особенного значения, имеет важность только надежность хранения (офис удаленный, не наездишься). В идеале, найти решение, которое бы при установленном на usb-диске руте апача и базе mysql позволяло бы отключать электричество, выдергивать диск из usb, с тупо откатом на предыдущее рабочее состояние. Такое возможно? А как? А если там уже создан том и лежат данные?
Заранее спасибо гуру за ответы, у меня сейчас что-то временный коллапс думательных мышц… :(
UPDATE: создал три раздела на usb диске, поднял zpool mirror на двух, на третьем spare, set copies=2.
К сожалению, только один диск. Требования такие — один диск, и он usb. И на нем — БД и веб. И это требование заказчика. Был бы обычный сервак, поднял бы gmirror. но это по-прежнему не решает вопрос с тем, что после падежа сервака fsck чего-то-там нашел, и решил, что содержимое файликов — лишнее. С gmirror он бы это решил все равно, и куцые файлики лежали бы на двух винтах…
верохний комментарий на youtube: «I have a test system running Opensolaris 2008.11 with 8 disks in a raidz2 pool. To test this, I unplugged the power on two of the disks at once(Unlike Sun's marketing dept., we can't justify the destruction of a disk here). The reads paused for about 5 seconds and then resumed without any intervention.
It appears that this bug was fixed between April and November 2008.
»
Можно и без миррора. По дефолту, пул хранения создается вообще без избыточности, но тогда вы сможете только детектить ошибки, но не исправлять их. Можно сделать пул с избыточностью из двух разделов одного девайса.