[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