[Comm] Move installed system to LVM

Eugene Prokopiev =?iso-8859-1?q?prokopiev_=CE=C1_stc=2Edonpac=2Eru?=
Сб Мар 26 21:38:37 MSK 2005


Здравствуйте!

Никогда не имел раньше дела с LVM, вот решил попробовать.

Т.к. дрыгинсталлер не позволяет размещать / или /boot на LVM, то
остается только один вариант: перетянуть на LVM уже установленную систему.

Система, которую надо перетягивать, выглядит так:

/dev/hdc1	/boot
/dev/hdc5	swap
/dev/hdc6	/
/dev/hdc7	/var
/dev/hdc8	/home

Перетянуть ее надо на hda. Последний был размечен так:

/dev/hda1	/boot
/dev/hda2	swap
/dev/hda3	lvm (сюда планируется поместить /, /var, /home)

Немного о смысле выполняемых операций: LVM нужен для бэкапа всей системы
без перезагрузки или загрузки в монопольном режиме c использованием
снапшотов. Т.к. изменения в /boot все равно ведут к перезагрузке, то его
в LVM выносить не нужно. / может быть и есть смысл побить дальше, но
сейчас это не принципиально. Если есть замечания к сказанному, буду рад
выслушать.

Создаем LVM так:

# pvcreate /dev/hda3
# vgcreate vg /dev/hda3
# lvcreate -L500M -nroot vg
# lvcreate -L200M -nvar vg
# lvcreate -L200M -nhome vg
# mkfs.ext3 /dev/vg/root
# mkfs.ext3 /dev/vg/var
# mkfs.ext3 /dev/vg/home

Затем перегружаемся с System Rescue CD (http://www.sysresccd.org/), т.к. 
rescue от ALM 2.4 ничего об LVM не знает.

Переносим систему так:

# vgchange -ay
# mkdir /system-lvm
# mount /dev/vg/root /system-lvm/
# mkdir /system-lvm/var
# mkdir /system-lvm/home
# mkdir /system-lvm/boot
# mount /dev/vg/var /system-lvm/var/
# mount /dev/vg/home /system-lvm/home/
# mount /dev/hda1 /system-lvm/boot/
# mkdir /system-raw
# mount /dev/hdc6 /system-raw/
# mount /dev/hdc7 /system-raw/var
# mount /dev/hdc8 /system-raw/home/
# mount /dev/hdc1 /system-raw/boot/
# cd /system-raw
# find ./ | cpio -pvmd /system-lvm/
# chroot /system-lvm/ /bin/bash
# lvmcreate_initrd 2.4.26-std-up-alt6

Затем создаем новый initrd:

# lvmcreate_initrd 2.4.26-std-up-alt6
Logical Volume Manager 1.0.8 by Heinz Mauelshagen  17/11/2003
lvmcreate_initrd -- make LVM initial ram disk 
/boot/initrd-lvm-2.4.26-std-up-alt6.gz

lvmcreate_initrd -- finding required shared libraries
lvmcreate_initrd -- stripping shared libraries
lvmcreate_initrd -- calculating initrd filesystem parameters
lvmcreate_initrd -- calculating loopback file size
lvmcreate_initrd -- making loopback file (6389 kB)
lvmcreate_initrd -- making ram disk filesystem (19392 inodes)
lvmcreate_initrd -- mounting ram disk filesystem
lvmcreate_initrd -- creating new /etc/modules.conf
lvmcreate_initrd -- creating new modules.dep
depmod: *** Unresolved symbols in 
/lib/modules/2.4.26-std-up-alt6/kernel/arch/i386/kernel/apm.o
...
depmod: *** Unresolved symbols in 
/lib/modules/2.4.26-std-up-alt6/v4l/w9968cf.o
lvmcreate_initrd -- copying device files to ram disk
lvmcreate_initrd -- copying initrd files to ram disk
lvmcreate_initrd -- copying shared libraries to ram disk
lvmcreate_initrd -- creating new /linuxrc
lvmcreate_initrd -- creating new /etc/fstab
lvmcreate_initrd -- ummounting ram disk
lvmcreate_initrd -- creating compressed initrd 
/boot/initrd-lvm-2.4.26-std-up-alt6.gz

Меняем ссылку initrd-up.img:

# rm -rf /boot/initrd-up.img
# ln -s /boot/initrd-lvm-2.4.26-std-up-alt6.gz /boot/initrd-up.img

Правим /etc/lilo.conf:

boot=/dev/hda
map=/boot/map
install=/boot/boot-bmp.b
default=linux-up
ramdisk=8192
prompt
timeout=50
image=/boot/vmlinuz-up
         label=linux-up
         root=/dev/vg/root
         initrd=/boot/initrd-up.img
         read-only
image=/boot/vmlinuz-up
         label=failsafe
         root=/dev/vg/root
         initrd=/boot/initrd-up.img
         vga=normal
         append=" failsafe noapic nolapic acpi=off"
         read-only
other=/dev/fd0
         label=floppy
         unsafe

Запускаем lilo, затем выходим из чрута, перегружаемся.

При попытке загрузиться получаем:

insmod: /lib/modules/2.4.26-std-up-alt6/kernel/drivers/scsi/scsi_mod.o 
failed
insmod: insmod lvm-mod failed
vgscan -- LVM driver/module not loaded?
vgchange -- ERROR: "/etc/lvmtab" doesn't exist or unreadable; you may 
need to run vgscan

Возвращаемся в чрут и пытаемся положить scsi_mod.o в initrd:

# gunzip initrd-lvm-2.4.26-std-up-alt6.gz
# mount -o loop initrd-lvm-2.4.26-std-up-alt6 /mnt/disk/
# mkdir /mnt/disk/lib/modules/2.4.26-std-up-alt6/kernel/drivers/scsi
# cp /lib/modules/2.4.26-std-up-alt6/kernel/drivers/scsi/scsi_mod.o 
/mnt/disk/lib/modules/2.4.26-std-up-alt6/kernel/drivers/scsi
# umount /mnt/disk/
# gzip initrd-lvm-2.4.26-std-up-alt6

После перезагрузки выясняется, что теперь не хватает 
/lib/modules/2.4.26-std-up-alt6/promise/pti_st.o

Добавляем в initrd и его, снова перегружаемся. Получаем:

SCSI subsistem driver Revision: 1.00
/lib/modules/2.4.26-std-up-alt6/promise/pti_st.o: init_module: no such 
device
ну и т.д.

Собственно, ничего удивительного в этом нет, т.к. SCSI-устройства на 
данной машине отсутствуют, а сама машина живет в VMware. Интересно 
другое: зачем для initrd потребовалась поддержка SCSI и как сделать 
работающий initrd?

-- 
С уважением, Прокопьев Евгений



Подробная информация о списке рассылки community