Это возможно. Это требует
Затем Вы копируете блок от зашифрованного тома до области вне 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.
Блок, копирующий, я упомянул в начале, не необходимо из-за большого количества свободного пространства.
Эти переменные описывают саму подсказку:
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