История изменений
Исправление santic, (текущая версия) :
Так, на тестовом стенде удалось воспроизвести мой вариант миграции на примере Alpine Linux с конфигурацией дисков на существующем сервере. Пришлось немного поразобираться с syslinux, но вариант оказался рабочий и опробованный два раза.
Попробую посмотреть что можно сделать с вариантом от товарища Xenius.
Вот небольшая интсрукция для истории:
Почитать:
- https://www.dmosk.ru/instruktions.php?object=lvm
- https://wiki.alpinelinux.org/wiki/Installing_on_GPT_LVM
- https://sudaraka.org/how-to/install-syslinux-and-replace-grub-on-a-running-system/
- https://wiki.alpinelinux.org/wiki/Installing_on_GPT_LVM
- https://wiki.alpinelinux.org/wiki/Initramfs_init
Подготовить стенд (загружаемся с 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.
Вот небольшая интсрукция для истории:
Почитать:
- https://www.dmosk.ru/instruktions.php?object=lvm
- https://wiki.alpinelinux.org/wiki/Installing_on_GPT_LVM
- https://sudaraka.org/how-to/install-syslinux-and-replace-grub-on-a-running-system/
Подготовить стенд (загружаемся с 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.