Резервное копирование · 7 min read · Nov 05, 2025
Резервное копирование (и восстановление) разделов LVM с помощью снимков LVM
Резервное копирование (и восстановление) разделов LVM с помощью снимков LVM
Версия 1.1
Автор: Фалько Тимме
Этот учебник показывает, как вы можете создавать резервные копии разделов LVM с помощью функции LVM, называемой снимками LVM. Снимок LVM — это точная копия раздела LVM, которая содержит все данные из LVM-тома на момент создания снимка. Большое преимущество снимков LVM заключается в том, что они могут значительно сократить время простоя ваших сервисов/баз данных во время резервного копирования, поскольку снимок обычно создается за доли секунды. После создания снимка вы можете создать резервную копию снимка, пока ваши сервисы и базы данных работают в обычном режиме.
Я также покажу, как восстановить раздел LVM из резервной копии в отдельной главе в конце этого учебника.
Этот документ предоставляется без каких-либо гарантий! Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
Я протестировал это на сервере Debian Etch с IP-адресом 192.168.0.100 и именем хоста server1.example.com. У него два жестких диска:
- /dev/sda (10 ГБ), который содержит небольшой раздел /boot (не LVM), раздел / (LVM, чуть меньше 10 ГБ) и раздел подкачки (LVM)
- /dev/sdb (60 ГБ), в данный момент не используется; будет использован для создания раздела /backups (LVM) размером 30 ГБ и для снимков раздела / (10 ГБ - этого достаточно, потому что раздел / чуть меньше 10 ГБ).
Я создал образ Debian Etch для VMware, который вы можете скачать и запустить в VMware Server или VMware Player (см. https://www.howtoforge.com/import_vmware_images, чтобы узнать, как это сделать). Он имеет те же характеристики, что и моя тестовая система выше. Пароль root — howtoforge. Используя этот образ VMware, вы можете выполнить те же шаги, что и я в этом учебнике, чтобы привыкнуть к использованию снимков LVM.
Чтобы восстановить раздел / из вашей резервной копии (об этом говорится в последней главе этого учебника), вам нужен Linux Live-CD, который поддерживает LVM, такой как Knoppix или CD-образ Debian Etch Netinstall, который вы можете использовать в качестве CD для восстановления, если укажете rescue на экране загрузки. В этом примере я буду использовать CD-образ Debian Etch Netinstall (список зеркал доступен здесь: http://www.debian.org/CD/http-ftp/ - я скачал этот: http://ftp.de.debian.org/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso).
Чтобы создать резервную копию раздела /, я буду действовать следующим образом: я создам снимок раздела /, а затем создам резервную копию снимка (вместо самого раздела /!) на разделе /backups (конечно, вы можете хранить эту резервную копию где угодно - вместо создания дополнительного LVM-раздела /backups вы также можете использовать внешний USB-накопитель). Резервное копирование можно сделать с помощью вашего предпочтительного решения для резервного копирования, например, с помощью tar или dd. После этого я уничтожу снимок, потому что он больше не нужен и будет использовать ресурсы системы.
Вам не обязательно нужен второй жесткий диск для снимков - вы можете использовать первый, если у вас достаточно свободного (неразмеченного) пространства на нем для создания снимков (вы должны использовать то же пространство для снимков, что и для раздела, который хотите сохранить). И, как уже упоминалось, вы можете использовать USB-накопитель для резервного копирования снимков.
Чтобы узнать больше о LVM, вам следует прочитать этот учебник: https://www.howtoforge.com/linux_lvm
2 Создание LVM-раздела /backups
(Если вы хотите хранить свои резервные копии где-то еще, например, на внешнем USB-накопителе, вам не нужно это делать.)
Наша текущая ситуация выглядит следующим образом:
pvdisplayserver1:~# pvdisplay
— Физический том —
PV Name /dev/sda5
VG Name server1
PV Size 9.76 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 2498
Free PE 0
Allocated PE 2498
PV UUID vQIUga-221O-GIKj-81Ct-2ITT-bKPw-kKElpM
vgdisplayserver1:~# vgdisplay
— Группа томов —
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 9.76 GB
PE Size 4.00 MB
Total PE 2498
Alloc PE / Size 2498 / 9.76 GB
Free PE / Size 0 / 0
VG UUID jkWyez-c0nT-LCaE-Bzvi-Q4oD-eD3Q-BKIOFC
lvdisplayserver1:~# lvdisplay
— Логический том —
LV Name /dev/server1/root
VG Name server1
LV UUID UK1rjH-LS3l-f7aO-240S-EwGw-0Uws-5ldhlW
LV Write Access read/write
LV Status available
LV Size 9.30 GB
Current LE 2382
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:0
— Логический том —
LV Name /dev/server1/swap_1
VG Name server1
LV UUID 2PASi6-fQV4-I8sJ-J0yq-Y9lH-SJ32-F9jHaj
LV Write Access read/write
LV Status available
LV Size 464.00 MB
Current LE 116
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:1
fdisk -lserver1:~# fdisk -l
Диск /dev/sda: 10.7 ГБ, 10737418240 байт
255 голов, 63 сектора/диск, 1305 цилиндров
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устройство Загрузка Начало Конец Блоки Id Система
/dev/sda1 * 1 31 248976 83 Linux
/dev/sda2 32 1305 10233405 5 Расширенный
/dev/sda5 32 1305 10233373+ 8e Linux LVM
Диск /dev/sdb: 64.4 ГБ, 64424509440 байт
255 голов, 63 сектора/диск, 7832 цилиндров
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Диск /dev/sdb не содержит действительной таблицы разделов
Диск /dev/dm-0: 9990 МБ, 9990832128 байт
255 голов, 63 сектора/диск, 1214 цилиндров
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Диск /dev/dm-0 не содержит действительной таблицы разделов
Диск /dev/dm-1: 486 МБ, 486539264 байт
255 голов, 63 сектора/диск, 59 цилиндров
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Диск /dev/dm-1 не содержит действительной таблицы разделов
Таким образом, /dev/sda содержит логические тома /dev/server1/root (раздел /) и /dev/server1/swap_1 (раздел подкачки), а также небольшой раздел /boot (не LVM).
(Кстати, /dev/server1/root — это то же самое, что и /dev/mapper/server1-root на Debian Etch. Первый является символической ссылкой на второй; я буду использовать обе нотации в этом учебнике. То же самое касается /dev/server1/swap_1 и /dev/mapper/server1-swap_1.)
Теперь я создам раздел /dev/sdb1 и добавлю его в группу томов server1, а затем создам том /dev/server1/backups (который будет 30 ГБ вместо полного 60 ГБ /dev/sdb, чтобы у нас осталось достаточно места для снимков), который я смонтирую на /backups:
fdisk /dev/sdbserver1:~# fdisk /dev/sdb
Устройство не содержит действительной таблицы разделов DOS, а также метки диска Sun, SGI или OSF
Создание новой метки диска DOS. Изменения останутся в памяти только
до тех пор, пока вы не решите их записать. После этого, конечно,
предыдущее содержимое не будет восстановимо.
Количество цилиндров для этого диска установлено на 7832.
С этим нет ничего плохого, но это больше 1024,
и может в некоторых настройках вызвать проблемы с:
- программным обеспечением, которое работает во время загрузки
(например, старые версии LILO) - программным обеспечением для загрузки и разбиения
дисков из других ОС
(например, DOS FDISK, OS/2 FDISK)
Предупреждение: недопустимый флаг 0x0000
таблицы разделов 4 будет исправлен w(rite)
Команда (m для помощи): <– n
Действие команды
e расширенный
p основной раздел (1-4)
<– p
Номер раздела (1-4): <– 1
Первый цилиндр (1-7832, по умолчанию 1): <– [ENTER]
Используя значение по умолчанию 1
Последний цилиндр или +размер или +размерM или +размерK (1-7832, по умолчанию 7832): <– [ENTER]
Используя значение по умолчанию 7832
Команда (m для помощи): <– t
Выбранный раздел 1
Шестнадцатеричный код (тип L для списка кодов): <– 8e
Изменен системный тип раздела 1 на 8e (Linux LVM)
Команда (m для помощи): <– w
Таблица разделов была изменена!
Вызов ioctl() для повторного чтения таблицы разделов.
Синхронизация дисков.
pvcreate /dev/sdb1
vgextend server1 /dev/sdb1
lvcreate –name backups –size 30G server1
mkfs.ext3 /dev/mapper/server1-backups
mkdir /backups
Теперь давайте смонтируем наш том /dev/server1/backups на /backups:
mount /dev/mapper/server1-backups /backupsЧтобы этот том монтировался автоматически при каждом запуске системы, вам нужно отредактировать /etc/fstab и добавить в него строку, подобную этой:
vi /etc/fstab| [...] /dev/mapper/server1-backups /backups ext3 defaults,errors=remount-ro 0 1 |
Теперь наша новая ситуация выглядит так:
pvdisplayserver1:~# pvdisplay
— Физический том —
PV Name /dev/sda5
VG Name server1
PV Size 9.76 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 2498
Free PE 0
Allocated PE 2498
PV UUID vQIUga-221O-GIKj-81Ct-2ITT-bKPw-kKElpM
— Физический том —
PV Name /dev/sdb1
VG Name server1
PV Size 59.99 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 15358
Free PE 7678
Allocated PE 7680
PV UUID cvl1H5-cxRe-iyNg-m2mM-tjxM-AvER-rjqycO
vgdisplayserver1:~# vgdisplay
— Группа томов —
VG Name server1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 69.75 GB
PE Size 4.00 MB
Total PE 17856
Alloc PE / Size 10178 / 39.76 GB
Free PE / Size 7678 / 29.99 GB
VG UUID jkWyez-c0nT-LCaE-Bzvi-Q4oD-eD3Q-BKIOFC
lvdisplayserver1:~# lvdisplay
— Логический том —
LV Name /dev/server1/root
VG Name server1
LV UUID UK1rjH-LS3l-f7aO-240S-EwGw-0Uws-5ldhlW
LV Write Access read/write
LV Status available
LV Size 9.30 GB
Current LE 2382
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:0
— Логический том —
LV Name /dev/server1/swap_1
VG Name server1
LV UUID 2PASi6-fQV4-I8sJ-J0yq-Y9lH-SJ32-F9jHaj
LV Write Access read/write
LV Status available
LV Size 464.00 MB
Current LE 116
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:1
— Логический том —
LV Name /dev/server1/backups
VG Name server1
LV UUID sXq2Xe-y2CE-Ycko-rCoE-M5kl-E1vH-KQRoP6
LV Write Access read/write
LV Status available
LV Size 30.00 GB
Current LE 7680
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:2
Get new posts in your inbox
No spam. Unsubscribe anytime.