Давненько я ничего сюда не писал. Почти месяц был без доступа к сети. Тяжело :)
За это время pjd@ успел наломать дров - пользуясь отсутствием Марселя он внес кучу изменений в geom(8) и в gpart(8). В частности, он изменил интерфейс взаимодействия между утилитой geom(8) и ядром. В связи с этим мне предстоит значительно повозится, исправляя sade, когда дойдут до неё руки...
А на данный момент, я добавил поддержку опции "-F" для команды "gpart destroy". Опция эта позволяет уничтожить таблицу разделов без необходимости удаления каждой её партиции. На мой взгляд - давно востребованная функция. Я даже где-то в списках рассылки видел шелл скрипт, выполняющий эту задачу.
Немного подробностей. Патч с реализацией этого функционала был готов ещё в конце июля, но тогда он ожидал одобрения от marcel@, затем от моих менторов. Так время тянулось в ожидании, а потом я попал в дтп и на месяц ушёл в оффлайн. Вернувшись, пришлось исправлять и патч (спасибо pjd :).
Марсель одобрил идею, которая заключалась в реализации всего функционала внутри gpart(8), без изменений внутри ядра. А именно, если пользователь указывает ключ "-F", то внутри gpart(8) в цикле удаляются все разделы таблицы, а затем уже уничтожается таблица.
С MFC этого функционала возникнут некоторые трудности, благодаря всё тем же изменения от pjd@, но проблема вроде бы решаемая. Так что через недельки полторы этот функционал появится и в 8-STABLE,
понедельник, 27 сентября 2010 г.
пятница, 23 июля 2010 г.
Максимальный размер freebsd-boot партиции
Один мой коллега из далёкого филиала пытался установить ZFS-only FreeBSD. Так как опыта в этом деле у него было немного, продолжалось это у него почти неделю (а он настырный :). Так вот, я его консультировал по IRC на сколько позволяли мои телепатические возможности и время, в итоге он сделал это, с чем я его и поздравляю. Обещал написать заметку на эту тему..
Но в общем-то, к чему я это рассказываю. Обнаружилась неожиданная особенность. Он вопреки всем мануалам, которых уже полно в Сети, создал партицию с типом freebsd-boot в таблице GPT размером в 1 МБ. В итоге, при загрузке он получал сообщение "Boot loader too large". Покопавшись немного в исходниках я выяснил, что это сообщение выдаёт код PMBR. На ассемблере последний раз я писал, наверное, ещё в универе, так что пришлось немного "помедитировать" над его кодом, хорошо что в нём отличные комментарии :)
В итоге решил добавить некоторые изменения в мануал gpart(8):
Но в общем-то, к чему я это рассказываю. Обнаружилась неожиданная особенность. Он вопреки всем мануалам, которых уже полно в Сети, создал партицию с типом freebsd-boot в таблице GPT размером в 1 МБ. В итоге, при загрузке он получал сообщение "Boot loader too large". Покопавшись немного в исходниках я выяснил, что это сообщение выдаёт код PMBR. На ассемблере последний раз я писал, наверное, ещё в универе, так что пришлось немного "помедитировать" над его кодом, хорошо что в нём отличные комментарии :)
В итоге решил добавить некоторые изменения в мануал gpart(8):
- для параметров -s и -b можно использовать суффиксы k, m, g и т.д.;
- размер партиции freebsd-boot не должен быть больше 545 Кбайт.
пятница, 9 июля 2010 г.
Отчёт за июнь
Так уж складывается, что большинство сообщений в моём блоге получаются в виде отчёта по проделанной работе :)
Июнь прошёл. Прогрессом в разработке sade похвастаться не могу. Его нет, т.к. нет времени.
Выложил исходный код в SVN. Из разработчиков написали двое - один спросил "что нужно для сборки?", второй - "узнал что есть такой редактор, где посмотреть?" :)
Первый собрал, понравилось, пожелал удачи :) Второй больше ничего не ответил.
По поводу того, что бы использовать sade в инсталляторе - в связи с последними событиями по импорту инсталлятора PC-BSD, думаю эта тема уже не актуальна. Так что будет просто удобная утилита для работы. В принципе, мне так даже проще :)
По просьбе двух товарищей с IRC канала #FreeBSD@RusNet закоммитил код новой netgraph ноды ng_patch и уже сделал MFC в 8-ку. Так же смержил почти все изменения в gpart из CURRENT в 8-STABLE. Включая и поддержку "gpart resize", MFC которой столкнулось с вопросом от Константина kib@ - "А не ломает ли оно KBI?". Другими словами, не повлияет ли изменение интерфейса в ядре на уже скомпилированные модули ядра. В результате пришлось вновь ковыряться в исходниках интерфейса KOBJ :) Ну и простой эксперимент показал, что подобные изменения не влияют на KBI. Новое ядро с расширенным интерфейсом g_part (там добавился новый метод resize) успешно подгружает старые модули g_part_xxx и они работают.
На очереди к MFC исправление для упомянутой мной ранее "особенности" реализации в определении размера сектора утилитой gpart. Теперь она научилась правильно определять размер сектора и больше подобные проблемы возникать не должны.
Так же, успел пообщаться с Марселем на тему реализации функции "gpart recover". Он дал несколько советов и попросил не останавливаться только на том, что уже сдалал, а подойти к проблеме более широко. Так что, появился простор для творчества, но времени всёравно нет :)
Июнь прошёл. Прогрессом в разработке sade похвастаться не могу. Его нет, т.к. нет времени.
Выложил исходный код в SVN. Из разработчиков написали двое - один спросил "что нужно для сборки?", второй - "узнал что есть такой редактор, где посмотреть?" :)
Первый собрал, понравилось, пожелал удачи :) Второй больше ничего не ответил.
По поводу того, что бы использовать sade в инсталляторе - в связи с последними событиями по импорту инсталлятора PC-BSD, думаю эта тема уже не актуальна. Так что будет просто удобная утилита для работы. В принципе, мне так даже проще :)
По просьбе двух товарищей с IRC канала #FreeBSD@RusNet закоммитил код новой netgraph ноды ng_patch и уже сделал MFC в 8-ку. Так же смержил почти все изменения в gpart из CURRENT в 8-STABLE. Включая и поддержку "gpart resize", MFC которой столкнулось с вопросом от Константина kib@ - "А не ломает ли оно KBI?". Другими словами, не повлияет ли изменение интерфейса в ядре на уже скомпилированные модули ядра. В результате пришлось вновь ковыряться в исходниках интерфейса KOBJ :) Ну и простой эксперимент показал, что подобные изменения не влияют на KBI. Новое ядро с расширенным интерфейсом g_part (там добавился новый метод resize) успешно подгружает старые модули g_part_xxx и они работают.
На очереди к MFC исправление для упомянутой мной ранее "особенности" реализации в определении размера сектора утилитой gpart. Теперь она научилась правильно определять размер сектора и больше подобные проблемы возникать не должны.
Так же, успел пообщаться с Марселем на тему реализации функции "gpart recover". Он дал несколько советов и попросил не останавливаться только на том, что уже сдалал, а подойти к проблеме более широко. Так что, появился простор для творчества, но времени всёравно нет :)
понедельник, 7 июня 2010 г.
Преступление и наказание.
Давненько я ничего сюда не писал. В связи с ремонтом в квартире всё никак не могу найти времени..
Итак, к чему такой subj? Май прошёл для меня плодотворно. Не только в связи с ремонтом в квартире, который проходит, на мой взгляд, ударными темпами, но и из-за событий связанных со мной и FreeBSD. 3-го июня меня "наказали" коммит битом в дерево src. Теперь я официально стал src-коммитером FreeBSD. :-)
Длилась эта процедура чуть больше месяца. Всё началось с предложения Константина (kib@) стать коммитером, на которое я дал согласие. Затем он написал обращение в FreeBSD Core Team с предложением "наказать" меня за мои деяния. На что core@ дало согласие. Моими менторами стали Константин Белоусов (kib@) и Александр Мотин (mav@). Далее последовали создание аккаунта на кластере freebsd.org и первые, традиционные коммиты.
Менторы курируют начинающих разработчиков. Советуясь с ними я должен освоить основные правила, которые применяются в проекте. Ну и главное, я должен согласовывать с ними все изменения, которые я собираюсь вносить в дерево исходных кодов FreeBSD. У меня два ментора. Причина в том, что сфера моих интересов слабо пересекается с интересами моих менторов. В качестве своих интересов я обозначил: подсистемы ядра GEOM, ATA, IPFW и файловые системы. Вот этим и буду заниматься в ближайшем будущем. Так же, я планирую перевести разработку sade в svn репозиторий FreeBSD. Так будет и мне проще, да и вдруг, кто-то решит помощь оказать?
Итак, к чему такой subj? Май прошёл для меня плодотворно. Не только в связи с ремонтом в квартире, который проходит, на мой взгляд, ударными темпами, но и из-за событий связанных со мной и FreeBSD. 3-го июня меня "наказали" коммит битом в дерево src. Теперь я официально стал src-коммитером FreeBSD. :-)
Длилась эта процедура чуть больше месяца. Всё началось с предложения Константина (kib@) стать коммитером, на которое я дал согласие. Затем он написал обращение в FreeBSD Core Team с предложением "наказать" меня за мои деяния. На что core@ дало согласие. Моими менторами стали Константин Белоусов (kib@) и Александр Мотин (mav@). Далее последовали создание аккаунта на кластере freebsd.org и первые, традиционные коммиты.
Менторы курируют начинающих разработчиков. Советуясь с ними я должен освоить основные правила, которые применяются в проекте. Ну и главное, я должен согласовывать с ними все изменения, которые я собираюсь вносить в дерево исходных кодов FreeBSD. У меня два ментора. Причина в том, что сфера моих интересов слабо пересекается с интересами моих менторов. В качестве своих интересов я обозначил: подсистемы ядра GEOM, ATA, IPFW и файловые системы. Вот этим и буду заниматься в ближайшем будущем. Так же, я планирую перевести разработку sade в svn репозиторий FreeBSD. Так будет и мне проще, да и вдруг, кто-то решит помощь оказать?
четверг, 29 апреля 2010 г.
sade - редактор диска, часть 5.
Немного новостей о ходе работы. Марсель закоммитил два исправления, о которых я упоминал ранее. Теперь, вроде бы нет препятствующих разработке багов.
Я же выделил код и объявления структур и функций для работы с устройствами, партициями и файловыми системами в отдельную группу файлов. Позже оформлю их в виде библиотеки. Написал код для получения информации о файловых системах и сохранения его в список, которой используется внутри редактора файловых систем. Сделал базовую реализацию редактора, пока что он отображает список партиций имеющих тип freebsd-swap и freebsd-ufs:
На список команд не обращайте внимание, это copy-paste из редактора партиций. В принципе, кроме того что видно в списке сейчас, информационная структура хранит ещё данные о том смонтирована ли файловая система и опции монтирования из /etc/fstab.
Сделал так же проверку на наличие меток glabel, под которыми данное устройство может быть смонтировано или записано в fstab. Правда пока эта проверка достаточно формальная, потому как перебрать все возможные метки какие могут быть - достаточно нетривиальная задача.
Дальше буду думать, какие команды добавить в этот редактор и потихоньку их реализовывать.
Ещё надо что-то придумать с механизмом commit/undo для этого редактора. Небольшой набросок механизма ведения истории действий с возможностью отката и сохранения я сделал, но ясной картины как я буду его использовать пока нет.
Я же выделил код и объявления структур и функций для работы с устройствами, партициями и файловыми системами в отдельную группу файлов. Позже оформлю их в виде библиотеки. Написал код для получения информации о файловых системах и сохранения его в список, которой используется внутри редактора файловых систем. Сделал базовую реализацию редактора, пока что он отображает список партиций имеющих тип freebsd-swap и freebsd-ufs:
На список команд не обращайте внимание, это copy-paste из редактора партиций. В принципе, кроме того что видно в списке сейчас, информационная структура хранит ещё данные о том смонтирована ли файловая система и опции монтирования из /etc/fstab.
Сделал так же проверку на наличие меток glabel, под которыми данное устройство может быть смонтировано или записано в fstab. Правда пока эта проверка достаточно формальная, потому как перебрать все возможные метки какие могут быть - достаточно нетривиальная задача.
Дальше буду думать, какие команды добавить в этот редактор и потихоньку их реализовывать.
Ещё надо что-то придумать с механизмом commit/undo для этого редактора. Небольшой набросок механизма ведения истории действий с возможностью отката и сохранения я сделал, но ясной картины как я буду его использовать пока нет.
пятница, 23 апреля 2010 г.
gpart resize - лёд тронулся.
Ну вот, переодическое "капанье на мозг" :-) дало первые результаты. Marcel закоммитил мой патч, добавляющий поддержку изменения размера провайдеров внутри схемы. Константин Белоусов (kib@) посоветовал не забыть через некоторое время напомнить ему сделать MFC. Думаю недельки через 3-4 можно будет начинать "напоминать" :-)
А пока, отправил ему письмо с благодарностью и ссылками на следующие два патча :-)
А пока, отправил ему письмо с благодарностью и ссылками на следующие два патча :-)
gpart recover - восстановление таблицы GPT
Когда я писал патч для изменения размеров партиций, я пытался решить свою задачу, что, в принципе, мне удалось. Тут в списке рассылки freebsd-geom@ появился человек, заинтересованный в изменении размера носителя, на котором находится схема GPT. У него используется RAID контроллер, который позволяет наращивать дисковое пространство, что-то вроде `zpool attach`. Вставил ещё диск, подключил его к рейду и вот - у тебя уже больше свободного места. Проблема только в том, что GPT хранит две копии метаданных - в начале диска и в конце.
Соответственно, после увеличения размера носителя, вторая копия будет находится уже не в конце и система при подключении этой GPT схемы выдаст в лог такие строчки:
Соответственно, после увеличения размера носителя, вторая копия будет находится уже не в конце и система при подключении этой GPT схемы выдаст в лог такие строчки:
GEOM: md0: the secondary GPT table is corrupt or invalid. GEOM: md0: using the primary only -- recovery suggested.Но, на данный момент, штатной возможности восстановить метаданные нет. Она есть в планах на wiki.freebsd.org. И я уже спрашивал Марселя о том, что он думает на этот счёт, но ответа не получил. Поэтому немного почитав код реализации схемы GPT, сделал набросок патча, который помимо восстановления метаданных позволяет выполнять такую "махинацию" с изменением размера носителя. Патч и пример использования можно посмотреть тут.
Подписаться на:
Сообщения (Atom)