Поэтосамое по-настоящему

Если вы хотите поеба потрахаться по-настоящему, предлагаю такой вот метод:

  • Создаете ZFS-том терабайт эдак на шесть (меньше не пробовал) на FreeBSD 8.1-RELEASE/STABLE.
  • И записываете туда пару-тройку сотен тысяч файлов с русскими (и европейскими) именами в кодировке UTF-8.
Если вам очень повезет, то вы получите ненулевое количество каталогов в которых нельзя сделать ls или find (и естественно, все остальные, получающие список файлов, вроде du). Если повезет слегка, то ls работать будет, а вот rm * - нет. И rm конкретный-файл - тоже нет.

Единственная выявленная система - это очень длинные, под лимит, имена файлов. Не только русские, но и европейские (с умляутами).

Мне повезло дважды, обоими способами. Воспроизводится на ура: ls /archive/kuda/nado - и сразу kernel panic. В первом случае (не работает ls) - со стек-трейсом (уходящим из directory lookup в недра ZFS), во втором (не работает rm) - просто Fault 12. За один раз, это нифига не вероятностный процесс. И на 8.1-Release и на свежей -STABLE

Если вы хотите усугубить свое счастье, то можете сделать zfs destroy нужный раздел, оно в этом месте тоже упадет, но уже с концами, смонтировать такой том или сделать zpool import - тоже не получится.

Короче, починить это нельзя (clri на zfs нет), можно только замести под ковер: все файлы, кроме неудаляемых, из zfs-раздела убрать, а сам раздел перестать монтировать.

Бился об эти грабли два дня (а том у меня один на все, кажный раз перестановка, точнее подъем с бэкапа). Научился устойчиво воспроизводить. Тьфу.

Конструктив: у меня UTF-8-имена берутся от Самбы. Достаточно переделать их в cp1251 (настройками самбы: unix charset = windows-1251), как сразу все проходит. При этом европейские умляуты Самба как-то разумно перекодирует (умляуты понижает), а больше мне ничего и не надо.

Так как на этой машине нет не просто кернельного отладчика, но и компорта - не понимаю, как послать внятный PR (да и компорт мне сувать особо некуда....)

Руки тянутся к опенсолярису (в надежде получить ZFS получше), ибо слезать с ZFS совсем не хочется, при всех этих болезнях - она хотя бы не разваливается при падениях (ну если не в момент zfs destroy развалилась), не требует нарезки диска на куски, не нуждается в многочасовых fsck, не перестраивает целиком raid после ресета, и так далее.... Хотя, может быть, аппаратный RAID и UFS+gjournal в сумме создали бы меньше веселых минут.

P.S. Заодно вскрылась причина еженедельных ночных падений: /etc/periodic/weekly/310.locate

Comments

Алекс, несколько в сторону, но так сходу не нашёл:
А почему не нативная для ZFS солярка?

Да у меня исторически везде FreeBSD, еще с версии 2.2 (т.е. с более старыми я тоже игрался вперемешку с линуксами, а начиная с 2.2 - залип на фре).

Ну то есть если это самопадающее поведение продолжится, тогда буду думать в эту сторону. Но отвык я от солярки, с санами дела уже лет 8 не имел (а писишная солярка в те годы была так себе...). Но к FreeBSD я сильно привык.

Понятно-понятно.
Ну, если вдруг захочется, у меня тут валяется 1.1.5.1 release, там ещё AT&T-шный код был вроде.

А на предмет спарк-писюк, то вобщем-то вроде всё нормально сейчас. Моя история связи с соляркой началась во время 2.6, так что что было до этого я просто не знаю, но вобщем-то всё в рамках платформы.

FreeBSD 1.1.5.1 и даже более старые - у меня должны быть в закромах. Толку то с них. И BSDI/0.9 должна быть в тех же закромах.

Солярка - да, даже 2.5 писишная уже работала более-менее, но вообще это все было довольно убого в сравнении с одновременными с ней бесплатными юниксами. То есть не было никаких причин этим пользоваться. Не говоря о бедности набора драйверов.

А в этом смысле... Да вроде сейчас железо более-менее ровнее стало. Да, есл итам хитрый какой райд-контроллер и нету софта от производителя, то ничего не поможет, а так... Я ставил на достаточно разные машинки и ничего. Сейчас вон, домашняя машинка рядом стоит, вообще слушаю флешевую трансляцию "Эха" (я имею ввиду, что она под соляркой стоит). Раньше да, было намного проблемнее завести что-то нестандартное-неподдреживаемое сантехниками. Вдобавок, с появлением оупенсолярки вобщем тоже стало лучше в плане поддрежки "всякого-разного".

