Завалялась у меня тут инструкция, как включить 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 in 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% для поддержки снапшота. Скрипт работает правильно как для software RAID, так и для
hardware RAID (да, некоторые конфигурации в ServerLoft имеют hardware RAID — я бы не рекомендовал такие брать из-за ухудшения
прозрачности, конечно, но они встречаются).
Note that the following configuration works on ServerLoft hardware RAID controllers too.
Select OS type "Ubuntu 12.04 Minimal, software RAID1" at https://my.serverloft.com/en/Dedicated/Restore
Wait until RAID-1 is fully rebuilt, else strange problems during the next boot may occure. Monitor the rebuilding process running: "watch cat /proc/mdstat".
Enter the recovery mode after the installation is finished at https://my.serverloft.com/en/Dedicated/Recovery/Index
if mdadm -A --scan || [ -e /dev/md0 -a -e /dev/md2 ]; then
export DEV_BOOT=/dev/md0
export DEV_LARGE=/dev/md2
else
export DEV_BOOT=/dev/sda2
export DEV_LARGE=/dev/sda4
fi
mount $DEV_LARGE /mnt
mkdir /rootcopy
if [ -d /mnt/rootcopy ]; then
echo "Please enter the recovery mode before running this script."
rmdir /rootcopy; sleep 5; exit
fi
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.ext3 /dev/mapper/vg0-tmp
mkfs.ext3 /dev/mapper/vg0-root
mount /dev/mapper/vg0-root /mnt
cp -a /rootcopy/* /mnt
mount $DEV_BOOT /mnt/boot
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o bind /run /mnt/run
perl -p -i -e 's{^[^\s#]+\s+/\s+\S+}{/dev/mapper/vg0-root / ext3}s' /mnt/etc/fstab
echo "/dev/mapper/vg0-tmp /tmp ext3 defaults,noatime 0 4" >> /mnt/etc/fstab
chroot /mnt apt-get install lvm2 --yes
chroot /mnt update-grub
[ -e /dev/sda ] && chroot /mnt grub-install /dev/sda
[ -e /dev/sdb ] && chroot /mnt grub-install /dev/sdb
umount /mnt/run
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev/pts
umount /mnt/dev
umount /mnt/boot
umount /mnt
Reboot the server, then in 30 seconds - stop the recovery mode at https://my.serverloft.com/en/Dedicated/Recovery/Index (maybe reboot twice if the first reboot have not succeeded).
Пример, как пользоваться снапшотами
Собственно, имея настроенный 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 в ядро по умолчанию. Вероятно, есть и более простой способ, но я приведу тот, который когда-то использовал:
автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apacheдействительно объясняет такое решение.
Орфография на «Куроводстве»:
если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмитеCtrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите настолько быстро все произойдет.
На заметку:
если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским
местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.