Могу ли я удалить логический том из группы томов, не затрагивая данные на другом логическом томе в той же группе томов

С sed есть два пути. Вы можете выбрать включительно или исключительно. В вашем случае выбор включительно означает печать всех строк, начинающихся с совпадения по '^*\*\*' до одной из ^ * (что бы это ни было) или ^$ пустой строки.

Выборка включительно может быть задана с помощью любого из выражений диапазона, продемонстрированных в других ответах, и предполагает указание образца начать печатать здесь до образца до конца здесь.

Выбор эксклюзивный работает противоположным образом. Он определяет от остановить печать до здесь до начать печать после здесь. Для вашего примера данных - и позволяя остановить печать до здесь, который будет соответствовать любой из пустых строк или , что вещь:

sed -e 'x;/^\( *<np>.*\)*$/,/^*\** *$/c\' -e '' <infile >outfile
  • x
    • Меняет местами пробелы удержания и шаблона. Это устанавливает look-behind - sed всегда на одну строку позади ввода - и первая строка всегда пустая.
  • /^\( *.*\)*$/
    • Это выбирает stop printing before here строку, которая совпадает от начала до конца с нулем или более вхождений в группе совпадений. Два типа строк могут соответствовать нулю или более вхождений - либо пустая строка, либо строка с любым количеством <пробелов> в начале строки, за которой следует строка .
  • /^*\** *$/
    • Выбирается строка начать печать после здесь, которая открывается хотя бы одним символом * звездочки и продолжается до конца строки с нулем или более вхождений * звездочки и, возможно, закрывается любым количеством пробелов.
  • c\' -e ''
    • Это cпереводит весь заблокированный выбор в одну пустую строку, сжимая все ненужные строки до строки EOF.

Таким образом, любое количество строк, встречающихся до ^*\** *$ и после первой следующей ^\( *.*\)*$, всегда сжимается до единственной пустой строки, и только первый встречающийся параграф после совпадения для ^*\** *$ выводится в stdout. Печатается...


2012/10/01 00:00:00.000     6998.239     0.001233     97.95558     77.41733     89.98551    290.75808    359.93398
2012/10/01 00:05:00.000     6993.163     0.001168     97.95869     77.41920    124.72698    274.57362    359.93327
2012/10/01 00:10:00.000     6987.347     0.001004     97.96219     77.42327    170.94020    246.92395    359.94706
2012/10/01 00:15:00.000     6983.173     0.000893     97.96468     77.42930    224.76158    211.67042    359.97311 

Это предполагает, что вы хотите обрабатывать любое количество вхождений шаблона параграфа во входных данных. Если вам нужен только первый, однако, при условии, что у вас есть GNU grep и что infile является обычным, lseekable файлом:

{   grep -xm1 '*\** *'        >&2
    sed -n '/^\( *<np>.*\)*$/q;p'
}   <infile 2>/dev/null >outfile

... будет работать также.

И на самом деле, я полагаю, есть три способа. Третий может выглядеть так:

sed 'H;$!d;x;s/\(\n\*\** *\n\(\([0-9./: ]*\n\)*\)\)*./\2/g'

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

0
26.04.2018, 18:48
2 ответа

Да, вы можете lvудалить LV1, не затрагивая данные в LV2. Вот почему они являются отдельными LV.

Перед созданием PV из VG следует убедиться, что PV сообщается как полностью свободный с помощью команды pvsили pvdisplay. Если нет, и у вас есть другие PV в VG со свободным местом, вы можете использовать команду pvmoveдля перемещения данных из PV, который вы хотите удалить, в один (или более, если необходимо )PV, которые вы планируете оставить -, пока LV установлены и используются. (Это одна из вещей, которая делает LVM великолепным, когда вам нужно избежать простоев.)

Самый простой способ использовать pvmove— просто указать имя PV, которое вы хотите сделать пустым. Он достаточно умен, чтобы просматривать другие PV в той же VG и находить свободное место для любых данных, которые необходимо переместить. Конечно, вы также можете указать целевой PV -или несколько целевых PV, если данные, которые вам нужно переместить, не помещаются ни в один PV, который вы хотите сохранить. pvmoveсначала будет перемещать данные из исходного PV в первый целевой PV до тех пор, пока это назначение не заполнится, а затем продолжит движение к следующему указанному целевому PV.

Как только PV полностью освободится,(pvsсообщает PFree = PSize для него или pvdisplay <PV device name>сообщает, что «Выделенный PE» = 0 ), вы можете vgreduceосвободить его из VG.

После этого вы можете удалить PV из системы. Если вы планируете повторно использовать диск без переразметки или иной перезаписи, вы можете использовать pvremoveдля удаления заголовка LVM PV с диска, но любой другой способ сделать так, чтобы система больше не видела заголовок LVM PV, будет работать. точно также. (В этот момент все не -исторические метаданные LVM, относящиеся к этому PV, находятся в самом этом PV. Если этот раздел или диск исчезнет, ​​LVM прекрасно поймет, что PV исчез.)

2
28.01.2020, 02:16

Если пространство из разделов на этих дисках используется lv2, это будет затронуто, когда вы vgreduceи pvremove.

Лучше всего сделать резервную копию данных, lvremoveобоих, vgreduce, pvremove, а затем заново создать физические тома и lv2, а затем восстановить данные.

3
28.01.2020, 02:16

Теги

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