Пользовательского поиска
Суббота, 22.08.2026, 19:13
Приветствую Вас Гость | RSS
Главная | Dr.Web Live USB и GRUB - Страница 13 - Форум | Регистрация | Вход
Меню Проекта
Форма входа
Мы Рекомендуем:
Мнение Общественности
Что для вас предпочтительней?
1. Настроить Мультизагрузку по инструкциям.
2. Скачать готовый проект по частям.
Всего ответов: 3788
GreenFlash
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: Sh1td0wn, asdqqww  
Dr.Web Live USB и GRUB
Sh1td0wnДата: Четверг, 19.04.2012, 03:07 | Сообщение # 181
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
Всё верно, распакует в squashfs-root, а третья команда - сборка обратно в squashfs. Подробнее см. man unsquashfs и man mksquashfs.

> Не буду исключать такой вариант, про третий баг.
Заставить DrWeb с ним разобраться можно только в том случае, если наберётся достаточно пользователей этого LiveCD с платной лицензией, наткнувшихся на этот баг и обратившихся с ним в техподдержку.


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 03:18 | Сообщение # 182
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
А как думайте, ну вот если так призадуматься основательно, почему при первом использовании delay, sdb1 в списке нет? Хот ... кажется я понял почему. Нет дело не в инициализации. Кажется в первом списке всё всегда обрывается на том устройстве у которого при вкл-ой отладке справа от него пишется равно и какое то другое устройство, например как у меня, /dev/sg1 = x/dev/hdc

Сейчас проверю.

Добавлено (19.04.2012, 03:13)
---------------------------------------------

Quote (Sh1td0wn)
> Не буду исключать такой вариант, про третий баг.
Заставить DrWeb с ним разобраться можно только в том случае, если наберётся достаточно пользователей этого LiveCD с платной лицензией, наткнувшихся на этот баг и обратившихся с ним в техподдержку.


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

Добавлено (19.04.2012, 03:18)
---------------------------------------------
Кстати, не знайте ли вы, как можно вообще прервать загрузку, без перезагрузки или вытаскивания флешки, вот такого вот /init'а и вообще возможно ли поставить загрузку на паузу, как например это возможно сделать в DOS с помощью клавиши Pause?

 
Sh1td0wnДата: Четверг, 19.04.2012, 03:19 | Сообщение # 183
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
Не то чтобы я не люблю "естествоиспытателей", просто мне не нравится вносить очень глубокие изменения в то, чего я сам не делал. Это делает трудной автоматизацию обновления, особенно если случайно обновится эта самая изменяемая часть.
А так сражаться со скриптом и находить, куда бы дописать поиск ISO-образа, было даже некоторое время интересно.

> Кажется в первом списке всё всегда обрывается на том устройстве у которого при вкл-ой отладке справа от него пишется равно и какое то другое устройство, например как у меня, /dev/sg1 = x/dev/hdc
А вот этого я не понял. Кроме того, это странное поведение, потому что find_root всегда самостоятельно ищет, что бы ему помонтировать, а не руководствуется выводами /init или delay.

> Кстати, не знайте ли вы, как можно вообще прервать загрузку,
Что понимать под "загрузкой"? С точки зрения ядра, на момент запуска /init система уже запущена и вовсю работает. И как именно прервать и с какой целью? Всю систему можно попытаться повесить каким-нибудь alt+syrq (пощите magic sysrq keys), но это вряд ли сработает. В ряде случаев нажатие Ctrl+Z на консоли посылает sigstop выполняемому процессу, но в данном случае это работать не должно (нет запущенного интерактивного шелла, который контролирует терминал и является родителем подопытного процесса).


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 03:26 | Сообщение # 184
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Quote (Sh1td0wn)
А вот этого я не понял. Кроме того, это странное поведение, потому что find_root всегда самостоятельно ищет, что бы ему помонтировать, а не руководствуется выводами /init или delay.


Я чуть позже заметил, что при самом первом вызове delay - sdb в списке нет вообще. В командной строке, перечислены все устройства что и во второй, кроме флешки.

Кстати был бы вам благодарен, если бы объяснили как работает эта команда в которой указаны регулярные выражения? Это мне кажется просто уникальным, ни разу в жизни не видел столь лаконичного перечисления списка устройств. Но как в командной строке выбираются именно те которые в текущий момент существуют?

Добавлено (19.04.2012, 03:26)
---------------------------------------------

Quote (Sh1td0wn)
> Кстати, не знайте ли вы, как можно вообще прервать загрузку,
Что понимать под "загрузкой"? С точки зрения ядра, на момент запуска /init система уже запущена и вовсю работает. И как именно прервать и с какой целью? Всю систему можно попытаться повесить каким-нибудь alt+syrq (пощите magic sysrq keys), но это вряд ли сработает. В ряде случаев нажатие Ctrl+Z на консоли посылает sigstop выполняемому процессу, но в данном случае это работать не должно (нет запущенного интерактивного шелла, который контролирует терминал и является родителем подопытного процесса).


