У вас есть RAID1, поэтому, если вы готовы пойти на риск сбоя диска во время преобразования, это можно сделать. Это не полный рецепт, и вы должны понимать, что делаете. Даже в этом случае вполне возможно, что вы потеряете данные, и я бы настоятельно настоятельно рекомендовал вам сделать резервную копию перед началом работы. Действительно. Да, я серьезно.
Общий план
Теперь, прежде чем вы даже подумаете о том, чтобы применить это к вашей действующей системе, сделайте резервную копию.
Пока он работает, попробуйте этот процесс на паре одноразовых образов петлевых дисков. Вот как их создать:
dd if=/dev/zero bs=1M count=200 > disk1.dat # Create a 200MB "disk"
cp -p disk1.dat disk2.dat # And another
parted disk1.dat --align optimal unit MiB --script mklabel gpt # First disk label
parted disk1.dat --align optimal unit MiB mkpart primary 1 2 # Dummy partition
parted disk1.dat --align optimal unit MiB mkpart primary 2 3
parted disk1.dat --align optimal unit MiB mkpart primary 3 150 # First useful partition
parted disk1.dat --align optimal unit MiB mkpart primary 150 100% # Second
parted disk2.dat --align optimal unit MiB --script mklabel gpt # Second disk
parted disk2.dat --align optimal unit MiB mkpart primary 1 2
parted disk2.dat --align optimal unit MiB mkpart primary 2 3
parted disk2.dat --align optimal unit MiB mkpart primary 3 150
parted disk2.dat --align optimal unit MiB mkpart primary 150 100%
d1=$(losetup --show --find --partscan disk1.dat); echo $d1 # Loop device
d2=$(losetup --show --find --partscan disk2.dat); echo $d2
mdadm --create /dev/md103 --metadata default --level=1 --raid-devices=2 ${d1}p3 ${d2}p3
mdadm --create /dev/md104 --metadata default --level=1 --raid-devices=2 ${d1}p4 ${d2}p4
mkfs -t ext4 -L 103 /dev/md103
mkfs -t ext4 -L 104 /dev/md104
mkdir /mnt/103 /mnt/104 # Mountpoints for our test filesystems
mount /dev/md103 /mnt/103
mount /dev/md104 /mnt/104
Теперь у вас есть две файловые системы RAID1 на /dev/md103
и /dev/md104
, на которые вы можете скопировать некоторые данные и опробовать процесс. У вас есть $d1
и $d2
в качестве базовых имен для ваших петлевых -устройств с образами дисков.
Вот некоторые детали. Ваше резервное копирование еще не завершено?
Разбить зеркало RAID
Вы можете сделать половину из двух разделов RAID неисправными с помощью таких команд, как
mdadm /dev/md103 --set-faulty ${d2}p3 --remove ${d2}p3 # sdb3
mdadm --zero-superblock ${d2}p3
mdadm /dev/md104 --set-faulty ${d2}p4 --remove ${d2}p4 # sdb4
mdadm --zero-superblock ${d2}p4
Изменение размера разделов второго диска
Используйте предпочитаемый инструмент для удаления и воссоздания разделов на втором диске. Например,
parted $d2 --align optimal unit MiB rm 3
parted $d2 --align optimal unit MiB rm 4
В этот момент вам может понадобиться перезагрузить систему. (В качестве альтернативы возможно, что partprobe
может удовлетворить требование.)Не забудьте заново создать устройства петли и назначить $d1
и $d2
, когда вы это сделаете.
parted $d2 --align optimal unit MiB mkpart primary 3 50
parted $d2 --align optimal unit MiB mkpart primary 50 100%
Создайте новое полузеркало RAID с разделами нового размера
Создайте устройства RAID и файловые системы. Не беспокойтесь, что первый предупредит вас, что он уже был частью массива -, но сейчас это не так.
mdadm --create /dev/md203 --metadata default --level=1 --raid-devices=2 missing ${d2}p3
mdadm --create /dev/md204 --metadata default --level=1 --raid-devices=2 missing ${d2}p4
mkfs -t ext4 -L 203 /dev/md203
mkfs -t ext4 -L 204 /dev/md204
mkdir /mnt/203 /mnt/204
mount /dev/md203 /mnt/203
mount /dev/md204 /mnt/204
Скопируйте все файловые системы из активной половины в новую половину с измененным размером
Перед запуском важно остановить как можно больше служб, чтобы файловые системы были максимально стабильными.
cp -ax /mnt/103 /mnt/203 # cp -ax / /mnt/203
cp -ax /mnt/104 /mnt/204 # cp -ax /home /mnt/204
Перезагрузка с новой половиной RAID
Необходимо обновить /etc/mdadm/mdadm.conf
новыми массивами. Используйте эту команду и добавьте все, что еще не указано в списке
mdadm --examine --scan
Вам также потребуется обновить grub
и, возможно, ваш initramfs
, чтобы он мог найти новую корневую файловую систему. Вы не предоставили подробную информацию об этом в своей настройке, поэтому я не могу дать вам инструкции.
Добавить обратно оставшуюся половину зеркала в RAID
Если вы абсолютно уверены, что успешно работаете с новой половиной -зеркального RAID, вы можете уничтожить исходную половину и добавить ее обратно в новую половину -зеркал. Эти команды завершатся ошибкой, если у вас все еще смонтированы файловые системы. (На данном этапе их быть не должно.)
mdadm --stop /dev/md103
mdadm --zero-superblock ${d1}p3
mdadm --stop /dev/md104
mdadm --zero-superblock ${d1}p4
Теперь измените размер оставшихся разделов диска с помощью команд, подобных приведенным выше parted
.
Добавить разделы с измененным размером в новую половину -зеркального RAID1
mdadm /dev/md203 --add ${d1}p3
mdadm /dev/md204 --add ${d1}p4
Прибраться
Удалите старые устройства из /etc/mdadm/mdadm.conf
, grub
и initramfs
и /etc/fstab
. Перезагрузить.
Когда вы source
создаете скрипт, он действует так, как будто содержимое скрипта вводится вручную в командной строке. Последующее source
выполнение сценария даст более высокие «номера строк», поскольку эта метрика фактически становится индикатором количества команд, выполненных в этом сеансе оболочки. Это можно узнать, просто выполнив printf "%s\n" "$LINENO"
в интерактивной подсказке.
Изman bash
(упор мой):
PS4 The value of this parameter is expanded as with PS1 and the
value is printed before each command bash displays during an
execution trace. The first character of PS4 is replicated mul‐
tiple times, as necessary, to indicate multiple levels of indi‐
rection. The default is ``+ ''.
Вместо этого я бы предложил использовать PS4='+${LINENO}: '
, чтобы сохранить значение по умолчанию +
, ++
... указание косвенности.