Да я уже качаю с руторрента (сановский, не open), посмотрю в виртуальной машине что за зверь.

Ну, опять же из опыта...
Есть (было до недавнего времени, сейчас уже не слежу после того, как оракл купил): Экспресс, Солярис, Оупен.
Экспресс -- понятно, самый распоследний билд.
Солярис -- сантехническое чудо
Оупен -- сообщество пилит.

Так вот по опыту, на сколь-нибудь нестандартное железо лучше всего встаёт оупен. И как-то с его поддержкой оказывается проще. Не могу сказать, что мой опыт = репрезентативная выборка, я на 5-6 разных машин всего ставил.

Система пакетов, опять же.

Чесслово, будет возможность -- попробуйте Оупен.

Да откуда *сейчас* нестандартное железо?

У меня ну максимум наплатный ethernet - нестандартный, но и его я готов на интеловый серверный многопортовый гигабит поменять, как только припрет.

Звуковушка может кака ;)

На самом деле это скорее впечатление.

Мне приходилось пару раз ставить на бредовые машины. Оба раза -- Деллы. Вот ни на один из них обычная не встала.

Один из них собственно сейчас моя домашняя машина. Если надо -- могу дать шелл, если чего посмотреть хочется.

Да не надо шелла, у меня оно через 20 минут докачается, если торрент нам не врет, завтра выходной, на неделе - каникулы. Пощупаю, если не стошнит - буду держать как запасной вариант.

Я правильно понимаю, что всяких подарков от ZFS (что вышеописанный, что с arc_max, вечной FreeBSD-шной бедой в малой памяти) - в Солярке практически нету?

Могу сказать так: "я пока не сталкивался".
Но готов провести эксперимент.

Решил небольшой эксперимент произвести:

onst int FOLDER_IN_FOLDER_DEPTH = 24;
const int ELEMENTS_IN_FOLDER = 4096;
char** folders;

