Буду немного писать не по теме и вообще - нужно же иногда людям просто так потрындеть!
Короче такая вот случилась преинтереснейшая история со мною на днях. Возможно кому-нибудь пригодится эта печальная повесть в качестве заметки.
Решил я как-то завести новый файловый сервер. Данные туда будут поступать постоянно и надо было сделать так, чтобы было хорошо, тоесть с возможностью расширения и управления массивом, чтоб не бомбить всё сразу, а постепенно докладывать новые диски и менять старые на более вместительные и таким способом наращивать ёмкость. Купил 2U стойку на 36 3,5" SAS/SATA HDD и навтыкал в неё 3Tb-ых (на тот момент времени цена за гиг у них была самая адекватная) дисков составленных парами в первом рэйде, а поверх накатил LVM с ext4 64bit разделом... короче всё в лучших традициях и самым фэншуйским образом, чтоб работало.
Всё шло хорошо, сервер радовал - знай подтыкивай к нему очередные диски, да расширяй фс в своё удовольствие. Единственное неудобство с большими массивами resize2fs не работает в он-лай режиме, хотя по документации к файловой системе на то никаких оснований нет. Да и фиг с ней, можно и в оф-лайне делать, правда только ночью в рамках сервисных работ (чтоб никому не мешать)... процедура длится около полутора часов... терпимо короче.
И вот подтыкиваю я в очередной раз свежую пару новеньких 8Tb дисков, настраиваю рэйд, добавляю к группе лвм, переношу лвм-ные экстенты с 3Tb рэйда, вытягиваю 3Tb диски, расширяю группу и жду ночи чтоб расширить ext4 раздел. Ночью останавливаю сервак, для большей надёжности коменчу в фстабе лвм-ный диск и через перезагруз размонтирую систему, прогоняю e2ckfs - без ошибок... начинаю расширение... всё гуд, ошибок нет - поздравляем, теперь ваша система имеет такой-то новый объём, всё короче типа гуд... монтирую - ERROR!!! Неопознанная файловая система, схреняченный суперблок, бла-бла... ночь, я после работы, глаза уже вытекают и тут на те! Тоесть поясню что случилось - в процессе растягивания что-то пошло не так и файловая система вся покоцалась.
Ещё пару часов попинал мертвеца, переключился на аварийную работу с серверов backup и спать. Спать не получалось - в голове проносились разные варианты что ещё можно сделать, где ещё нужно копнуть, как ещё попробовать и т.п.. Припёрся на работу со спичками и давай ковырять сдохший ext4... а там же ёмкость не пара гигабайт а уже 40Tb насобиралось и любое движение прибивало сервак на десятки часов, плюс весьма негативно сказалась экономия на RAM-е - имеем всего лишь 8Gb плюс 16Gb свапа (думал нафиг надо переплачивать за память на файловом сервере когда строил).
Ковырялся я так с пару дней, перепробовал всё и даже больше. В результате пришло прнимание того, что если бы данные просто лежали и навернулась фс то шанс их вернуть был бы вполне реальным, а вот то, что произошло в процессе растягивания с ext4 свели все попытки к нулю! Причём не диски подвели, не рэйды и не LVM - там всё норм и работает дальше, а вот файловая система при изменении размера подвела (хотя перед этим сто раз растягивал без проблем). Закончилось форматированием по-новому. Теперь потихоньку переливаю на этот сервак инфу с бэкапа и сижу размышляю как жить дальше. Конечно очень удобно было расширяться и для меня такое решение самое подходящее, но авария выявила слабину и теперь придётся разработать иной подход. Веры в надёжность используемых механизмов больше нет.
Мысли у меня на данную тему следующие. Лучше большие массивы не кантовать ибо опасно. Можно оперировать на уровне экстентов LVM и потихоньку поменять к примеру десять 1Tb дисков на один 10Tb, но если нет подстраховки то дальше этого лучше не действовать. В качестве менее геморройной альтернативы придумал вытягивать половину дисков из RAID массивов (они же в единице работают - зеркалом) и на оставшихся пробовать расширять ФС, если успех - возвращаем диски и рэйд актуализируется, если крах - грузим вторую половину, первую зеруем и возвращаем для синхронизации... сервак, конечно, офигеет на неопределённый срок и есть вероятность грохнуть рэйд если где-нить вылетит диск, но лучше так чем как у меня получилось, да и бэкап же есть! Можно перейти на систему "куча виртуальных дисков работает веселее чем один большой и грустный" - тоесть забиваем очередной LVM раздел и не расширяем его, а тусуем туды-сюды по рэйдам, а как забъётся заводим новый. С одной стороны надёжность даже увеличится т.к. если где-то что-то навернётся то колдовать надо будет над одним относительно маленьким разделом, но с другой стороны повышается сложность администрирования и на ум приходят лишь анекдоты про пользователей с веником разбитым на двадцать разделов и вроде занято лишь пол ёмкости HDD, а места нигде нет. Короче лажа как ни крути.
Предвещаю советы бросить "этот глючный" ext4 и накатать такой суперпуперский xfs/zfs/btrfs/.../xyzfs. Я на это могу сказать лишь то, что никаких личных предпочтений в энтерпрайзе быть не должно - только фактические предпосылки. А предпосылки мы имеем следующие - у ext4 хотябы какие-то механизмы есть на случай аварии, что нельзя сказать про другие файловые системы! Это собственно основное и главное. Любая фс может упасть и насколько мне известно 100% отказоустойчивых пока что в природе не существует. Имел опыт реанимации боевой xfs на одном из серверов запасной копии, экспериментировал над остальными линуксячими фс-ками, а также в моей практике имеется несчётное число реанимаций FAT16-32, NTFS в разных версиях и немного гламурненьких эпплавских систем поскольку в своё время несколько лет работал на восстановлении жёстких дисков и информации (чем и сейчас периодически страдаю). Посему ext4 сам выбираю и могу рекомендовать к использованию как наиболее пригодную. Но если кто-то имеет хороший опыт и желание указать то с удовольствием впитаю свежую мудрость.
Ещё хочу сказать слово про резервное копирование. Никаких компромиссов - это должно быть сделано и точка! Не важно что потянет доп.расходы - представьте что будет если и всё поймёте (только представляйте чтоб как на яву а не для галочки). Должен быть бэкап, бэкап бэкапа и ещё в шкафу в удалённом офисе копия. Если бы вы только видели глаза людей просящий восстановить данные!
Собственно вот и всё.