Завалялась у меня тут инструкция, как включить LVM для корневой файловой системы на двух популярных dedicated-хостингах: Hetzner и ServerLoft. Публикую ее здесь.
LVM в Linux используется, в частности, чтобы единомоментно создавать «замороженные» снапшоты файловой системы, которые можно потом спокойно бэкапить, в то время как сервер продолжает работать. Это очень удобная функция, особенно для серверов баз данных: можно делать инкрементный бэкап базы данных, например, при помощи файлового rdiff-backup или duplicity (в том числе на удаленный FTP-сервер, бесплатное и быстрое место на котором предоставляют многие хостеры). Что касается RAID-1 (зеркалирование на 2 дисках), то оно абсолютно необходимо на сервере, чтобы при выходе из строя одного из дисков его можно было заменить, не останавливая машину. Конечно же, нужно ставить LVM поверх RAID-1.
Но беда в том, что ни Hetzner, ни ServerLoft не позволяют включить LVM при первичном создании машины «при помощи одной лишь мышки». Вместо этого они дают возможность установить один из фиксированных образов ОС, максимум что — с включенным RAID-1. Ниже — две инструкции, как переключить такую «налитую» машину на использование LVM для корневой файловой системы, а потом — короткий пример того, как работать со снапшотами. Работать будем с Ubuntu Server 12.04 minimal (для других ОС конфигурация может отличаться).
Внимание: если решили попробовать, выполняйте все эти действия только там, где не жалко потерять данные. Ни в коем случае не экспериментируйте с «живым» сервером, если не разбираетесь досконально в вопросе.
Включаем LVM на машине в Hetzner
Ниже предполагается, что вам нужно только 220G на диске (всего LVM-том содержит 300G, но оставшееся место нам потребуется для создания снапшотов). Если диск больше, но вам совершенно не нужно лишнее место, лучше оставить меньшее значение — это ускоряет перестроение RAID-1 в случае аварий.
- Select OS type «recover» when you install a new machine.
- Login via SSH and run «installimage» command (just type «installimage» and press Enter).
- Select Ubuntu-1204-precise-64-minimal.
- Enter the following configuration to the opened editor:
DRIVE1 /dev/sda DRIVE2 /dev/sdb SWRAID 1 SWRAIDLEVEL 1 BOOTLOADER grub HOSTNAME newhost PART /boot ext2 512M PART lvm vg0 300G # We use only 300G of our large HDD to speedup RAID1 rebuild if it happens. # Anyway, we do not need so much space typically, so 300G is enough. LV vg0 swap swap swap 4G LV vg0 tmp /tmp reiserfs 10G LV vg0 root / ext3 220G IMAGE /root/.oldroot/nfs/install/../images/Ubuntu-1204-precise-64-minimal.tar.gz
- Press F2, then F10 and wait until the installation is finished.
Включаем LVM на машине в ServerLoft
В ServerLoft нет такой богатой утилиты конфигурирования, как Hetzner-овский installimage, а также lvm2 не включен по умолчанию в список пакетов, поэтому инструкция получается сложнее. Немало крови было пролито на ее составление. Ниже мы создаем LVM-том размером 80% от свободного места на диске, оставляя 20% для поддержки снапшота.
- Select OS type «Ubuntu 12.04 Minimal, software RAID1» at my.serverloft.com/en/Dedicated/Restore
- Enter the recovery mode after the installation is finished at my.serverloft.com/en/Dedicated/Recovery/Index
- Run the following commands to prepare partitions:
export DEV_BOOT=/dev/md0 export DEV_LARGE=/dev/md2 mdadm -A --scan mkdir /rootcopy mount $DEV_LARGE /mnt cp -a /mnt/* /rootcopy umount $DEV_LARGE pvcreate $DEV_LARGE vgcreate vg0 $DEV_LARGE lvcreate --name tmp --size 10G vg0 lvcreate --name root -l 80%FREE vg0 mkfs.ext4 /dev/mapper/vg0-tmp mkfs.ext4 /dev/mapper/vg0-root mount /dev/mapper/vg0-root /mnt cp -a /rootcopy/* /mnt rm -rf /rootcopy mount $DEV_BOOT /mnt/boot mount -o bind /dev /mnt/dev mount -t proc none /mnt/proc mount -t sysfs none /mnt/sys perl -p -i -e 's{^[^s#]+(s+/s+)}{/dev/mapper/vg0-root$1}s' /mnt/etc/fstab echo "/dev/mapper/vg0-tmp /tmp ext4 defaults,noatime 0 4" >> /mnt/etc/fstab chroot /mnt apt-get install lvm2 --yes chroot /mnt update-grub chroot /mnt grub-install /dev/sda chroot /mnt grub-install /dev/sdb umount /mnt/sys umount /mnt/proc umount /mnt/dev umount $DEV_BOOT umount /dev/mapper/vg0-root
- Reboot the server, then in 30 seconds — stop the recovery mode at my.serverloft.com/en/Dedicated/Recovery/Index (maybe reboot twice if the first reboot will not succeed).
Пример, как пользоваться снапшотами
Собственно, имея настроенный LVM, можно делать вот такую магию:
# На случай, если в прошлый раз забыли отмонтировать, отмонтируем сейчас.
lvremove -f /dev/vg0/snap 2>/dev/null
# Создаем новый снапшот (40G — это макс. объем, который может быть записан в корневую
# файловую систему, пока снапшот активен). Потом монтируем его для использования.
lvcreate -L40G -s -n snap /dev/vg0/root
mount /dev/vg0/snap /mnt -o ro
# Дальше спокойно делаете бэкап /mnt/* — там будет «замороженное» состояние корневой файловой системы.
duplicity… /mnt…
# Отмонтируем и удаляем снапшот.
umount /mnt
lvremove -f /dev/vg0/snap
Памятка тому, кто использует OpenVZ
По умолчанию в OpenVZ-ядрах не включена поддержка LVM — точнее, Device Mapper-а (в /boot/initrd* отсутствует dm-mod в conf/modules). Если вы хотите потом использовать OpenVZ поверх LVM, можно запустить вот такой скрипт для добавления в существующий initrd модуля dm-mod (распаковали-добавили-запаковали), а также превращения OpenVZ в ядро по умолчанию. Вероятно, есть и более простой способ, но я приведу тот, который когда-то использовал:
FILE=`ls /boot/initrd.img-*stab* 2>/dev/null | head -n 1` if [ "$FILE" == "" ]; then echo Cannot find an OpenVZ initrd in /boot. Aborting. exit 1 fi rm -rf /tmp/initrd* 2>/dev/null mkdir /tmp/initrd cd /tmp/initrd zcat $FILE | cpio -i if ! grep "dm-mod" conf/modules >/dev/null; then echo dm-mod >> conf/modules find ./ | cpio -H newc -o | gzip > /tmp/initrd-new cat /tmp/initrd-new > $FILE fi cd / rm -rf /tmp/initrd* sed -i ' s/GRUB_DEFAULT=.*/GRUB_DEFAULT=1/; s/#GRUB_DISABLE_RECOVERY=.*/GRUB_DISABLE_RECOVERY=true/; s/GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX="selinux=no"/; ' /etc/default/grub update-grub
Автор: DmitryKoterov