LINUX.ORG.RU

История изменений

Исправление santic, (текущая версия) :

Так, на тестовом стенде удалось воспроизвести мой вариант миграции на примере Alpine Linux с конфигурацией дисков на существующем сервере. Пришлось немного поразобираться с syslinux, но вариант оказался рабочий и опробованный два раза.

Попробую посмотреть что можно сделать с вариантом от товарища @Xenius.

Вот небольшая интсрукция для истории:

Почитать:

Подготовить стенд (загружаемся с live ISO Alpine Linux):

Создать скрипт

vi ~/prep.sh
#/bin/sh

cat <<EOT > /etc/network/interfaces
auto eth0
 iface eth0 inet dhcp
EOT

/sbin/rc-service networking restart

/sbin/setup-apkrepos -cf

/sbin/apk add vim lsblk lvm2 openssh e2fsprogs lvm2-dmeventd cfdisk rsync syslinux gptfdisk sgdisk

echo -e "123\n123" | passwd

/bin/sed -i '/PermitRootLogin/c\PermitRootLogin yes' /etc/ssh/sshd_config

/sbin/rc-service sshd restart

Запустить

chmod +x ~/prep.sh
sh ~/prep.sh

Проверить что имеется

lsblk -f
mount
pvscan
lvm vgscan
lvdisplay
ls -l /dev/mapper

Если с нуля, то создать примеры

pvcreate  /dev/sdb /dev/sdc
vgcreate vg0 /dev/sdb
vgcreate vg1 /dev/sdc
lvcreate -n test1 -L 1G vg0
lvcreate -n test2 -L 1G vg0

Активировать нужный vg

vgchange -ay vg0
ls -l /dev/mapper

Если в lv нет FS:

mkfs.ext4 /dev/mapper/vg0-test2

Примонтировать lv и создать файл

mount /dev/mapper/vg0-test1 /mnt
cd /mnt
dd if=/dev/zero of=output1.dat  bs=240M  count=1

Произвести миграцию lv

# Снапшотим оригинальный lv
lvcreate --snapshot --name t1-snap -L 1G /dev/vg0/test1
# Создаём lv на другом vg, аналогичный lv оригиналу
lvcreate -L 1G  --name test1 vg1
# Копируем lv из vg0 в vg1
dd if=/dev/vg0/t1-snap  of=/dev/vg1/test1

или

# Узнаём точный размер исходного lv
lvdisplay /dev/vg0/test2 --units b
# Исходя из предыдущей команды создаём новый lv
lvcreate -L 1073741824b -n test2 vg1
# Копируем lv
dd if=/dev/vg0/test2 of=/dev/vg1/test2 bs=1024K conv=noerror

Уничтожить lvm на целевом диске

