Невозможно перемонтировать/вернуть в режим только для чтения после обновления пакета

Эта команда работает нормально, но изменяет каждую запись в XML-файле. (все поля с именем)

Что вводить, если есть другие поля с одно и то же имя. Я пробовал:

xml ed -L -N w=http://artifactory.jfrog.org/xsd/1.7.9 -u "//w:mailServer/port" -v "123" artifactory.config.import.xml

, но ничего не происходит. Однако команда принята.

Когда я использую

xml ed -L -N w=http://artifactory.jfrog.org/xsd/1.7.9 -u "//w:port" -v "999" artifactory.config.import.xml 

, каждый элемент с именем port изменяется на значение 999.

13
13.12.2018, 22:28
2 ответа

Не видя вашей системы, очень сложно точно сказать, в чем проблема. Комментарии и предыдущие ответы — хорошее начало.

Тем не менее, я бы вернулся к вики debian, где описаны предварительные требования для монтирования/только для чтения.

Ссылка на документацию здесь:https://wiki.debian.org/ReadonlyRoot

Большой я проведу тебя здесь:

1 -в / есть определенные места, которые должны быть прочитаны и записаны.Судя по документации, это выглядит примерно так:

debian ro root

ваши блочные устройства, вероятно, будут отличаться, в зависимости от конфигурации вашего стека хранилища (разделов, lvm без разделов и т. д. )но основная идея заключается в том, что вам нужны эти 4 точки монтирования, чтобы их последующая смонтированная файловая система имеют вариант монтажа RW.

2 -в /etc есть ряд специальных файлов, для которых необходимо либо создать символическую ссылку, либо внести некоторые другие изменения (, подробно описанные в статье по ссылке. ). Они могут применяться или не применяться в зависимости от того, какие приложения работают на вашем Linux-сервере. некоторые файлы могут даже не существовать на вашем компьютере, но я включил все в документы. Имейте в виду, я настоятельно рекомендую внести эти изменения, ДАЖЕ ЕСЛИ вы убили pid процесса. Вот пути прямо из вики Debian:

  • корректировка времени
  • init.d/alsa -утилиты
  • /etc/courier/shared/index
  • любые файлы состояния чашек, class.conf, cupsd.conf, принтеры.conf, подписки.conf
  • /etc/lvm/lvm.conf
  • mtab (, к которому, похоже, вы пытались обратиться, задав mount флаг -n)
  • network/run (используется ifup и ifdown, в сжатии. не может применяться к растяжению, ymmv)
  • нологин
  • resolv.conf
  • как файлы паролей, так и теневые файлы
  • самба/dhcp.conf
  • сосать
  • удев

После того, как вы проверили все вышеперечисленное и подтвердили, что они соответствуют спецификации в вики, следующее, что нужно проверить, это /etc/apt/apt.conf

DPkg {
// Auto re-mounting of a readonly /
Pre-Invoke { "mount -o remount,rw /"; };
Post-Invoke { "test ${NO_APT_REMOUNT:-no} = yes || mount -o remount,ro / || true"; };
}; 

на основании вашей ошибки,последнее, что вы можете проверить на основе документации, приведено ниже:

«После обновления пакетов вы можете столкнуться с проблемой, что mount отказывается перемонтировать файловую систему только для чтения, сообщая вам «/ занят». Это вызвано удаленными файлами, которые все еще используются процессом.Чтобы узнать, какие процессы используют удаленные файлы, используйте инструмент checkrestart (1 )из пакета debian -или используйте следующую команду.Часто это демоны, использующие обновленные библиотеки. Вы должны перезапустить их, чтобы файлы были освобождены."

Команда

представлена ​​в док.:

{lsof +L1; lsof|sed -n '/SYSV/d; /DEL\|(path /p;'} |grep -Ev '/(dev|home|tmp|var)'

Не зная точной конфигурации вашей файловой системы, разбивки на разделы и конфигурации устройства хранения, трудно дать вам еще что-то для подражания. Я бы начал с того, что вернулся и перепроверил ваши предварительные требования в документации (и изложил выше ).

0
27.01.2020, 19:54

У вас установлен /proc?

Очевидно, поскольку вы заботитесь о том, чтобы большую часть времени /монтировался только для чтения -, я могу предположить, что вы также можете не монтировать procfs. Но procfs нужен для того, чтобы lsofнаходил открытые файлы.

Файлы, открытые процессами, открываются ядром через символические ссылки в procfs. Каталоги /proc/<pid>/fdсодержат символическую ссылку для каждого открытого файла. Имена символических ссылок — это номера файловых дескрипторов, а путь, на который ссылается символическая ссылка, — это путь к файлу.

Оборванные символические ссылки по-прежнему остаются в /procдля открытых файлов, которые уже были удалены.И указанный путь к файлу переименовывается, чтобы заканчиваться «(удалено )».

То, что делает lsof +L1по сути ничем не отличается от быстрого -лайнера типа:

stat -c%N /proc/[0-9]*/fd/* | grep deleted

Таким образом, вы можете использовать аналогичный -лайнер для перечисления всех открытых файлов, которые могут препятствовать повторному монтированию корневой файловой системы (при условии работы/proc).

Однако, если вы смонтировали/смонтировали /proc, единственными другими причинами, о которых я могу думать, являются ошибки... Во всяком случае, к вашему сведению, в моей текущей системе Debian Stretch. lsof +L1работает как положено.

bash# lsb_release -d
Description:    Debian GNU/Linux 9.5 (stretch)

bash# uname -a
Linux bwp-249-8 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) x86_64 GNU/Linux

bash# lsof -v
lsof version information:
    revision: 4.89
    [...]
0
27.01.2020, 19:54

Теги

Похожие вопросы