Объедините 2 подсказки в одну, показав состояние ошибки красного/оранжевого цвета

Это возможно. Это требует

  1. другой Linux для начальной загрузки (CD/DVD в порядке),
  2. некоторое запасное пространство вне PV (100M было бы хорошо),
  3. определенное количество бесстрашия...

Затем Вы копируете блок от зашифрованного тома до области вне PV и (после успеха) к незашифрованному основному устройству. После этого Вы увеличиваете счетчик в безопасной области так, чтобы можно было продолжить преобразование в случае катастрофического отказа. В зависимости от вида шифрования это может быть необходимо (или по крайней мере полезно) скопировать с конца блочного устройства к началу.

Если это - опция для Вас затем, я могу предложить некоторый код.

Редактирование 1

Деактивируйтесь раздел подкачки (прокомментируйте его в etc/fstab). Затем загрузите другой Linux (с CD/DVD) и откройте объем LUKS (cryptsetup luksOpen /dev/sda2 lukspv) но не монтируйте LVs. Возможно, Вы должны работать pvscan впоследствии к этому дешифрованное устройство является recogniced. Затем vgchange -ay vg_centos может быть необходимым для активации объемов. Как только они - Вы, может уменьшить файловые системы в них:

e2fsck -f /dev/mapper/vg_centos-lv_root
resize2fs -p /dev/mapper/vg_centos-lv_root 3000M
e2fsck -f /dev/mapper/vg_centos-lv_home
resize2fs -p /dev/mapper/vg_centos-lv_home 2000M

После этого можно уменьшить размер LVs (и удалить подкачку LV):

# with some panic reserve... shouldn't be necessary
lvresize --size 3100M /dev/mapper/vg_centos-lv_root
lvresize --size 2100M /dev/mapper/vg_centos-lv_home
lvremove /dev/mapper/vg_centos-lv_swap

# vgdisplay should show now that most of the VG is free space
vgdisplay

Теперь PV может быть уменьшен (возбуждение, я никогда не делал этого сам ;-)):

vgchange -an vg_centos
pvresize --setphysicalvolumesize 5500M /dev/mapper/lukspv

Править: Возможно, pvmove необходим прежде pvresize может быть назван. В случае ошибки посмотрите этот вопрос.

Перед сокращением размера раздела, необходимо сделать резервное копирование таблицы разделов и сохранить ее на внешнем устройстве хранения данных.

sfdisk -d /dev/sda >sfdisk_dump_sda.txt

Можно использовать этот файл для сокращения размера раздела LUKS. Адаптируйте размер (в секторах) приблизительно к 6 гибибайтам (панический резерв снова...): 12582912. Затем загрузите адаптированный файл:

sfdisk /dev/sda 

Если все выглядит хорошим после перезагрузки, можно создать новый раздел в свободном пространстве (в лучшем случае не занимающий все место, Вы, вероятно, знаете, почему между тем...), и делают это разделом LVM. Затем сделайте раздел PV LVM (pvcreate), создайте новую группу объема (vgcreate) и логические тома для корня, домой и подкачки (lvcreate) и формат их (mke2fs -t ext4, mkswap). Затем можно скопировать содержание открытых crypto объемов. Наконец необходимо реконфигурировать загрузчик так, чтобы он использовал новый rootfs.

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

5
03.06.2019, 23:08
1 ответ

Эти переменные описывают саму подсказку:

PS1_Error="\[\033[31;1m\]"
PS1_Normal="\[\033[0m\]"
PS1_Inside='${debian_chroot:+($debian_chroot)}\u@\h:\w$bad\$ '

Цвета выполняются с помощью ANSI-экранного кода . \033 является экранирующим символом (33 = 27 восьмеричный), затем [31;1m устанавливает цвет текста 31 и эффект 1. [0m устанавливает эффект 0, т.е. все по умолчанию. Обратите внимание, что PS1_Inside находится в single quotes (''), это означает, что подстановка переменных на данном этапе не выполняется. (Это произойдет позже.)

Здесь происходит настоящая магия:

PS1="\`
         ...
\`"

Это устанавливает PS1 на выход выполнения кода в пределах символов ``. ``. С любым выходом произойдет переменное расширение. Код будет выполняться каждый раз, когда появится запрос . Сам код работает так:

        retcode=\$? ;

$? содержит результат предыдущей команды. Ноль означает OK, все остальное - состояние отказа. На данный момент оно хранится в retcode. Все должно быть экранировано, так как мы хотим, чтобы во время выполнения кода были доступны переменные, а не подставлены во время определения.

        if [ 0 -ne \$retcode ]; then

Если это не ноль, то что-то пошло не так. Поэтому мы повторяем стиль запроса, используемый для ошибок. bad используется в PS1_Inside выше. PS1_Error используется для изменения цвета, PS1_Normal используется для изменения цвета обратно к нормальному.

                bad=\" [\\\\\\\$?=\$retcode]\"
                echo \"$PS1_Error$PS1_Inside$PS1_Normal\"
        else

В данном случае ошибки не произошло, поэтому мы не делаем никаких цветов и просто выводим PS1_Inside. Плохая установлена на пустую, поэтому в подсказке ничего не появится.

                bad='';
                echo \"$PS1_Inside\";
        fi;

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

unset PS1_Error PS1_Normal PS1_Inside
5
27.01.2020, 20:39

Теги

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