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

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

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

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Вообще идея интересная. Решил посмотреть какие же файлы открыты в момент выполнения этого скрипта.
Список внушительный. Но. Если отсортировать /proc, /sys и проч. Остается:
/bin/bash
/bin/grep
/etc/udev/hwdb.bin
/lib64/ld-2.19.so
/lib64/libacl.so.1.1.0
/lib64/libattr.so.1.1.0
/lib64/libaudit.so.1.0.0
/lib64/libblkid.so.1.1.0
/lib64/libc-2.19.so
/lib64/libcap.so.2.22
/lib64/libcom_err.so.2.1
/lib64/libdl-2.19.so
/lib64/libgpg-error.so.0.10.0
/lib64/libkmod.so.2.2.10
/lib64/liblzma.so.5.2.2
/lib64/libmount.so.1.1.0
/lib64/libncursesw.so.5.9
/lib64/libnsl-2.19.so
/lib64/libnss_compat-2.19.so
/lib64/libnss_files-2.19.so
/lib64/libnss_nis-2.19.so
/lib64/libpam.so.0.83.1
/lib64/libpcre.so.1.2.3
/lib64/libpthread-2.19.so
/lib64/libresolv-2.19.so
/lib64/librt-2.19.so
/lib64/libuuid.so.1.3.0
/lib64/libz.so.1.2.8
/lib/modules/4.9.60-nrj-desktop-1rosa-x86_64/modules.alias.bin
/lib/modules/4.9.60-nrj-desktop-1rosa-x86_64/modules.builtin.bin
/lib/modules/4.9.60-nrj-desktop-1rosa-x86_64/modules.dep.bin
/lib/modules/4.9.60-nrj-desktop-1rosa-x86_64/modules.symbols.bin
/sbin/dhclient
/usr/lib64/libgcrypt.so.20.0.6
/usr/lib64/libgssapi_krb5.so.2.2
/usr/lib64/libk5crypto.so.3.1
/usr/lib64/libkeyutils.so.1.5
/usr/lib64/libkrb5.so.3.3
/usr/lib64/libkrb5support.so.0.1
/usr/lib64/libtirpc.so.1.0.10
/usr/lib/locale/locale-archive
/usr/lib/magos/rc.halt/90-umountmodules
/usr/sbin/lsof
/var/lib/NetworkManager/dhclient-a0d6c4fc-b45f-3773-a6d2-6d497dc3348d-enp4s0.lease

Если отсортировать то, что загружено в память (помечено как mem в lsof):
/bin/bash
/bin/grep
/etc/udev/hwdb.bin
/sbin/dhclient
/usr/lib/magos/rc.halt/90-umountmodules
/usr/sbin/lsof
/var/lib/NetworkManager/dhclient-a0d6c4fc-b45f-3773-a6d2-6d497dc3348d-enp4s0.lease


При чем здесь lsof и grep это тот кусочек, что создал этот список. А последний скорее всего в ченджез. То есть модули практически ничего не держит. И теоретически сделать мини модуль с необходимыми для отключения утилитами и грузить его в copy2ram - возможно. Вот только после системд еще что-то делает и не понятно что ему может понадобиться. И второй момент если какая-то софтинка добавит в этот списочек хоть один файл все снова перестанет отмонтироваться.
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Надо нам в pfsutils что то подобное?
#!/bin/bash
lsblocked () {
LSOF=$( lsof  |grep -v " mem " | awk '{print $9}' |grep "\/..*" | egrep -v "/proc|/sys|/run|/tmp|/dev|/home" | sort -u)
for a in $LSOF ; do
[ -f $a ] || continue
[ -f /memory/changes/$a ] && continue
for bundle in $(ls /memory/bundles) ; do
[ -f /memory/bundles/$bundle/$a ] && BLOCKED="$BLOCKED $bundle"
done
done
for m in $BLOCKED ; do
echo $m
done | sort -u
}

ls_files () {
LSOF=$( lsof  |grep -v " mem " |awk '{print $9}' |grep "\/..*" | egrep -v "/proc|/sys|/run|/tmp|/dev|/home" | sort -u)
for a in $LSOF ; do
[ -f $a ] || continue
[ -f /memory/changes/$a ] && continue
[ -f /memory/bundles/$1/$a ] && FILES="$FILES $a"
done
for f in $FILES ; do echo $f ; done

}

if [ $1 ]; then
ls_files $1
else
lsblocked
fi


Без параметров покажет заблокированные модули, если передать имя модуля то список открытых файлов из него. Все сыро и под магос заточено, чисто показать.
Назвать можно pfsblocked