lvremove /dev/vg0/*
vgremove vg0
pvremove /dev/sdb
# Дополнительно можно сделать
wipefs -a /dev/sda

Разметить диск

gdisk /dev/sdb
Number  Start (sector)    End (sector)  Size Name
     1            2048         1050623  512M
     2         1050624         7342079 3072M
     3         7342080        16775167 4606M

!!! Обязательно на бут разделе поставить аттрибут загрузочного.

!!! Нажать «o» для создания GPT разметки.

  • №1 под раздел boot
  • №2 под корневой раздел
  • №3 под другой vg

Наделать ФС

mkfs.ext4 /dev/sdb1

Создать lvm разметку

pvcreate /dev/sdb2 /dev/sdb3
vgcreate vg_alp /dev/sdb2
vgcreate vg0 /dev/sdb3
lvcreate -l 100%FREE -n alp_root vg_alp
lvdisplay /dev/vg1/test1 --units b
lvcreate -L 1073741824b -n test1 vg0
dd if=/dev/vg1/test1 of=/dev/vg0/test1 bs=1024K conv=noerror
vdisplay /dev/vg1/test2 --units b
lvcreate -L 1073741824b -n test2 vg0
dd if=/dev/vg1/test2 of=/dev/vg0/test2 bs=1024K conv=noerror

Проверяем lvm разметку и удаляем лишнее

mkdir /mnt/t1
mkdir /mnt/t2
mount /dev/vg0/test1 /mnt/t1
mount /dev/vg0/test2 /mnt/t2
umount /mnt/t1
umount /mnt/t2
lvremove /dev/vg1/test1
lvremove /dev/vg1/test2

Копируем корневой раздел

mkfs.ext4 /dev/vg_alp/alp_root
mkdir /mnt/src /mnt/dst
mount /dev/sda3 /mnt/src/
mount /dev/vg_alp/alp_root /mnt/dst/
rsync -axHAWXS --numeric-ids --info=progress2 /mnt/src/ /mnt/dst/
umount /mnt/src/ /mnt/dst/

Пытаемся восстановить boot

mount /dev/sdb1 /mnt/dst/
mount /dev/sda1 /mnt/src/
cp -v /mnt/src/vmlinuz-lts /mnt/dst/
cp -v /mnt/src/initramfs-lts /mnt/dst/
umount /mnt/src/ /mnt/dst/
rm -rf /mnt/*
mount /dev/vg_alp/alp_root /mnt
mount /dev/sdb1 /mnt/boot/
for i in /sys /proc /run /dev /dev/pts; do mount --bind "$i" "/mnt$i"; done
chroot /mnt

Вправляем /etc/fstab:

/dev/vg_alp/alp_root                            /       ext4    rw,relatime 0 1

Вправляем initramfs (/etc/mkinitfs/mkinitfs.conf):

# Добавим lvm в конфиге
features="ata base ide scsi usb virtio ext4 lvm"

Пересобираем:

# проверим какое ядро
ls /lib/modules/
# пересобираем
mkinitfs -c /etc/mkinitfs/mkinitfs.conf -b / 6.6.24-0-lts

Производим действия с загрузчиком:

extlinux --install /boot
update-extlinux

Меняем root

vim /boot/extlinux.conf
APPEND root=/dev/vg_alp/alp_root modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4

Установка загрузчика в MBR

dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=/dev/sdb

Исправление santic, :

Так, на тестовом стенде удалось воспроизвести мой вариант миграции на примере Alpine Linux с конфигурацией дисков на существующем сервере. Пришлось немного поразобираться с syslinux, но вариант оказался рабочий и опробованный два раза.

Попробую посмотреть что можно сделать с вариантом от товарища @Xenius.

Вот небольшая интсрукция для истории:

Почитать:

Подготовить стенд (загружаемся с live ISO Alpine Linux):

Создать скрипт

vi ~/prep.sh
#/bin/sh

cat <<EOT > /etc/network/interfaces
auto eth0
 iface eth0 inet dhcp
EOT

/sbin/rc-service networking restart

/sbin/setup-apkrepos -cf

/sbin/apk add vim lsblk lvm2 openssh e2fsprogs lvm2-dmeventd cfdisk rsync syslinux gptfdisk sgdisk

echo -e "123\n123" | passwd

/bin/sed -i '/PermitRootLogin/c\PermitRootLogin yes' /etc/ssh/sshd_config

/sbin/rc-service sshd restart

Запустить

chmod +x ~/prep.sh
sh ~/prep.sh

Проверить что имеется

lsblk -f
mount
pvscan
lvm vgscan
lvdisplay
ls -l /dev/mapper

Если с нуля, то создать примеры

pvcreate  /dev/sdb /dev/sdc
vgcreate vg0 /dev/sdb
vgcreate vg1 /dev/sdc
lvcreate -n test1 -L 1G vg0
lvcreate -n test2 -L 1G vg0

Активировать нужный vg

vgchange -ay vg0
ls -l /dev/mapper

Если в lv нет FS:

mkfs.ext4 /dev/mapper/vg0-test2

Примонтировать lv и создать файл

mount /dev/mapper/vg0-test1 /mnt
cd /mnt
dd if=/dev/zero of=output1.dat  bs=240M  count=1

Произвести миграцию lv

# Снапшотим оригинальный lv
lvcreate --snapshot --name t1-snap -L 1G /dev/vg0/test1
# Создаём lv на другом vg, аналогичный lv оригиналу
lvcreate -L 1G  --name test1 vg1
# Копируем lv из vg0 в vg1
dd if=/dev/vg0/t1-snap  of=/dev/vg1/test1

или

# Узнаём точный размер исходного lv
lvdisplay /dev/vg0/test2 --units b
# Исходя из предыдущей команды создаём новый lv
lvcreate -L 1073741824b -n test2 vg1
# Копируем lv
dd if=/dev/vg0/test2 of=/dev/vg1/test2 bs=1024K conv=noerror

Уничтожить lvm на целевом диске

lvremove /dev/vg0/*
vgremove vg0
pvremove /dev/sdb
# Дополнительно можно сделать
wipefs -a /dev/sda

Разметить диск

gdisk /dev/sdb
Number  Start (sector)    End (sector)  Size Name
     1            2048         1050623  512M
     2         1050624         7342079 3072M
     3         7342080        16775167 4606M

!!! Обязательно на бут разделе поставить аттрибут загрузочного.

  • №1 под раздел boot
  • №2 под корневой раздел
  • №3 под другой vg

Наделать ФС

mkfs.ext4 /dev/sdb1

Создать lvm разметку

pvcreate /dev/sdb2 /dev/sdb3
vgcreate vg_alp /dev/sdb2
vgcreate vg0 /dev/sdb3
lvcreate -l 100%FREE -n alp_root vg_alp
lvdisplay /dev/vg1/test1 --units b
lvcreate -L 1073741824b -n test1 vg0
dd if=/dev/vg1/test1 of=/dev/vg0/test1 bs=1024K conv=noerror
vdisplay /dev/vg1/test2 --units b
lvcreate -L 1073741824b -n test2 vg0
dd if=/dev/vg1/test2 of=/dev/vg0/test2 bs=1024K conv=noerror

Проверяем lvm разметку и удаляем лишнее

mkdir /mnt/t1
mkdir /mnt/t2
mount /dev/vg0/test1 /mnt/t1
mount /dev/vg0/test2 /mnt/t2
umount /mnt/t1
umount /mnt/t2
lvremove /dev/vg1/test1
lvremove /dev/vg1/test2

Копируем корневой раздел

mkfs.ext4 /dev/vg_alp/alp_root
mkdir /mnt/src /mnt/dst
mount /dev/sda3 /mnt/src/
mount /dev/vg_alp/alp_root /mnt/dst/
rsync -axHAWXS --numeric-ids --info=progress2 /mnt/src/ /mnt/dst/
umount /mnt/src/ /mnt/dst/

Пытаемся восстановить boot

mount /dev/sdb1 /mnt/dst/
mount /dev/sda1 /mnt/src/
cp -v /mnt/src/vmlinuz-lts /mnt/dst/
cp -v /mnt/src/initramfs-lts /mnt/dst/
umount /mnt/src/ /mnt/dst/
rm -rf /mnt/*
mount /dev/vg_alp/alp_root /mnt
mount /dev/sdb1 /mnt/boot/
for i in /sys /proc /run /dev /dev/pts; do mount --bind "$i" "/mnt$i"; done
chroot /mnt

Вправляем /etc/fstab:

/dev/vg_alp/alp_root                            /       ext4    rw,relatime 0 1

Вправляем initramfs (/etc/mkinitfs/mkinitfs.conf):

# Добавим lvm в конфиге
features="ata base ide scsi usb virtio ext4 lvm"

Пересобираем:

# проверим какое ядро
ls /lib/modules/
# пересобираем
mkinitfs -c /etc/mkinitfs/mkinitfs.conf -b / 6.6.24-0-lts

Производим действия с загрузчиком:

extlinux --install /boot
update-extlinux

Меняем root

vim /boot/extlinux.conf
APPEND root=/dev/vg_alp/alp_root modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4

Установка загрузчика в MBR

dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=/dev/sdb

Исходная версия santic, :

Так, на тестовом стендне удалось воспроизвести мой вариант миграции на примере моего существующего дистра и конфигурации дисков. Пришлось слегка разобраться с syslinux, но вариант рабочий, опробованный два раза и описан.

Попробую посмотреть что можно сделать с вариантом от товарища @Xenius.