Сайт | Скачать | Видео | Wiki

Автор Тема: pfsunload - вывод занятых файлов при невозможности отмонтировать  (Прочитано 15882 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
Инфа про либы: т.к. если они не связаны с бинарниками этого же модуля - не знаю как освободить...
Поэтому предлагаю инфу про них не выводить и f поменять на х:
Код
|.so.|.so$
[ -x
или есть идеи лучше?
« Последнее редактирование: 23 Февраль 2018, 12:01:51 от sfs »

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
не помешал бы гуй выбора занятых бинарников для убийства. Может сделаю позже
Код
[ ! -f "$1" ] && ntf -e "$0" "Не указан модуль" && exit 1
fsname="$(basename $(realpath "${1}"))"
mountpoint="$(awk '/'${fsname}'/ {print $2}' /proc/mounts)"

  for a in $( lsof / |awk '{print $9}' |grep "\/..*" | egrep -v "/proc|/sys|/run|/tmp|/dev|/home|.so.|.so$" | sort -u) ; do
    [ -x "$a" ] || continue
    [ -x  "$mountpoint/$a" ] && FILES="$FILES gtk-executable|${a}|${a}="
  done
#echo $FILES
[ "$FILES" ] || exit
ntf -k "`echo "$FILES" | sed 's/=$//'`" "Выберите программы" "которые нужно завершить" |while read b ;do
    wt "sudo killall -9 "$b""
done
ntf и wt - это мои скрипты из ПРА. Если у Вас такого нет - рекомендую. Можно тоже вместе доработать

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
  • Автор темы
    • MagOS linux
Не могу понять почему Вы считаете, что либы не надо выводить. По ним если очень надо можно вычислить какие бинарники их используют. Если прятать либы можно получить ситуацию, что в списке ничего нет, а отмонтировать нельзя. Тоже как-то не айс.

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
почему Вы считаете, что либы не надо выводить
Потому что если они не связаны с бинарниками модуля - определить с чем связаны будет не просто
C либами вылезают портянки больше экрана
Пока не сталкивался с такой ситуацией
В сложных случаях по любому - 100% решение - reboot
Чтобы не спорить - можно добавить ключ
« Последнее редактирование: 27 Февраль 2018, 11:34:46 от sfs »

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
  • Автор темы
    • MagOS linux
Может либы вывести списком через пробел. А бинарники отдельно в столбик. Ключ в данном случае перебор, скорее соглашусь на "без либ" :)

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
либы вывести списком через пробел
тоже не читаемо + не часто + 100 бед 1 ресет

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
если они не связаны с бинарниками модуля - определить с чем связаны будет не просто
Пример : не отключить ffmpeg при при запущенном браузере
Я догадался, что дело в этом, но список либ мне никак не помог бы

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
Надо добавить к
Код
[ -x "$a" ] || continue
проверку - что не дир
Код
[ -d "$a" ] && continue
иначе выводит /usr/bin

Кстати в гит не поправлено убирание либ
Или сделать ключ - с либами - без
« Последнее редактирование: 22 Апрель 2018, 08:21:17 от sfs »

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
  • Автор темы
    • MagOS linux
По /usr/bin не понял как это проявляется? У меня в списках нет.
По либам все же считаю, что прятать либы из вывода не правильно. Ситуация, когда согласно списку модуль ничто не блокирует, но при этом он не отключается не есть гуд. По имени либы легко узнать кто ее открыл:  lsof | grep имя_либы   и смотри первый столбик.  По идее можно это тоже в pfsunload запихать, но если список большой можно выхватить нехилые тормоза при разборе и второе получим в выхлопе список бинарников, которые модулю не принадлежат. Тоже странно. Мне кажется, что как сейчас самое то. Если смущает размер списка может просто сделать head -n 10 если без параметров и в последней строке написать с каким параметром запустить чтоб получить полный список блокирующих файлов. Отделять же именно либы смысла не вижу, там могут быть и /usr/share/locale да и вообще что угодно.

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
По /usr/bin не понял как это проявляется?
Без моих правок
Код
# pfsunload ffmpeg-light-3.4.1-180101-sf01.pfs 
rmdir: не удалось удалить '/mnt/live/memory/images/ffmpeg-light-3.4.1-180101-sf01.pfs': Устройство или ресурс занято
Unmount "ffmpeg-light-3.4.1-180101-sf01.pfs" failed!

Files opened from ffmpeg-light-3.4.1-180101-sf01.pfs:
/usr/bin
/usr/lib/libavcodec.so.57.107.100
/usr/lib/libavdevice.so.57.10.100
/usr/lib/libavfilter.so.6.107.100
/usr/lib/libavformat.so.57.83.100
/usr/lib/libavresample.so.3.7.0
/usr/lib/libavutil.so.55.78.100
/usr/lib/libpostproc.so.54.7.100
/usr/lib/libswresample.so.2.9.100
/usr/lib/libswscale.so.4.8.100
/usr/lib/libva-drm.so.2.0.0
/usr/lib/libva-glx.so.2.0.0
/usr/lib/libva-x11.so.2.0.0
/usr/lib/libva.so.2.0.0
/usr/lib/libvdpau.so.1.0.0
По имени либы легко узнать кто ее открыл:  lsof | grep имя_либы
Да, но как это прикрутить в pfsunload... без тормозов и портянок вывода не влезающих на экран...
Это все сложные случаи для опытных
Новичку достаточно предложить грохнуть бинарник модуля (я и гуй klsof прикрутил - удобно)
Если сложнее - некоторым  проще перегрузиться
head -n 10
Плохая идея. Может получиться что либы показаны, а бинарники не влезли

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
  • Автор темы
    • MagOS linux
Без моих правок
Гм. У меня не проявляется, может быть что у тебя терминал в /usr/bin открыт напрмер? Хотя такая правка мешать наверное не будет.
А по либам давай еще подумаем.

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
такая правка мешать наверное не будет.
Да и время выполнения не увеличит
по либам давай еще подумаем.
У меня еще идей нет

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
  • Автор темы
    • MagOS linux
/bin  /sbin и /usr/bin ближе к началу алфавита чем /usr/lib и /usr/share может head, a?
Допустим блокируют один бинарник и одна либа, в варианте без либ покажет только бинарник, а с head  покажет все. Если же список огромен то уже не особо важно что именно блокируетв варианте без либ будет список в стопицот бинарников, а с head будет список из десяти строк и предложение  запустить pfs showblock module.xzm для получения полного списка. Кмк гуд.
З.Ы. Сделал давно pfs lsblocked, но не помню писал или нет. Попробуйте у себя и в вики можно дописать.  И посмотрите описание pfs-utils в нашей вики, все ли норм. https://github.com/magos-linux/magos-linux/wiki/Pfs-utils
« Последнее редактирование: 22 Апрель 2018, 11:38:57 от betcher »

Онлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33954
  • Репутация: +231/-0
    • PuppyRus-A
Если  lsof | grep либа в гуе не реализовано - смысла либы их выводить нет
Все равно придется лезть в консоль
Не хотелось бы усложнять
С только бинарниками - средний вариант + ключ показывать с либами

 pfs lsblocked - не догоняю практического применения


Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 3019
  • Репутация: +35/-0
  • Автор темы
    • MagOS linux
pfs lsblocked - не догоняю практического применения
Не  особо полезная штука, по тому и не  отдельной утилиткой. Как например без нее узнать заблокирован модуль или нет не отключая его?
Если  lsof | grep либа в гуе не реализовано - смысла либы их выводить нет
Все равно придется лезть в консоль
Не хотелось бы усложнять
С только бинарниками - средний вариант + ключ показывать с либами
Давайте с начала. Задача: если модуль не отключается нужно показать почему. Причина не отключения всегда открытые из модуля файлы. Это могут быть совершенно любые файлы хоть либы хоть конфиги хоть бинари. То есть вообще все что угодно.
Показывать только бинарники это подгонять функционал под ваш гуй.  Почему бы не фильтровать уже в нем? Или сделать ключик с форматированием выхлопа под гуй (как -raw в других наших утилитках). А для стандартного вывода вижу два варианта либо оставлять как есть (длинно), либо сокращать вывод до определенного количества строк и делать способ получить полный список, может даже  с циклом lsof  по каждой строке (нужно ли так усложнять?) Сокращать вывод  по принципу "только бинари" не правильно потому что возможна ситуация, что модуль не отключается, а список пуст так как открыты не бинари.
« Последнее редактирование: 22 Апрель 2018, 12:48:54 от betcher »