Похоже, у Btrfs есть проблемы с изменением имен файлов блочных устройств (, например, /dev/sda ). У меня была такая же проблема:
Создал файловую систему Btrfs, записал некоторые данные, размонтировал, удалил диск из моей системы (это 2,5-дюймовый диск SATA ). Неделю спустя я снова подключил диск с горячей заменой, и мне не удалось его смонтировать. Can't read superblock
.btrfs rescue super-recover
сказал, что все хорошо. Я даже сделал btrfs check
, и это также подтвердило, что все хорошо.
У меня более старое ядро :4.15-Я думаю, что это уже решено в более новой версии Btrfs (более новые ядра ), но для старых -просто перезагрузитесь.
Система перечислит диски, и ваша файловая система Btrfs должна смонтироваться без проблем.
Если это не работает, -попробуйте обновить ядро.
Вы не можете сделать это напрямую с шаблонами REGEX, но вы можете (ab )использовать опцию printf
для левого -поглаживания с пробелами и пустой строкой:
sed "/pattern/a$(printf '\%12s')SystemCgroup =.../" file
Обратите внимание, что знак процента необходимо экранировать.
Использование синтаксического анализатора TOMLtomlq
(изhttps://kislyuk.github.io/yq/):
tomlq -t '.plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options.SystemdCgroup |= true' config.toml
Используйте tomlq
с параметрами--in-place
(или -i
), чтобы выполнить редактирование в -месте.
Выражение, используемое с tomlq
выше, является jq
выражением(tomlq
является jq
оболочкой ), которая устанавливает определенный ключ в структуре документа в значение true
.
Обратите внимание, что интервал в документе не имеет значения для достоверности структуры документа.
В общем, с sed
, если вы хотите вставить строку текста с той же глубиной отступа, что и предыдущая строка, рассмотрите возможность повторного использования отступа этой предыдущей строки.
/^\([[:blank:]]*\)\[.*runc\.options\].*/ {
h
s//\1 SystemdCgroup = true/
H
g
}
Этот sed
скрипт соответствует метке определенного раздела, который мы ищем, и запоминает количество пробелов, предшествующих [
в этой строке. Он сохраняет копию строки в области хранения, заменяет строку в буфере нашими новыми данными, используя \1
для вставки исходного отступа. Затем добавляет буфер к пространству хранения (, который вставляет символ новой строки )и извлекает пространство хранения в буфер редактирования для печати.
Обратите внимание, однако, что sed
и аналогичные инструменты, ориентированные на строку -, часто не подходят для работы со структурированными форматами документов, такими как TOML, YAML, JSON и XML. Эти форматы не всегда разделяются строкой -, поскольку они могут требовать определенного кодирования данных.