Усаживание одного раздела RAID-1 и растут другой

Есть много способов заставить printf делать это за вас, но вот лишь пара:

printf ' ./prog %d0\n' 1 2 3 | sh

Или, может быть, вы хотите, чтобы программа действительно запускалась 30 раз. seq uence и printf очень хорошо подходят для этой цели:

printf ' ./prog %d\n'  `seq 1 30` | sh

Или, может быть, результаты вашей команды включают какое-то значение переменной, которым вы не хотите жертвовать. дальняя сторона трубы. Хорошо.: [

. <<CMD /dev/fd/0
    $(printf './prog %d0\n' 1 2 3 )
CMD

] Возможно, вам не нужны числа, но вам нужно столько копий строки, или, может быть, нужно повторить только часть команды, но другие части статичны:

 . <<CMD /dev/fd/0
    $( { printf 'echo "this is part 1" >&2| ' ;\
    printf 'echo "these are parts %d" >&2 | ' `seq 1 5` ; })
CMD

printf 'this string is repeated for each of printfs args, 
    but the args are not included%.0b\n' `seq 1 5`
3
02.01.2019, 17:03
1 ответ

У вас есть RAID1, поэтому, если вы готовы пойти на риск сбоя диска во время преобразования, это можно сделать. Это не полный рецепт, и вы должны понимать, что делаете. Даже в этом случае вполне возможно, что вы потеряете данные, и я бы настоятельно настоятельно рекомендовал вам сделать резервную копию перед началом работы. Действительно. Да, я серьезно.

Общий план

  1. Разбить зеркало RAID
  2. Измените размер теперь -неиспользуемой половины, чтобы она соответствовала новым требованиям
  3. Создайте новое полузеркало RAID с разделами нового размера
  4. Скопируйте все файловые системы из активной половины в новую половину с измененным размером (Прежде чем делать это, остановите как можно больше служб)
  5. Перезагрузка с новой половиной RAID (сложная)
  6. Добавить обратно оставшуюся половину зеркала в RAID
  7. Прибраться

Теперь, прежде чем вы даже подумаете о том, чтобы применить это к вашей действующей системе, сделайте резервную копию.

Пока он работает, попробуйте этот процесс на паре одноразовых образов петлевых дисков. Вот как их создать:

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в качестве базовых имен для ваших петлевых -устройств с образами дисков.

Вот некоторые детали. Ваше резервное копирование еще не завершено?

  1. Разбить зеркало 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
    
  2. Изменение размера разделов второго диска

    Используйте предпочитаемый инструмент для удаления и воссоздания разделов на втором диске. Например,

    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%
    
  3. Создайте новое полузеркало 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
    
  4. Скопируйте все файловые системы из активной половины в новую половину с измененным размером

    Перед запуском важно остановить как можно больше служб, чтобы файловые системы были максимально стабильными.

    cp -ax /mnt/103 /mnt/203    # cp -ax / /mnt/203
    cp -ax /mnt/104 /mnt/204    # cp -ax /home /mnt/204
    
  5. Перезагрузка с новой половиной RAID

    Необходимо обновить /etc/mdadm/mdadm.confновыми массивами. Используйте эту команду и добавьте все, что еще не указано в списке

    mdadm --examine --scan
    

    Вам также потребуется обновить grubи, возможно, ваш initramfs, чтобы он мог найти новую корневую файловую систему. Вы не предоставили подробную информацию об этом в своей настройке, поэтому я не могу дать вам инструкции.

  6. Добавить обратно оставшуюся половину зеркала в 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
    
  7. Прибраться

    Удалите старые устройства из /etc/mdadm/mdadm.conf, grubи initramfsи /etc/fstab. Перезагрузить.

1
27.01.2020, 21:29

Теги

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