LVM2 вопросы

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

LVM2 вопросы

Сообщение BigBrother »

LVM2 устанавливал из исходников.

Подскажите по следующим вопросам
1) После перезагрузки, созданные разделы lvm становятся неактивными, и они не могут быть примонтированы в систему, пока не будет выполнена команда vgchange -ay. Можно, конечно, прописать эту команду в rc.local, но быть может есть более правильный, с точки зрения lvm, путь?

2) Не совсем понятно ситуация со снепшотами.
Вот создаю я снимок

Код: Выделить всё

[root@localhost mnt]# lvcreate -s -L 110M -n bak3 /dev/group1/php
File descriptor 7 (pipe:[10813]) leaked on lvcreate invocation. Parent PID 1065: bash
  Rounding up size to full physical extent 112,00 MiB
  Logical volume "bak3" created


Код: Выделить всё

[root@localhost mnt]# lvscan
File descriptor 7 (pipe:[10813]) leaked on lvscan invocation. Parent PID 1065: bash
  ACTIVE   Original '/dev/group1/php' [100,00 MiB] inherit
  ACTIVE   Snapshot '/dev/group1/bak1' [32,00 MiB] inherit
  ACTIVE   Snapshot '/dev/group1/bak2' [4,00 MiB] inherit
  ACTIVE   Snapshot '/dev/group1/bak3' [112,00 MiB] inherit


Код: Выделить всё

[root@localhost mnt]# mount /dev/group1/bak1 bak1
[root@localhost mnt]# mount /dev/group1/bak2 bak2
[root@localhost mnt]# mount /dev/group1/bak3 bak3
[root@localhost mnt]# df -h
....
/dev/mapper/group1-bak1    97M   75M   17M  82% /mnt/bak1
/dev/mapper/group1-bak2    97M   75M   17M  82% /mnt/bak2
/dev/mapper/group1-bak3    97M   75M   17M  82% /mnt/bak3

после чего могу увидеть данные, если его примонтирую. После монтрования снепшота,
df -h показывает, что примонитрованный раздел snapshot`a = размеру /dev/group1/php И при этом, не важно какое значение будет указано для опции -L (1M, 100M, 500M...) во время создания снимка ( lvcreate -s -L 110M ...), снимок все равно будет сделан. Главное чтобы значение для опции -L было указано. Я тут чего-то не понимаю...

3)изменение размера тома.
С увеличением проблем нет, а вот с уменьшением... Делаю так

Код: Выделить всё

[root@localhost mnt]# fsck.ext4 -f /dev/group1/php
....
/dev/group1/php: 11/3072 files (9.1% non-contiguous), 1525/12288 blocks
[root@localhost mnt]# resize2fs /dev/group1/php 50M
...
The filesystem on /dev/group1/php is now 8192 blocks long.
[root@localhost mnt]# lvreduce -L 50M /dev/group1/php

Все нормально. Но если для команд resize2fs и lvreduce указать разные размеры, например 100M и 150M, то lvreduce говорит

Код: Выделить всё

  Rounding up size to full physical extent 152,00 MiB
  New size given (38 extents) not less than existing size (3 extents)
  Run `lvreduce --help' for more information.

Если такая ситуация случилась, возможно ее исправить сохранив данные?

4) Кто-нибудь на практике, использует LVM snapshot как средство бекапа бд mysql?
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: LVM2 вопросы

Сообщение sgfault »

BigBrother писал(а):
23.11.2011 14:37
2) Не совсем понятно ситуация со снепшотами.
Вот создаю я снимок

Код: Выделить всё

[root@localhost mnt]# lvcreate -s -L 110M -n bak3 /dev/group1/php
File descriptor 7 (pipe:[10813]) leaked on lvcreate invocation. Parent PID 1065: bash
  Rounding up size to full physical extent 112,00 MiB
  Logical volume "bak3" created


Код: Выделить всё

[root@localhost mnt]# lvscan
File descriptor 7 (pipe:[10813]) leaked on lvscan invocation. Parent PID 1065: bash
  ACTIVE   Original '/dev/group1/php' [100,00 MiB] inherit
  ACTIVE   Snapshot '/dev/group1/bak1' [32,00 MiB] inherit
  ACTIVE   Snapshot '/dev/group1/bak2' [4,00 MiB] inherit
  ACTIVE   Snapshot '/dev/group1/bak3' [112,00 MiB] inherit


Код: Выделить всё

[root@localhost mnt]# mount /dev/group1/bak1 bak1
[root@localhost mnt]# mount /dev/group1/bak2 bak2
[root@localhost mnt]# mount /dev/group1/bak3 bak3
[root@localhost mnt]# df -h
....
/dev/mapper/group1-bak1    97M   75M   17M  82% /mnt/bak1
/dev/mapper/group1-bak2    97M   75M   17M  82% /mnt/bak2
/dev/mapper/group1-bak3    97M   75M   17M  82% /mnt/bak3

