Выровняйте столбцы равномерно без «столбца - T»

@psusi правильно, что вам нужно установить grub на все 3 диска, но вам также необходимо проверить, что система будет загружаться со 2-го или 3-го диска, если первый отсутствует /не смогли.

Я также заметил, что у вас есть 3 раздела подкачки, предположительно по 1 на каждом диске. Так что ваш запасной на самом деле не запасной, поскольку он используется для замены. Таким образом, неясно, продолжит ли система работать в случае сбоя диска. Вероятность такова, что если сразу паниковать и перезагружаться - вероятно, не то, что вам нужно!

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

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

1
29.11.2018, 09:53
1 ответ
FNR == NR {
    for (i = 1; i <= NF; ++i) {
        width = length($i)
        maxwidth[i] = (width > maxwidth[i] ? width : maxwidth[i])
    }

    next
}

{
    for (i = 1; i <= NF; ++i)
        printf("%-*s%s", maxwidth[i], $i,
            (i == NF ? "\n" : (delim == "" ? " " : delim)) )
}

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

Если установлена ​​переменная delim, она используется для разделения столбцов, в противном случае используется символ пробела.

По умолчанию предполагается, что исходные данные разделены пробелами -. Если это табуляция -, используйте -F '\t'в командной строке.

Два тестовых прогона с заданными данными (отмечают, что входной файл должен быть указан дважды):

$ awk -f./script.awk file file
X1vir1000 x1-DFB127                    x1ttcb101_mv_03_2016     Not-activated 16  x1ttcr181 x1ttcr182
X1vir1000 x1-DFB127                    x1dvdb201_mv_pmp-132     Not-activated 3   x1ttcr181 x1ttcr182
X3vir1000 x3-DFB116                    x3dvdb202_mv_05032016    Not-activated 22  x3ttcr175 x3ttcr176
X3vir1000 x3-DFB116                    x3ttcb203_mv_03_2016     Not-activated 19  x3ttcr175 x3ttcr176
X3vir1000 x3-DFB116                    x3trcb223_mv_10_2017     Not-activated 29  x3ttcr175 x3ttcr176
X3vir1000 x3-DFB117                    x3trvf245_mv_08_2017     Not-activated 27  x3ttcr177 x3ttcr178
X3vir1000 x3-DFB131                    CR74536_x3dvap234_Decom  Not-activated 101 x3ttcr213 x3ttcr214
X3vir1000 x3-DFB132                    decommissioned_x3trcb223 Not-activated 138 x3ttcr217 x3ttcr218
X3vir1000 x3-DFB132                    decommissioned_x3trcb312 Not-activated 116 x3ttcr217 x3ttcr218
X9vir1000 x9-DFB005-8233-E8B-SN1030BDR x9trcb003_vhost1_decomm  Not-activated 4   x9ttcr012 x9ttcr013
$ awk -v delim=' | ' -f./script.awk file file
X1vir1000 | x1-DFB127                    | x1ttcb101_mv_03_2016     | Not-activated | 16  | x1ttcr181 | x1ttcr182
X1vir1000 | x1-DFB127                    | x1dvdb201_mv_pmp-132     | Not-activated | 3   | x1ttcr181 | x1ttcr182
X3vir1000 | x3-DFB116                    | x3dvdb202_mv_05032016    | Not-activated | 22  | x3ttcr175 | x3ttcr176
X3vir1000 | x3-DFB116                    | x3ttcb203_mv_03_2016     | Not-activated | 19  | x3ttcr175 | x3ttcr176
X3vir1000 | x3-DFB116                    | x3trcb223_mv_10_2017     | Not-activated | 29  | x3ttcr175 | x3ttcr176
X3vir1000 | x3-DFB117                    | x3trvf245_mv_08_2017     | Not-activated | 27  | x3ttcr177 | x3ttcr178
X3vir1000 | x3-DFB131                    | CR74536_x3dvap234_Decom  | Not-activated | 101 | x3ttcr213 | x3ttcr214
X3vir1000 | x3-DFB132                    | decommissioned_x3trcb223 | Not-activated | 138 | x3ttcr217 | x3ttcr218
X3vir1000 | x3-DFB132                    | decommissioned_x3trcb312 | Not-activated | 116 | x3ttcr217 | x3ttcr218
X9vir1000 | x9-DFB005-8233-E8B-SN1030BDR | x9trcb003_vhost1_decomm  | Not-activated | 4   | x9ttcr012 | x9ttcr013

Сценарий оболочки, который встраивает указанную выше awkпрограмму и принимает два параметра:

  • -d delim, где delim— используемый разделитель вывода.
  • -D delimгде delim— разделитель ввода для использования (, например. -D '\t'для вкладок во входных данных ).

Такой скрипт будет использоваться для воссоздания двух прогонов выше:

./script.sh file
./script.sh -d ' | ' file

Скрипт:

#!/bin/sh

while getopts 'd:D:' opt; do
    case $opt in
        d)  delim=$OPTARG ;;
        D)  fs=$OPTARG ;;
        *)  echo 'Error in command line parsing' >&2
            exit 1
    esac
done
shift "$(( OPTIND - 1 ))"

tmpfile=$(mktemp)
# If mktemp is not available:
# tmpfile="${TMPDIR:-/tmp}/columnn-t.tmp"
#... or something similar
cat "$1" >$tmpfile

awk ${delim:+-v delim="$delim"} ${fs:+-F "$fs"} '
FNR == NR {
    for (i = 1; i <= NF; ++i) {
        width = length($i)
        maxwidth[i] = (width > maxwidth[i] ? width : maxwidth[i])
    }

    next
}

{
    for (i = 1; i <= NF; ++i)
        printf("%-*s%s", maxwidth[i], $i,
            (i == NF ? "\n" : (delim == "" ? " " : delim)) )    
}' "$tmpfile" "$tmpfile"

rm -f "$tmpfile"
2
27.01.2020, 23:31

Теги

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