void create_folders(int _depth)
{
int rv;
if(_depth >= FOLDER_IN_FOLDER_DEPTH)
{
return;
}

for(int subfolder = 0; subfolder < ELEMENTS_IN_FOLDER; ++subfolder)
{
rv = mkdir(folders[subfolder], S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if(rv)
{
printf("Error: %d", rv);
}
chdir(folders[subfolder]);
create_folders(_depth+1);
chdir("..");
}
}

Сейчас крутится

rezdm@rezdm-sol:~/space/test/x$ time ../fs

Это надолго:

CPU states: 63.1% idle, 4.7% user, 32.2% kernel, 0.0% iowait, 0.0% swap

Посмотрим-посмотрим.

Маньячить так маньячить.

Проблема, как я ее понимаю - в плохих именах файлов. То ли слишком длинных, то ли там коллизия на хэшах какая-то, то-ли еще както. Не только в количестве.

За 76 минут оно создало столько файлов, что за 6 часов я так и не дождался результата time find . -type d | wc -l

А про файлы так. У меня есть опыт, когда торрент закачивался с кривущим именем (кодировка спутана или rtorrent косячит -- не знаю). В икстерме показывает кракозябры, в путти показывает как знаки вопроса, по самбе фар не заходит в родительский фолдер, по сцп (в виде штепселя к фару) не показывает фолдер. Тогда переименовываю в икстерме или в гноме (пока другого пути не нашёл. Это какие-то отдельные закачки, а так всякие -там умляуты, кириллица -- вроде нормуль.

У меня на полмиллиона файлов - проблемных нашлось несколько штук всего. И проблем - две разных.

Это оказался какой-то дивный новый мир, весь расфорканный и он меня пугает.

Где у OpenSolaris правильное гнездо, genunix.org?

Версия 0906, взятая с opensolaris.com - мне не предлагает сделать загрузочный ZFS из трех предложенных дисков, что мне обидно. Наверное, нужна версия поновее...

Есть вот еще NexentaStor - слова вроде правильные написаны и 12TB used storage в бесплатном варианте меня вполне устраивают (и, подозреваю, ограничение легко выпилить если приспичит).

Самое тысызыть правильное место — первоисточник http://dlc.sun.com/osol/opensolaris/2009/06/osol-0906-x86.iso ссылка с http://hub.opensolaris.org/bin/view/Main/downloads

Это livecd, он же установщик, он же сразу делает ZFS (а больше ничего не делает по-моему).

Ну вот установщик предлагает мне выбрать один из трех дисков (кои я ему через VM сделал) для установки.

А я хочу - выбрать сразу три и сделать на них Raidz. Если выбираю один, то дальше иду в часовой пояс и все дела....

Пардон, отвечу тут, ибо мобайл жеже не позволяет отвеить под нужным реплаем.

Так это, поставить на первый диск, а после установки организовать нужные зедпулы

Так это, поставить на первый диск, а после установки организовать нужные зедпулы

я сейчас ушел по тутошним горкам гулять и ответить уже только ближе к вечеру смогу

В-общем, гугл врет мне, что GRUB не умеет с RAIDZ грузиться.

Сделать root с 4-way mirror гигабайт на 50 мне не в падлу, конечно, но обидно :).

Буду пока в VM развлекаться, че мне....

raidz boot есть, натурально, только во Фре.

Ну с соляркой я уже осознал, что самый правильный способ - это рутовая FS на двух флэшках в зеркале....

Так чего-как получилсь?

Я пока в VM развлекаюсь.

В VM все получилось, а на реальном железе - я решил сначала временный мейлсервер и роутер поднять на всяком мусорном железе в уголочке, а потом уже мучать ZFS в полный рост.

А то у меня дома если интернет выключить на полчаса или почту на час - жены и дети начинают скулить под дверью....

Напомните, на какой версии OpenSolaris остановилась в развитии? Куда Oracle послали разработчики, полагаю, напоминать не надо?

Я вот совершенно не слежу за темой, поэтому спрошу.

Ключевые разработчики получали зарплату в Sun или были сторонними?

Кстати, о некрофилии - я на тот новый год от тоски сделал пару работающих образов под Bochs с Linux 0.99p13 (Slackware 1.0) и 386bsd 0.1 - в первом удалось не только запустить иксы, но даже собрать Мозайку, правда не совсем аутентично, т.к. использовался "современный" lesstif ввиду протеряных где-то пиратских сорцов мотива, и оно даже открывает сайты, как может, конечно. А во втором случае все много грустнее, т.к. интернет тупо протерял порты для данного мегарелиза, так что дальше сборки ведра дело не пошло. Могу куда-нить выложить на поиграться, т.к. изготавливать это с нуля тот еще квест фор глори.

Ага. Вспомнил что меня еще останавливает.

Антиспам. То есть его можно только на основном MX оставить, конечно, но то что я получаю дома почту с несколькоминутной задержкой (по uucp :) и обрабатываю антиспамом вторично, эффективность антиспама сильно поднимает.

Это ограничивает меня FreeBSD/Linux (ибо Spamtest/Kaspersky Antispam), а от Linux меня тошнит.

Хотя конкретно для целей антиспама - я смогу поднять FreeBSD в virtualbox :)

У меня похожая проблема имелась, хотя utf и терабайты тут не причем. в пуле 6 дисков, raidz2. При очень активном дисковом I/O (например при zpool scrub), вся дисковая подсистема отваливается. Система на 8.1-RELEASE. В целя эксперемента обновился на -STABLE и обновил пул до 15, zfs до 4. Ничего не изменилось. Странность заключается в том, что это воспроизводится лишь на одной машине. Есть аналогичные машинки с объемами и побольше, но там просто все зашибись уже больше года. ZFS да - вещь крайне классная, однако я зависим от FreeBSD - идет на ней разработка. Поэтому буду пробовать найти причину. Вообще это не совсем качественная прослойка между FreeBSD и ZFS - тк на той же версии ZFS/Zpool на Solaris на той же системе все заебок. Еще не работает hot spare. Жду 28 версию - она в виде патчей уже доступна для тестирования.

"Вся дисковая подсистема отваливается" - это по atacontrol list дисков не видно?

У меня такой сигейт двухтерабайтный новый попался - на винде работает отлично (воткнутый в адаптек 5805), а при попытке запихать его в FreeBSD-шную машину с ICH8 - WRITE_DMA timeout и до перезагрузки его нет.

> "Вся дисковая подсистема отваливается" - это по atacontrol list дисков не видно?

Ага, именно так. Команду atacontrol врочем уже не ввести - все замораживается если идет любое обращение к диску. Ядро живет, на пинги отвечает. Ну и сервисы, что диск не трогают тоже живут.

> при попытке запихать его в FreeBSD-шную машину с ICH8 - WRITE_DMA timeout и до перезагрузки его нет.

Вот это - интересная информация. У меня на этой машине также на Adaptec (не помню модель) и ICH8. Хм.

Да, 28-й zfs спасает (по идее) от падения при zfs destroy:

zpool import -F. Allows to rewind corrupted pool to earlier transaction group.

а вот нехер всякое в рот тащить.
я как году так 97-98 два раза поимел развалившуюся AdvFS на родной для нее OSF/1 на аппаратном RAID-5 так в обе технологии (аппаратные RAID5 и журналирующие FS) веру потерял и считаю, что чем проще -- тем лучше.
UFS в async -- вот правильный путь.

Ну без какого-то raid не получится, при этом зеркало - жаба душит, а graid5 - тот еще подарочек (у меня же не ДЦ с двумя фидерами, поэтому ресет по питанию всяко бывает).

А одиночный толстый диск - получается медленнее сети, даже если локально вставлен.

Кроме того gjournal - тоже в духе "всякое в рот...", а fsck на паре терабайт (не говоря про шесть) - это на какое-то чудовищное время....

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

и твой случай, вроде как, в эти рамки попадает.

Кто говорит, куда почитать?

А, ну то есть количесто inodes уменьшать.

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

А вот такое безобразие, возможно, лучше держать не в архивах, а имиджах дисков (можно и запакованных, но место нынче вроде некритично). Ну и маунтить автоматом куда-нибудь, если совсем под рукой хочется. Зато лишний миллион-другой файлов со странными именами будут спокойно жить в отдельном контейнере и не гадить в основную файлуху. Но телодвижения предпринять придется, да.

Не хочу телодвижений (хотя, конечно, имею их второй день уже....).

То есть имаджи в онлайне - удобнее, чем диски в шкафу, но очень хочется это именно в виде отдельных файликов иметь.

Так я к тому, что можно все такие имиджи автоматом на старте монтировать. Если их не очень дофига.

Все-таки идея одного контейнера с общей емкостью мне как-то ближе.

man growfs

все такое -- на отдельном md, расширять по необходимости (через truncate -s), монтировать в r/o

не-не. Это несексуально.

Нужно сделать большой том на zfs, на нем нарезать томиков скажем гигабайт по 100 и на них - делать мелкие тома на zfs же. Наращиваются без проблем, дропаются целиком, если вдруг что испортилось.

Уж если онанизм, то по полной программе.

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

Не факт, что они неизменяемые. Т.е. пока это так, но я тешу себя надеждой это дело как-то упорядочить.

{Reiser3,EXT{3,4}}FS / LVM-2 / Linux Software RAID-{5,6}

Нет, только не Linux!

Я в сентябре с ним в очередной раз посексуалился (в виде Amazon AWS) и больше не хочу.
У меня с ним невзаимопонимание.

> У меня с ним невзаимопонимание.

Ну если бы они возникло с LVM-2, LSR, или, там EXT3, это было бы предметно. ;-)

По этой теме уж всяко лучше Linux, чем какой-то там "оупенутый" Солярис, или же FreeBSD с её "пониманием" ZFS.

Ну у FreeBSD понимание ZFS всяко лучше, чем у Linux :)

Ну, во-1-х, есть такая концепция "лучше лишний стоп, чем лишний ляп".

А во-2-х, я как то не вижу места ZFS в связке "some-journaled-FS/LVM-2/LSR/Linux". Ничего против ZFS не имею, просто несколько странно слышать аргумент "(не)понимание ZFS" в контексте предложения альтернативного решения. Впрочем, и про мифическое "невзаимопонимание" тоже странно слышать. Тут, думается, дело из рода "желание -- тысяча возможностей, нежелание -- миллионы причин". Ибо мне лично сдаётся крайне невероятным, что вы, Алексей, не смогли бы себе забацать нормальный storage на вышеупомянутой связке.

ZFS за примерно год эксплуатации на больших объемах показала свою разумность (несмотря на то, что написано в исходном посте, "все равно ее не брошу").

После нее связываться с файловыми системами с отдельными контейнерами (а не общим объемом на всех) и с fsck - черезвычайно не хочется.
Ну и меня черезвычайно привлекает дизайн, когда RAID - это часть FS, а не нашлепка сбоку.

Кроме того, черезвычайно не хочется связываться с Linux и я делаю это последние лет 10 только если *никакого* выхода не осталось. Натурально, лучше винду поставлю, она за последние лет 10 создала меньше проблем. Не говоря о солярке, с которой все-таки многолетний и относительно позитивный (в отличие от Linux) опыт есть. Хотя мне и жутко не нравится, что сейчас происходит с расфоркиванием солярки, до состояния "хуже линукса" ее так можно быстро довести.

Давно не видел fsck. Journal replay -- да, бывает. А вот именно fsck...

По меньшей мере в теории оно там есть.

