Настройка загрузки с раздела LVM

На том же зеркале репозиториев Debian для пользователей Уфанета я настраивал LVM. У меня было несколько жёстких дисков, которые мне хотелось задействовать для хранения репозиториев. Тогда я решил это сделать, объединив все эти жёсткие диски с помощью LVM, и создав на нём отдельный большой раздел для хранения репозиториев. Для этой цели я даже прикупил SATA-контроллер с интерфейсом PCI, потому что в этом компьютере встроенного контроллера SATA не было.

Надо сказать, что использование LVM на этом компьютере принесло мне не только полезный опыт, но и некоторые неразрешимые проблемы. Компьютер мой с этого контроллера грузиться не умел, и поэтому раздел с загрузчиком я расположил на IDE-диске, за пределами пространства LVM. Однако SATA-диски каким-то образом сбивали нумерацию дисков в BIOS, в результате чего загрузка начиналась именно с них, хотя они не отображались в меню BIOS. Отключить загрузку с SATA-контроллера совсем мне тоже не удалось.

В результате образовалась комичная ситуация - для того, чтобы загрузить систему, мне нужно было перед перезагрузкой отключать SATA-диски от контроллера. А когда BIOS уже начинал загрузку с IDE-диска, мне нужно было быстро их подключить снова, чтобы Linux нормально смонтировал разделы LVM. Впрочем, делать это мне пришлось всего несколько раз - этот домашний сервер никогда специально не выключался и грузить его таким способом приходилось только после сбоев электропитания или после перезагрузки, связанной с установкой обновлений ядра.

Заметка эта так и не была доработана до конца, и в итоге так и осталась схематичной, однако она всё равно остаётся полезной.

Устанавливаем утилиты для работы с томами LVM:

# apt-get install lvm2

Подготовка initrd для работы ядра с корневой файловой системой в томе LVM:

# cp /usr/share/initramfs-tools/hooks/lvm2 /etc/initramfs-tools/hooks/
# cp /usr/share/initramfs-tools/scripts/local-top/* /etc/initramfs-tools/scripts/local-top/
# update-initramfs -u

Теперь очередь GRUB. У меня стоит grub 0.97 и менять мне его пока не хочется. Поэтому нужно создать отдельный раздел для /boot. Оценив объём файлов, находящихся в каталоге /boot с помощью команды du -h --max-depth 0 /boot, я решил создать раздел boot объёмом 50 мегабайт.

Переносим содержимое /boot в новый раздел (описание процедуры переноса опущено), на оставшемся пустом месте диска создаём раздел LVM, в котором создаём логический раздел для корневой файловой системы. Переносим корневой раздел, за исключением содержимого /boot, в логический том LVM.

После того, как перенос окончен, в файле /boot/grub/menu.lst находим строчки:

title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/hda2 ro
initrd          /boot/initrd.img-2.6.26-2-686

title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/hda2 ro single
initrd          /boot/initrd.img-2.6.26-2-686

И меняем их на следующие:

title           Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/vg-root ro
initrd          /boot/initrd.img-2.6.26-2-686

title           Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.26-2-686 root=/dev/mapper/vg-root ro single
initrd          /boot/initrd.img-2.6.26-2-686

В файле /etc/fstab делаем такую-же замену. Заменяем:

/dev/hda2                 /               ext3    defaults,errors=remount-ro 0       1

На:

/dev/mapper/vg-root       /               ext3    defaults,errors=remount-ro 0       1

Можно перезагружаться.

Написать автору