Должен ли я ответить "Клонировать многократно затребованные блоки?" при запуске e2fsck?

Этот скрипт у меня работает. Я тестировал его в GNU Awk 4.0.1, но он также должен работать в Nawk.

awk 'BEGIN {
    # action=0: uncomment
    # action=1: comment
    action=0
    in_optional_code_block=0
}
{
    if ($0 ~ /^# BEGIN/) {
        in_optional_code_block=1
    } else if ($0 ~ /^# END/) {
        in_optional_code_block=0
    } else if (in_optional_code_block) {
        if (action) {
            if ($0 !~ /^#/) {
                $0 = "# " $0
            }
        } else {
            if ($0 ~ /^#/) {
                sub(/^# ?/, "")
            }
        }
    }
}
1'

Я также написал небольшой сопутствующий сценарий оболочки:

#!/usr/bin/env sh

syntax_error() {
    echo "Usage: `basename \"$0\"` [comment|uncomment] file" >&2
    exit 1
}

case "$1" in
    0|uncomment) action=0; ;;
    1|comment) action=1; ;;
    *) syntax_error; ;;
esac
shift
if [ -z "$@" ]; then syntax_error; fi

awk 'BEGIN {
    action='$action'
    in_optional_code_block=0
}
{
    if ($0 ~ /^# BEGIN/) {
        in_optional_code_block=1
    } else if ($0 ~ /^# END/) {
        in_optional_code_block=0
    } else if (in_optional_code_block) {
        if (action) {
            if ($0 !~ /^#/) {
                $0 = "# " $0
            }
        } else {
            if ($0 ~ /^#/) {
                sub(/^# ?/, "")
            }
        }
    }
}
1' "$@" > ".$@.commentswap"
if [ $? -eq 0 ]; then mv ".$@.commentswap" "$@"; fi

(Если у вас GNU Awk 4.1.0 или новее, вы можете использовать флаг -i вместо конструкции перемещения в конце.)

{{1 }}
8
13.03.2019, 13:06
1 ответ

Multiply -заявленные блоки — это блоки, которые используются несколькими файлами, когда этого не должно быть. Одним из следствий этого является то, что изменения в одном из этих файлов в одном из затронутых блоков также будут отображаться как изменения в файлах, которые совместно используют блоки, а это не то, что вам нужно. (Жесткие ссылки — это другой сценарий, который здесь не показан.)

Если здесь есть потеря данных, она уже произошла , и ее нелегко будет восстановить; но могло быть и хуже...

Если вы ответите «нет» на вопрос fsck, файловая система останется в несогласованном состоянии. Если вы ответите «да», то fsckскопирует общие блоки, чтобы их можно было повторно -выделить в один файл — при задействованных здесь 84 файлах каждый блок будет скопирован 83 раза. Это позволит избежать потери данных в будущем, поскольку изменения в файлах будут ограничены каждым отдельным файлом, как и следовало ожидать. Однако клонирование блоков может включать перезапись данных в других блоках, которые в настоящее время кажутся неиспользуемыми, но могут содержать данные, которые вы хотите сохранить.

Таким образом, применяется традиционный совет по восстановлению данных -, :если вы считаете, что вам нужно восстановить данные из файловой системы, не трогайте ее; сделайте копию на другом диске и работайте над восстановлением данных.Сценарий, в котором это может быть желательным, выглядит следующим образом. Файлы A и B раньше были отдельными, но после некоторого повреждения файл B теперь разделяет блоки с файлом A. Если ничто не перезаписало старые блоки файла B, данные все еще там, но они больше не доступны. Пока ничто не перезаписывает эти блоки, их можно восстановить (возможно, приложив немало усилий ). Но как только они перезаписываются, они исчезают; а здесь клонирование общих блоков из файла А может перезаписать старые данные...

Таким образом, если у вас есть резервные копии или вы знаете, что данные можно легко восстановить, ответьте «да». В противном случае остановите fsck, скопируйте файловую систему куда-нибудь еще, и если вам нужно, чтобы система работала и работала, снова запустите fsckи ответьте «да» (и восстановите данные из копии ). Если данные важны и нуждаются в восстановлении, скопируйте файловую систему в другое место, но оставьте оригинал в покое — если вам нужна резервная копия и работающая система, сделайте еще одну копию и запустите систему после запуска fsckв теме.

15
27.01.2020, 20:11

Теги

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