после чего могу увидеть данные, если его примонтирую. После монтрования снепшота,
df -h показывает, что примонитрованный раздел snapshot`a = размеру /dev/group1/php И при этом, не важно какое значение будет указано для опции -L (1M, 100M, 500M...) во время создания снимка ( lvcreate -s -L 110M ...), снимок все равно будет сделан. Главное чтобы значение для опции -L было указано. Я тут чего-то не понимаю...


'-L' для снапшота - это сколько места будет выделено под Copy-on-write устр-во (те для копирования изменившихся данных). Сделаем снапшот

Код: Выделить всё

# lvcreate -s /dev/shilvana_sys/tmp -L100m -n tmp-snap /dev/sda3
  Logical volume "tmp-snap" created

и посмотрим сколько занимает соответствующее ему cow устр-во (dm указывает размер в секторах (512б)):

Код: Выделить всё

# dmsetup table | grep tmp | grep cow
shilvana_sys-tmp--snap-cow: 0 204800 linear 8:3 99614984
# echo $((204800 / 2 / 1024))
100

И оно занимает в точности 100мб. `df`, видимо, берет информацию из фс. А фс ничего не знает о том, что это снапшот. Поэтому информация о размерах для снапшота и origin LV у `df` будет одинаковой. Попробуем теперь записать на оригинальный раздел больше 100мб:

Код: Выделить всё

# dd if=/dev/zero of=/tmp/1.tmp bs=4096 count=50000 conv=notrunc
50000+0 records in
50000+0 records out
204800000 bytes (205 MB) copied, 3.35896 s, 61.0 MB/s
# lvs --units k -o +vg_extent_size shilvana_sys/tmp-snap
  LV       VG           Attr   LSize      Origin Snap%  Move Log Copy%  Convert Ext
  tmp-snap shilvana_sys Swi-Io 102400.00k tmp    100.00                         4.00k
# df -hP | grep tmp
/dev/mapper/shilvana_sys-tmp  2.0G  264M  1.7G  14% /tmp
/dev/mapper/shilvana_sys-tmp--snap  2.0G   68M  1.9G   4% /mnt/zip

`df` все еще считает, что место есть, а lvm отмечает снапшот, как '(I)nvalid snapshot' (lvs(8)).

Вот картинка, показывающая "связь" между 4-мя dm устр-вами (отсюда lvm-snapshots-and-corresponding-dm-tables):

Код: Выделить всё

Before snapshot creation.

          0              20971520
254:7     |... usr ..........|                                                  (linear)
          |
          |
          |
8:3 .....................................................
    ----->|
     264


After snapshot creation.

          0              20971520
 (254:6)  |... usr-snap .....|                                                 (snapshot)
          |                  |
          |                  |


          0              20971520                     0               204800
 (254:8)  |... usr-real .....|               (254:9)  |.. usr_snap-cow ..|       (linear)
          |                                           |
          |                                           |
          |                                           |
8:3 .........................|.. other LVs ...........|.. free space ....|.....      (PV)
    ----->|
     264
     ------------------------------------------------>|
                    99614984

          |                  |
          |                  |
 (254:7)  |... usr ..........|                                          (snapshot-origin)
          |                  |
          0             20971520


BigBrother писал(а):
23.11.2011 14:37
3)изменение размера тома.
С увеличением проблем нет, а вот с уменьшением... Делаю так

Код: Выделить всё

[root@localhost mnt]# fsck.ext4 -f /dev/group1/php
....
/dev/group1/php: 11/3072 files (9.1% non-contiguous), 1525/12288 blocks
[root@localhost mnt]# resize2fs /dev/group1/php 50M
...
The filesystem on /dev/group1/php is now 8192 blocks long.
[root@localhost mnt]# lvreduce -L 50M /dev/group1/php

Все нормально. Но если для команд resize2fs и lvreduce указать разные размеры, например 100M и 150M, то lvreduce говорит

Код: Выделить всё

  Rounding up size to full physical extent 152,00 MiB
  New size given (38 extents) not less than existing size (3 extents)
  Run `lvreduce --help' for more information.

Если такая ситуация случилась, возможно ее исправить сохранив данные?

А вы уверены, что используете lvreduce для _уменьшения_, а не для увеличения? Те, если _новый_ размер lv больше старого, вы должны использовать lvextend.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: LVM2 вопросы

Сообщение serzh-z »

BigBrother писал(а):
23.11.2011 14:37
но быть может есть более правильный, с точки зрения lvm, путь?
Это и есть правильный путь. Активировать/смонтировать тома - это задача пользователя/скриптов инициализации.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: LVM2 вопросы

Сообщение Ленивая Бестолочь »

sgfault писал(а):
23.11.2011 16:43
А вы уверены, что используете lvreduce для _уменьшения_, а не для увеличения? Те, если _новый_ размер lv больше старого, вы должны использовать lvextend.

можно использовать lvresize в обоих случаях.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали: