Без них мне-бы не удалось со всем этом разобраться.
Итак, какие моменты важны, чтобы разобраться?
1. Есть некая ошибка.
2. Задать вопрос знающему человеку, которого еще нужно как-то разыскать.
3. Получить значения переменных по ошибке.
4. Дождаться ответов.
5. Применить полученное.
6. Посмотреть результат.
7. Сказать всем спасибо.
Вроде все просто.
Если первый момент понятен, то со вторым придется постараться.
Как уже писалось выше, мне никак не удавалось получить переменные запрошенные Steven Hartland.
В отладчике все-равно выходили эти злобные переменные как "value optimized out".
Т.о. п. 3 превратился в целую эпопею.
Во первых моего свапа в 4Gb не хватало для сбора информации.
Был найден и настроен новый swap диск на 80Gb
ee /etc/fstab
Код: Выделить всё
#/dev/mfid0p3 none swap sw 0 0
/dev/mfid6p1 none swap sw 0 0
Мир перекомпилирован.
Ядро тоже.
Порты обновлены тоже.
На самом деле это делалось не специально, но так получилось в процессе поиска проблем с самой zfs.
Пишу, просто, что такой момент был.
Попытки сделать как написано на https://wiki.freebsd.org/DTrace/KernelSupport
Ничего нового не давали. Поиски по форумам тоже.
Было написано новое письмо, но уже другого содержания, Андрею Лаврентьву. По теме отладки.
Совместно добились результатов.
Итог:
Код: Выделить всё
Здравствуйте, Андрей,
Спасибо за помощь!!!
Т.к. с Вашими подсказками удалось-таки получить значения в багрейсе!
Пришлось, конечно в бубен немного поиграть, но в итоге:
1. В кастомное ядро (фактически родной 10.2 генерик + нужные мне опции) было добавлено:
# for debug
options DDB
options KDB_UNATTENDED
#options INVARIANTS
#options ZFS_DEBUG
options OPENSOLARIS_WITNESS
(закомментированное не давало собираться)
Остальные параметры о которых Вы писали в конфиге и так были.
2. колдунства с /etc/src.conf при пересборке вообще ничего не давали, в итоге все закомментировал.
3. колдунства с /etc/make.conf , т.к. при пересборке я заметил какие именно строки выгоняет компилятор "сс" и это дало пищу для размышлений. Я стал добавлять в маке.конф по-немногу параметры с тем, чтобы увидеть их при компиляции.
Итоговый /etc/make.conf у меня получился такой:
#
CFLAGS-=-O2
CFLAGS+=-O0
COPTFLAGS-=-O2
COPTFLAGS+=-O0
CXXFLAGS-=-O2
CXXFLAGS+=-O0
# https://wiki.freebsd.org/DTrace/KernelSupport
STRIP=
CFLAGS+=-fno-omit-frame-pointer
DEBUG_FLAGS+='-O0'
Причем даже при таких параметрах я не надеялся получить результат, т.к. на последней стадии компиляции (это когда перед самым заветным "буилд комплитед") все равно поперли "сс -О2". И просто приличия ради сделал креш, но совершенно неожиданно получил значения нужных мне переменных.
Еще раз спасибо.
С уважением,
Demis.
Код: Выделить всё
Да не на чем, документация все время отстает, мне аналогично приходится
все время выискивать соответствующие параметры.
Иногда, ставить Stable или Current (HEAD) и смотреть опции Debug и
где, и как их прописывают, ибо в RELEASE'ах их затем убирают во всех
местах.
Понятно, что не всегда есть на это время...
Получил ответ от Игоря Кожухова:
Код: Выделить всё
Привет :)
Приятно видеть что русский народ все же тожа копает ZFS :)
Расскажу сразу про себя немного.
Я работаю с illumos - http://www.illumos.org/
Это форк от OpenSolaris.
У меня есть свой проект - frok form illumos - http://www.dilos.org
На BSD дел с ZFS не имел, так что тут могу дать совет - пробовать писать
IRC #openzfs или посмотреть контакты на openzfs.org
ZFS портирован на FreeBSD - он там не нативный был и есть - его пилят и
портируют патчи из illumos.
Проблема интересная, но к сожалению, такие проблемы очень тяжело ловить,
потому как нету четкого сценария для reproduce.
Для начала - можете попробовать подписаться на openzfs-developers &
illumos-dev maillist - и там описать свою проблему на аглицком.
К сожалению, я не могу туда запостить - боюсь что кроме меня и еще
некоторого народу никто не прочитает...
По вашему логу:
#3 0xffffffff81c1b209 at acl_from_aces+0x1c9
#4 0xffffffff81cd27e6 at zfs_freebsd_getacl+0xa6
Исходя вот из этих строчек можно предположить что тут именно bsd specific
ported + ACL over.
К сожалению, как писал ранее, не имел дел с FreeBSD & ZFS on it.
Далее...
В моих настройках по отладке прописано так:
в ee /etc/rc.conf
Код: Выделить всё
dumpdev="AUTO"
dumpdir="/usr/crash"
savecore_flags="-vv -m 15"
crashinfo_enable="YES"
crashinfo_program="/usr/sbin/crashinfo"
Число копий увеличено до 15.
в ee /etc/fstab
Код: Выделить всё
#/dev/mfid0p3 none swap sw 0 0
/dev/mfid6p1 none swap sw 0 0
В инструкции по багтрейсу я насал себе так:
Код: Выделить всё
kgdb /usr/obj/usr/src/sys/TEO/kernel.debug /usr/crash/vmcore.last
bt full
frame 5
p bp
set print pretty
fr 11
p/x *dn
fr 10
p/x *db
p от print
fr от frame
p/x не знаю от чего
Номера фреймов и имена переменных, ясен перец, для моего случая.
Сам вывод отладки здесь не привожу, он длинный.
Важен принцип КАК мы их получаем.
Соответственно получил, отправил, перешли к п.4.
Тоже получилиось не просто.
Полученные данные первоначально послал Александру Мотину,
т.к. как я уже писал, что у меня есть проблема с английским языком для такого уровня переписки.
Послал данные не сразу.
Сначала написал простое "тезисное" письмо с описанием известных мне проблем.
Потом уже отладочную инфу. Пока суть да дело, прошла неделя, пошла вторая, время идет.
Александр честно предупредил, что вопрос не простой и загрузка у него очень большая, но он постарается постмотреть.
А надо сказать (или просто напомнить), что по времени так совпало, что уже вовсю начались работы по подготовке 10.3 релиза.
И ясное дело, что народ очень занят в такие моменты.
Из переписки с Александром я узнал что по zfs из русско-язычных разработчиков есть еще Андрей Гапон.
И тогда посмотрев рассылки я написал Андрею.
Два дня тишины и вдруг приходит ответ. Краткий, как сестра таланта.
Меня как ошпарило - это то, что нужно...
Итак, ответ получен. Ссылка на рассылку:
https://docs.freebsd.org/cgi/getmsg.cgi ... freebsd-fs
Читаем в ней внимательно:
Код: Выделить всё
I suspect that the following change might be able to prevent future corruption
of your files, but it won't help with already corrupted files:
https://github.com/openzfs/openzfs/pull/81/commits/ee09d80ceafa7ff7930d1e45dddc21ca3d7a87cb
The following completely untested patch might help to avoid panics with the
corrupted files, but no promises:
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
index 4396c01334015..94b353d62e3e6 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
@@ -329,7 +329,10 @@ dmu_spill_hold_by_dnode
rw_exit(&dn->dn_struct_rwlock);
ASSERT(db != NULL);
- err = dbuf_read(db, NULL, flags);
+ if (db->db.db_size > 0)
+ err = dbuf_read(db, NULL, flags);
+ else
+ err = ENOENT;
if (err == 0)
*dbp = &db->db;
else
--
Andriy Gapon
Быстренько внес оба изменения, дождался выходных.
Переустановил ядро. По стандартному пути:
Код: Выделить всё
cd /usr/src
make buildkernel KERNCONF=TEO
make installkernel KERNCONF=TEO
Бац, фигня. Ну так лично мне показалось, что фигня.
Смотрю размер /boot/kernel/zfs.ko и старого /boot/kernel.old/zfs.ko никак не изменились.
Видимо при компиляции ничего не изменилось.
Да и поведение системы осталось прежним.
Ну и помните конечно (писал раньше, т.е. выше, на форуме) сколько мне нужно времени на каждый kernel panic.
Где-то подвох, написал про это Андрею, хотя помню, что такое иногда бывало.
Правда он ответил, что такое может быть (дословно - "Это не показатель.").
Но мне не успокоится, стал рыть дальше, основание простое - раз код поменяли, должен поменяться и размер...
Пересобрал ядро так:
Код: Выделить всё
make -j1 buildkernel KERNCONF=TEO
Код: Выделить всё
ls -lGA /boot/kernel/zfs.ko /boot/kernel.old/zfs.ko -r-xr-xr-x 1 root wheel
2967096 9 апр 15:41 /boot/kernel.old/zfs.ko -r-xr-xr-x 1 root wheel
2967224 9 апр 19:14 /boot/kernel/zfs.ko
переходим к п.6
И мои сбойные папки получили возможность удаления!!!
Да, я не мог их как-то поменять, но удалить теперь запросто.
А нафига они мне сбойные, тем более бэкап под рукой.
ПОБЕДА!!!
При этом нужно учесть и такой момент в ответе Андрея Гапона:
Код: Выделить всё
Правда сейчас я осознал одну непрятную вещь: есть вероятность, что при удалении
проблематичного файла может удалиться и какой-то другой случайный файл в той же
файловой системе. Поэтому, лучше перепроверить все ли файлы на месте, если есть
такая возможность.
Код: Выделить всё
Как я писал ранее, один из патчей может устранить причину, а значит он кандитат
на попадание в код. Второй патч это просто хак, чтобы как-то обойти последствия,
он в код не попадет.
Код: Выделить всё
Если пересобрать мир, то zdb тоже должен стать более устойчивым.
А сейчас я поудалял ЧАСТЬ сбойных папок и файлов.
Сделал скраб и запустил повторно zdb -cc -AAA hdd
Хочу посмотреть, что он-таки выдаст мне,
а потом еще мир обновить,
а потом еще версию до 10.3 дотянуть.
В общем, еще на месяц...
Осталось выполнить п.7 когда все завершится.
Вот собственно и все, на текущий момент все...
Самурай без меча подобен самураю с мечом, но только без меча,
однако как-будто с мечом, которого у него нет,
но и без него он как с ним..