Уже прочёл, спасибо большое за пояснение!
 
Sh1td0wnДата: Четверг, 19.04.2012, 03:30 | Сообщение # 185
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
> Кстати был бы вам благодарен, если бы объяснили как работает эта команда в которой указаны регулярные выражения?
> ls -x /dev/[hs]d[a-z]* /dev/[hs][rg][0-9]* /dev/cd* 2>/dev/null
Используемые здесь регулярные выражения описаны в man 7 glob:
> An expression "[...]" where the first character after the leading '[' is not an '!' matches a single character, namely any of the characters enclosed by the brackets.
> There is one special convention: two characters separated by '-' denote a range. (Thus, "[A-Fa-f0-9]" is equivalent to "[ABCDEFabcdef0123456789]".)

> Но как в командной строке выбираются именно те которые в текущий момент существуют?
ls печатает только те имена файлов, которые ему удалось найти. Поскольку файла (например) /dev/sdz* не существует, ls ругается на stderr (перенаправленный в /dev/null) и не печатает его имя.


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 03:47 | Сообщение # 186
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Sh1td0wn, спасибо за ваше пояснение!

Добавлено (19.04.2012, 03:43)
---------------------------------------------
Забавно. Команда которая как раз таки делает паузу на пять секунд, за комментирована, верней две команды одна из которых приостанавливает сценарий

Code
# [ "x$(lsmod|grep usb)" = "x" ] && sleep 5


Добавлено (19.04.2012, 03:46)
---------------------------------------------
И кстати. Может она как раз дополняла сценарий тем, что в случае отсутствия вывода каких-либо устройств с usb префиксом или постфиксом, вызывала сон на пять секунд, и может без неё и начался хаос? А отключили например за ненадобностью, исходя из того, что у разработчиков всё работает?

Добавлено (19.04.2012, 03:47)
---------------------------------------------
И например не флеше конкретно, а блоку с USB устройствами не достаточно времени на инициализацию?


Сообщение отредактировал b0s - Четверг, 19.04.2012, 03:48
 
Sh1td0wnДата: Четверг, 19.04.2012, 03:51 | Сообщение # 187
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
Возможно, строка осталась с тех времён, когда /init был ещё маленький и глупый и либо сразу пытался монтировать /dev/sr0, либо ждал 5 секунд, пока флешки проснутся, и монтировал их. Логика тут может быть разной.

НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 21:32 | Сообщение # 188
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Согласен! Спасибо вам за ваши ответы и разъяснения, и за ваше время, что вы мне уделили! Пойду спать.

Надеюсь убунту подойдёт для создания рам диска.

Добавлено (19.04.2012, 16:36)
---------------------------------------------
Sh1td0wn. Ну, чтож. У меня всё получилось!
Похоже, что на данном ноут буке, проблема "Cannot find boot device" решена.
Всё как вы и предполагали и как я и думал. Принудительно установив sleep на 10 секунд получил "вуаля"! Я не правил сценарий find_root, не менял delay, не менял условие которое вызывает delay и find_root. Благодаря паузе, моё устройство, то есть флешка sdb1 появляется уже при первом вызове delay.
Я внимательно читал ваше замечание, что если что-то разработчики задумали, то возможно так оно и должно быть, и не сколько с ним не спорю, и волнуюсь, что что-либо произойдёт не так, но мне принудительная приостановка, очень даже нравится. Всего то 10 секунд, а с флешки работает. Думаю можно было бы, доработать вызов sleep таким образом, что бы можно было задать его по надобности. И я уверен, что эта штука будет работать и с компакт диска.

Спасибо вам за ваш комментарий и помощь!

Добавлено (19.04.2012, 21:32)
---------------------------------------------
Sh1td0wn, у меня получилось. Сделал так, что теперь можно задавать параметр USBWAIT, а если он не задан или задан неправильно, не виде цифр, то тогда интервал ожидания 5 секунд. Представляйте? Даже их не хватает на инициализацию. Когда указываешь 10 секунд, тогда успевает гарантировано, а за пять нет...

И ещё про негативный момент.
К сожалению я заметил предупреждение, которое можно было успеть увидеть только сделав видеозапись загрузки или поставив sleep перед переходом ко второму этапу загрузки.

Code

umount: can't umount /dev: Device or resource busy
  

Появляется после после команды umount /dev. Она написана ближе к концу сценария, где создаётся папка .pivot и присоединяются точки соединения proc и sysfs, и затем идёт эта команда.
Не знайте ли вы зачем она? И почему в при использовании оригинального initrd, проблем с отсоединением /dev нет, а в моём варианте есть?


Сообщение отредактировал b0s - Четверг, 19.04.2012, 16:46
 
