Исправление 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
vgchange -ay vg0
ls -l /dev/mapper
Если в lv нет FS:
mkfs.ext4 /dev/mapper/vg0-test2
mount /dev/mapper/vg0-test1 /mnt
cd /mnt
dd if=/dev/zero of=output1.dat bs=240M count=1
# Снапшотим оригинальный 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
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 разметки.
mkfs.ext4 /dev/sdb1
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
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/
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
/dev/vg_alp/alp_root / ext4 rw,relatime 0 1
# Добавим 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
vim /boot/extlinux.conf
APPEND root=/dev/vg_alp/alp_root modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4
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
vgchange -ay vg0
ls -l /dev/mapper
Если в lv нет FS:
mkfs.ext4 /dev/mapper/vg0-test2
mount /dev/mapper/vg0-test1 /mnt
cd /mnt
dd if=/dev/zero of=output1.dat bs=240M count=1
# Снапшотим оригинальный 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
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
!!! Обязательно на бут разделе поставить аттрибут загрузочного.
mkfs.ext4 /dev/sdb1
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
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/
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
/dev/vg_alp/alp_root / ext4 rw,relatime 0 1
# Добавим 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
vim /boot/extlinux.conf
APPEND root=/dev/vg_alp/alp_root modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=/dev/sdb
Исходная версия santic, :
Так, на тестовом стендне удалось воспроизвести мой вариант миграции на примере моего существующего дистра и конфигурации дисков. Пришлось слегка разобраться с syslinux, но вариант рабочий, опробованный два раза и описан.
Попробую посмотреть что можно сделать с вариантом от товарища Xenius.