А в этом форуме потому, что
./pfsblocked 10-core.xzm
/bin/bash
/bin/dbus-daemon
/bin/gawk
/bin/grep
/bin/sort
/bin/su
/sbin/dhclient
/usr/bin/python2.7
/usr/lib64/accounts-daemon
/usr/lib64/gam_server
/usr/lib/polkit-1/polkitd
/usr/sbin/acpid
/usr/sbin/gpm
/usr/sbin/lsof
/usr/sbin/ModemManager
/usr/sbin/NetworkManager

MagOS Programming # for f in $(./pfsblocked 10-core.xzm) ; do touch $f ; done

MagOS Programming # ./pfsblocked 10-core.xzm
Пусто...
Похоже трюк с touch работает :)
« Последнее редактирование: 24 Декабрь 2017, 09:55:00 от betcher »
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Так я даже пример привел. Похоже для разблокирования модуля достаточно сделать touch для блокирующих файлов. А вывод pfsblocked module.xzm можно добавить в выхлоп pfsunload если отключить не получается. Не обязательно делать отдельным файлом  можно в либу добавить. Если с тачем работает можно сделать pfsunload --force.
Но все это конечно сперва проверить нужно.
Чтоб в пра заработало нужно пути поменять только, универсальностью не запаривался пока.
« Последнее редактирование: 24 Декабрь 2017, 11:05:11 от betcher »
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 22742
  • Репутация: +165/-0
    • PuppyRus-A
pfsunload --force.
Хорошо ли это вообще....
Получается мы оставляем в системе некоторые файлы модуля, которые еще и запущены
При выключении уже не важно, но похоже, можно проще

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Хак с touch не работает. Файлы в ченджез переносятся, но модуль остается заблокированным.
Прикрутил к pfsunload вывод списка блокирующих файлов в случае если отключить не получается. Посмотрите в гит. Если это лишнее можно откатить. Но мне показалось  полезно понимать из-за кого не отключается модуль.
З.Ы. Забыл пути поправить. Минут пять надо.
P.P.S готово.
« Последнее редактирование: 24 Декабрь 2017, 22:46:20 от betcher »
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Я однако все сломал :( Получилась мешанина из коммитов. Сейчас с телефона смотрю и не вижу Ваших правок с COL () { например. Гит не должен допускать такого. Как вышло не пойму. Починить смогу только поздно вечером. Можете просто откатить пока.
Но pfsunload работать должен. Если интересно, посмотреть можно.
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 22742
  • Репутация: +165/-0
    • PuppyRus-A
Прикрутил к pfsunload вывод списка блокирующих файлов в случае если отключить не получается.
Вот это интереснее. Может и ключ "освободить" не помешал бы
Можете просто откатить пока.
Я гит юзаю только на правку через ввв. Лучше руку не менять. Чините когда сможете
Если что - в пра рабочая версия есть

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
С --force ничего не выходит. После touch file файл попадает в ченджез, но та софтина, которая его держала открытым похоже продолжает читать из модуля пока ее не остановить, если зппустить снова, то будет читать из ченджез. По крайней мере так все выглядит. То есть после touch становится только хуже и не работает, и не понятно из-за кого, так как файлы уже в ченджез :)
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 22742
  • Репутация: +165/-0
    • PuppyRus-A
touch - вообще плохая идея. Надо kill

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Убивать это только при выключении можно, на живую опасненько :) А при выключении подозреваю, что все что можно было системд уже прибил.
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 22742
  • Репутация: +165/-0
    • PuppyRus-A
Убивать это только при выключении можно, на живую опасненько
Ну так я ж предлагаю не по дефолту, а отдельным ключом для тех, кто понимает что делает
Проверил новый (первый вариант на скрине). У меня не показало, что держит

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
У нас вроде норм работало. Вечером перепроверю. Надо будет видимо в пра смотреть последние два блока if из pfsunload. Может в lsof отличия или еще где.
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн sfs

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

Оффлайн betcher

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 1350
  • Репутация: +14/-0
    • Беседка магос
Я проверял со всеми овер 30 модулей в магос. Список модулей в которых обнаружились открытые файлы ровно совпал с теми, что не удалось отмонтировать.
http://magos-linux.ru - форум
https://gitter.im/magos-linux-ru/chat - беседка (чат)

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 22742
  • Репутация: +165/-0
    • PuppyRus-A
Заглянул во внутрь:
1. changes bungles - взяты не через переменные из pfs
2. Не учтено, что модуль мог быть монтирован не pfsload, а инитрд. Где-то я уже правил такое - т.е.определял через /sys/fs/aufs