Sh1td0wnДата: Четверг, 19.04.2012, 21:36 | Сообщение # 189
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
> Не знайте ли вы зачем она?
Чтобы отключить все ресурсы, которые могут быть заняты, перед переключением корневого устройства с initramfs на squashfs. Иначе pivot_root может быть неудачным или привести к сбоям.

Вот если бы внутри initramfs была доступна команда lsof, можно было бы посмотреть, кто держит /dev/.


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 21:51 | Сообщение # 190
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Sh1td0wn, я не уверен, что-то что я сделал правильный подход, но поставив двух секундную паузу перед отсоединением, проблема пропала. Права это лишь на виртуальной машине, не знаю хватит ли этой пазу для кого либо ещё.
 
Sh1td0wnДата: Четверг, 19.04.2012, 22:00 | Сообщение # 191
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
Это тоже борьба с симптомами, а не с причиной, но раз уж это помогает... в коде и так полно race condition'ов, одним больше, одним меньше... разница небольшая.

Помогло - значит, хорошо.


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 22:24 | Сообщение # 192
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Quote (Sh1td0wn)
lsof

К сожалению этой утилиты нет готовой в двоичном виде для Gentoo. Я бы её скачал и распаковал, но её нет. А для того, что бы её скомпилировать, нужна установленная система Gentoo... Блин это же так долго...

Добавлено (19.04.2012, 22:10)
---------------------------------------------
Что-вы, как вы написали про то что можно было бы просмотреть, если бы была утилита, хотя я в начале и дописал сценарий, и только потом стал искать утилиту, я всё же понимаю, что это важно. Я всё же также как и вы не очень принимаю решение задач путём сжигания учителей и учебников вместе со школами. Я тоже предпочитаю докопаться до сути проблемы, а не пить таблетки, не зная от чего да и зачем и вообще непонятно какие таблетки.

Добавлено (19.04.2012, 22:10)
---------------------------------------------
Если у вас есть версия утилиты и вы могли бы поделится, с радостью бы воспользовался!

Добавлено (19.04.2012, 22:24)
---------------------------------------------
Так у вас нет этой утилиты? Если есть то я был вам благодарен за неё.

 
Sh1td0wnДата: Четверг, 19.04.2012, 22:45 | Сообщение # 193
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
> К сожалению этой утилиты нет готовой в двоичном виде для Gentoo.
Gentoo здесь ни при чём. Внутри initramfs располагается очень маленький набор программ, имеющий мало общего с Gentoo.

Можно собрать утилиту самостоятельно. В составе busybox (набор очень маленьких утилит для встраиваемых систем и initramfs) нет lsof, но есть fuser (он тоже умеет показывать список процессов, держащих директорию).
Действуем:
cd $(mktemp -d) # создаём временную директорию в /tmp и перемещаемся туда
apt-get source busybox # берём исходники
sudo apt-get build-dep busybox # берём пакеты, которые понадобятся для сборки
cd busybox-*
# у busybox есть специальная система сборки, позволяющая выбрать, что собирать, а что - нет. она может быть вызвана как интерактивное меню или настроена вручную
make allnoconfig # отключаем всё
sed -i 's/^# CONFIG_STATIC .*/CONFIG_STATIC=y/' .config # включаем статическую сборку
sed -i 's/^# CONFIG_FUSER .*/CONFIG_FUSER=y/' .config # включаем нужную нам утилиту
# для редактирования файла с настройками используется неинтерактивный редактор sed
make # собираем программу

В результате получается файл busybox размером 544K, который нужно сохранить под именем fuser куда-нибудь в initramfs. Запускается он так: fuser /путь/к/директории/или/файлу. В ответ он пишет список pid процессов, которые держат файл/директорию.

Можно выполнить что-то вроде:
for pid in `fuser /dev`; do cat /proc/$pid/comm; done
(в файле /proc/$pid/comm хранится имя программы с PID = $pid).
Вместо comm можно также смотреть cmdline.


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Пятница, 20.04.2012, 00:28 | Сообщение # 194
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Sh1td0wn, к великому сожалению, куча потраченного времени не дала результата. Fuser выдаёт ошибку, что при наличии параметров командной строки, что без них:

Code
#fuser
/bin/fuser: line 1: syntax error: unexpected "("


Сообщение отредактировал b0s - Пятница, 20.04.2012, 00:28
 
Sh1td0wnДата: Пятница, 20.04.2012, 00:31 | Сообщение # 195
Программист
Группа: Модераторы
Сообщений: 3827
Репутация: 210
Статус: Отсутствует
Мой файл выглядит так (тип файла: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=0x199538e5f74c4b65168e99a8de4a4aaa67d440f8, stripped), а Ваш?

НАЖМИ МЕНЯ, прежде чем что-либо написать
 
Поиск:
Чат

Copyright GreenFlash © 2026
Рейтинг@Mail.ru