Это уже вопросы религии. Сколько времени в этом году вы потратили на секс с ZFS+FreeBSD, т.е. на практике. И сколько бы времени пришлось бы потратить на пару fsck(и вообще, сколько бы их реально было)? Причём секс в первом случае требует непосредственного участия, а выполнение fsck это чисто машинное время.

Ну так я же при этом еще получил массу удовольствия.
И понимание, что если не хотеть всякого странного (вроде очень длинных имен в utf), то оно уже работает. Пару лет назад это было не так.

Ну и с линуксом я потерял заметно больше времени на всякое странное, причем не за год, а непосредственно за сентябрь. Потому и хочу его видеть поменьше.

Ну так я же при этом еще получил массу удовольствия

Ну так с этого и надо начинать: "люблю в выходные потрахаться со всякой православной фигнёй".

Ну и с линуксом я потерял заметно больше времени на всякое странное, причем не за год, а непосредственно за сентябрь

Ну это уже разговор о тех самых конях. Если конкретно хочется кинуть камень в огород linux, надо говорить куда кидаете, и есть ли аналогичное во фре, и нужно ли оно вообще.
Во фре конечно всё намного кошернее - "если что, катапультируемся на солярис".

Я отнюдь не говорю что linux лучше, и что необходимо использовать именно его.
Просто аргументация опёртая на fsck и то что где-то с linux'ом пришлось повозиться(причём не факт что это вообще касается этого nas+mail+роутера) довольно слабая.

Ну да, от Линукса меня тошнит ровно с 1995-го года, натурально. Хотя с поправкой на GPGPU - пора уже начинать и привыкать.

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

Ну, если уж вписываться в холивар, то не могу не заметить, что а) MySQL под Linux'ом всё же живёт быстрее, чем под FreeBSD и б) несмотря на количество NAT'ов во FreeBSD, линуксовый всё равно лучше на больших обьёмах и количествах сессий (гигабит в лёгкую).
Хоть я линукс тоже очень-очень не люблю. Раздолбайская она какая-то :)

я думаю UFS на современные объемы стореджа вернется лишь когда соизволят http://jeffr-tech.livejournal.com/22716.html поделиться ;) Если 6 TB и больше - это, в зависимости от полезных даных - часов 6 fsck. Журнал на GEOM еще вариант. Но для многих ZFS крайне вкусна в связи со снапшотами - у UFS не так культурно обстоят с этим дела.

а чем и кто должен поделиться? tunefs(8). -j enable, не оно разве (HEAD), на RELENG_8 не смотрел

man gjournal сообщает нам:
For the best performance possible, soft-updates should be disabled when gjournal is used.

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

эм...
-J и -j у tunefs = разные вещи. -j это то что сделал Jeff.

[tiger@laptop]/usr/src%svn log -r 207141
------------------------------------------------------------------------
r207141 | jeff | 2010-04-24 10:05:35 +0300 (сб, 24 апр 2010) | 7 lines

- Merge soft-updates journaling from projects/suj/head into head. This
brings in support for an optional intent log which eliminates the need
for background fsck on unclean shutdown.

Sponsored by: iXsystems, Yahoo!, and Juniper.
With help from: McKusick and Peter Holm

------------------------------------------------------------------------

в RELENG_8_1 этого нет. возможно был mfc в RELENG_8 (но уже гарантированно после 6 Aug)

А!

Я то в 8.1 смотрел.
Ну дай то бог, по меньшей мере часть проблем это снимает.

С другой стороны, другие то проблемы никуда не деваются, как я понимаю
- пересборка graid5/gmirror после неаккуратной остановки
- отдельные устройства под журнал, иначе медленно.

На файлах нулевой длины воспроизводится?

Ну у меня то файлы не выдуманного размера, а чисто архив книжек и фотографий.

Поэтому - не пробовал и надеюсь, что cp1251 в именах файлов - полечила (пока не воспроизводится, хотя пара плохих архивов уже туда уехала)

Дык для тестирования куда как приятнее растарить мааленький архив с одними именами - и проверить. Ибо прикладывать майлбомбу наверное некошерно. Всё же реальная бага в zfs это очень, очень неприятно.

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

Что концептуально - неправильно.

Ага, наступал на похожие грабли недавно. Только там не было длинных имен, а сложились несколько факторов сразу (но пул был < 4T), в результате имеем неимпортирующийся пул (точнее, оно его находит и пытается что-то сделать, но вешается насмерть в процессе).

Вылечилось путем загрузки линукса, и импорта-экспорта при помощи zfs-fuse.

Про PR: включи отладчик и GDB_UNATTENDED И текстдампы.