Пользовательского поиска
Пятница, 19.04.2024, 01:12
Приветствую Вас Гость | RSS
Главная | Dr.Web Live USB и GRUB - Страница 14 - Форум | Регистрация | Вход
Меню Проекта
Форма входа
Логин:
Пароль:
Мы Рекомендуем:
Мнение Общественности
Оценка Проекта
1. Отлично :-D
2. Хорошо :-)
3. Неплохо :-/
4. Очень плохо }:->
5. Ниочём :-(
Всего ответов: 2940
Статистика
GreenFlash
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: Sh1td0wn, asdqqww  
Форум » Мультизагрузочная флешка » Linux-подобные системы » Dr.Web Live USB и GRUB (Как подружить два этих чуда)
Dr.Web Live USB и GRUB
Sh1td0wnДата: Четверг, 19.04.2012, 22:00 | Сообщение # 196
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
Это тоже борьба с симптомами, а не с причиной, но раз уж это помогает... в коде и так полно race condition'ов, одним больше, одним меньше... разница небольшая.

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


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Четверг, 19.04.2012, 22:24 | Сообщение # 197
Ищущий
Группа: Пользователи
Сообщений: 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 | Сообщение # 198
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 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 | Сообщение # 199
Ищущий
Группа: Пользователи
Сообщений: 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 | Сообщение # 200
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
Мой файл выглядит так (тип файла: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=0x199538e5f74c4b65168e99a8de4a4aaa67d440f8, stripped), а Ваш?

НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Пятница, 20.04.2012, 00:43 | Сообщение # 201
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Я как то упустил из виду, что создавал файл, в 64-х битной версии Ubuntu...
 
Sh1td0wnДата: Пятница, 20.04.2012, 00:48 | Сообщение # 202
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
Тогда перед сборкой потребуется ввести "linux32". Возможно, потребуется пакет ia32-libs.

НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Пятница, 20.04.2012, 03:30 | Сообщение # 203
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Sh1td0wn, использования данной команды не даёт во всяком случае видимого ответа, ни в виде цикла, не в простом виде fuser /dev. Я поставил вызов функции и до umount и после, ни та ни другая ни даёт ответа, но umount всёравно говори что устройство занято. Может тогда попробовать по списку устройств внутри папки dev? Или занятость папки не связана с занятостью ссылок внутри?

Добавлено (20.04.2012, 03:30)
---------------------------------------------
Раскопал информацию, о том как можно узнать о коде завершения программы. Если я правильно понял, то когда $? = 0 команда выполнена успешно, когда же $? = 1 это или любое другое число кроме нуля, это ошибка? После завершения работы fuser $? = 1 .

 
Sh1td0wnДата: Пятница, 20.04.2012, 18:58 | Сообщение # 204
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
> umount всёравно говори что устройство занято
cat /proc/mounts
losetup -a

> Или занятость папки не связана с занятостью ссылок внутри?
По идее, связана, и если файлы внутри директории заняты, занята и сама директория вплоть до своего mountpoint'а.

> Если я правильно понял, то когда $? = 0 команда выполнена успешно, когда же $? = 1 это или любое другое число кроме нуля, это ошибка?
Верно.

> После завершения работы fuser $? = 1 .
На любой диектории? Или он показывает правильные результаты хоть когда-нибудь?
Смонтирован ли /proc на момент его запуска?


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Пятница, 20.04.2012, 23:07 | Сообщение # 205
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Спасибо за ответ, обязательно проверю.

Добавлено (20.04.2012, 21:45)
---------------------------------------------

Quote (Sh1td0wn)
На любой диектории? Или он показывает правильные результаты хоть когда-нибудь?
Смонтирован ли /proc на момент его запуска


Посмотрим. Проверю позже.

Добавлено (20.04.2012, 22:58)
---------------------------------------------
Ужас продолжается... И такс:

Добавлено (20.04.2012, 23:06)
---------------------------------------------
Результат вызова fuser одинаков во всех трёх случаях.

Code
fuser# возвращает 1
fuser /# возвращает 1
fuser /dev# возвращает 1

cat /proc/mounts#
cat: can't open '/proc/mounts': No such file or directory
losetup -a#
/linuxrc: line 405: losetup: not found
mount#
mount: no /proc/mounts

Добавлено (20.04.2012, 23:07)
---------------------------------------------
umount /dev# же сейчас вообще промолчала, и возвратила 0. Видимо, пока все эти процедуры запускались, времени "чему-то" хватило, что бы отпустить /dev

 
Sh1td0wnДата: Пятница, 20.04.2012, 23:10 | Сообщение # 206
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
Очевидно, это потому, что /proc был отмонтирован выше в скрипте. Попробуйте переместить отключение /dev и соответствующие проверки перед тем местом, где отключается /proc/.

НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Пятница, 20.04.2012, 23:31 | Сообщение # 207
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
Ааа это я же паузу поставил перед девом. Забыл. Сча уберу.

Добавлено (20.04.2012, 23:15)
---------------------------------------------
Паузу убрал. /dev снова busy. Сейчас проверю, есть ли отсоединение /proc раньше.

Добавлено (20.04.2012, 23:17)
---------------------------------------------
Блин. А мы так не увидим с вами я боюсь от чего /dev in busy. Потому, что там ещё до массового umount, три или четыре функции и любая из них может мешать. Но всё же. Ой, что то во мне спорщик проснулся. Пойду поробовать.

Добавлено (20.04.2012, 23:25)
---------------------------------------------
Что именно необходимо найти в списках, которые представлены командами кэт и маунт?

Добавлено (20.04.2012, 23:31)
---------------------------------------------
Вот что тут есть с /dev:

cat /proc/mounts #
/dev/root / squashfs ro,relatime 0 0
memfs dev/root / squashfs ro,relatime 0 0

mount #
/dev/root on / type squashfs (ro,relatime)
memfs on /dev type tmpfs (rw,relatime)

 
Sh1td0wnДата: Пятница, 20.04.2012, 23:42 | Сообщение # 208
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
Если fuser молчал, а /dev был занят, это могло означать занятость директории ядром.
Есть возможность поместить fuser /dev перед отмонтированием /dev и /proc?


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
b0sДата: Суббота, 21.04.2012, 00:09 | Сообщение # 209
Ищущий
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Отсутствует
О! fuser заработала.

Добавлено (21.04.2012, 00:09)
---------------------------------------------
Почему то функция for не вызывает перебор pid добавляя его в cat. Я даже в for перед cat добавил echo c pid, но не работает. Нет результата перебора. А в режиме DEBUG=1 там просто один раз команда пишется и всё, никакого дополнительного вывода.

 
Sh1td0wnДата: Суббота, 21.04.2012, 00:15 | Сообщение # 210
Программист
Группа: Модераторы
Сообщений: 3829
Репутация: 210
Статус: Отсутствует
> Почему то функция for не вызывает перебор pid добавляя его в cat.
А fuser-то пишет что-нибудь?


НАЖМИ МЕНЯ, прежде чем что-либо написать
 
Форум » Мультизагрузочная флешка » Linux-подобные системы » Dr.Web Live USB и GRUB (Как подружить два этих чуда)
Поиск:
Чат

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