Попробую...
Это вернет каждую строку до последнего вхождения/
или/usr
включительно. AKA удаляет все после последнего появления любого из них.
:a;/^[^ ]* \(\/\|\/usr\) /!{H;n;ba};
Это говорит о том, что для строк, которые не содержат точно /
или /usr
во втором столбце (с разделителями-пробелами ), добавить к H
старому пробелу, выбрать n
добавочную строку, цикл b
Подтвердить метку a
.
{H;s/.*//;x;s/\n//;p}
Мы попадем сюда, только если встретим строку с /
или /usr
. Затем мы добавляем к H
старое пространство (, в котором есть все из первого раздела ), очищаем пространство шаблонов, e x
заменяем пространство хранения на пространство шаблонов, удаляем первую новую строку из пространства шаблонов и p
стираем ее..
После того, как мы увидели последнюю /
или /usr
строку (и напечатали все до этой точки ), мы перебираем первую часть и высасываем все оставшиеся не -совпадающие строки... но они никогда не печатаются, так как мы не входим во вторую часть.
Я провел небольшую проверку, и это соответствовало моему заявлению.
Ясно, что это зависит от некоторого порядка, поддерживаемого в /proc/mounts
.Но список просто строится согласно порядку создания точек монтирования . Так что везде, где это делается, нужно поддерживать, иначе, я думаю, все это сломается. Мне все это кажется ужасно хрупким.
Взгляните на этот вопрос:https://serverfault.com/questions/778997/pacemaker-virtual-ip-loadbalancing-with-clone-and-clusterip
Я думаю, что это проблема маршрута. Попробуйте последний комментарий, сделанный в вопросе strzelecki.maciek
. Он применил предварительную маршрутизацию iptables, которая помогла. Возможно, это ваш случай.