Перевод и объединение нескольких разделов виртуальной машины на LVM

в 5:12, , рубрики: Centos 5, linux, LVM, виртуальная машина, Песочница, системное администрирование, метки: , , ,

Дано: ВМ с CentOS 5.8 со стандартной разбивкой диска (Не LVM)
Цель: Увеличить один из разделов с архиважной информацией.

ВАЖНО! Часть проблем можно было б избежать, если добавлять дисковое пространство ВМ не просто увеличив размер виртуального диска, а добавлением нового HDD. Так как я сразу до этого не додумался, а обратно место уже не забрать, описываю вариант с обычным изменением размера диска.

ВАЖНО! Перед началом работ не забыть сделать backup на другом/внешнем носителе: информация и /etc/fstab

Итак начнем (все команды выполняются с правами root):

Проведем инвентаризацию имеющейся ВМ:

[root@localhost ~]# df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda2 3,4G       1,3G  1,9G      40%  /
/dev/sda6 236M      6,1M  218M    3%    /very_important
/dev/sda5 244M      6,1M  225M    3%    /home
/dev/sda1 99M        12M    83M      13% /boot
tmpfs         06M        0        506M    0%    /dev/shm
[root@localhost ~]# fdisk -l
Диск /dev/sda: 6442 МБ, 6442450944 байт
255 heads, 63 sectors/track, 783 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 13 104391             83 Linux
/dev/sda2 14 459 3582495         83 Linux
/dev/sda3 460 720 2096482+    82 Linux своп / Solaris
/dev/sda4 721 783 506047+       5 Расширенный
/dev/sda5 721 752 257008+       83 Linux
/dev/sda6 753 783 248976         83 Linux

Из этого видно, что важный раздел находится на /dev/sda6, HDD имеет размер 6442 МБ и /dev/sda6 вовсе не LVM

(именно это досадное недоразумение и послужило причиной написания статьи)

Увеличим размер HDD через менеджера ВМ и сравним результаты:

[root@localhost ~]# fdisk -l
Диск /dev/sda: 8589 МБ, 8589934592 байт
255 heads, 63 sectors/track, 1044 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 13 104391              83 Linux
/dev/sda2 14 459 3582495          83 Linux
/dev/sda3 460 720 2096482+     82 Linux своп / Solaris
/dev/sda4 721 783 506047+        5 Расширенный
/dev/sda5 721 752 257008+        83 Linux
/dev/sda6 753 783 248976          83 Linux

Получили, что размер /dev/sda вырос до 8589 МБ, но больше нигде никаких изменений нет, следовательно необходимо создать раздел в этой свободной области. Сразу же возникает вопрос: А, собственно, как это делать? Поразмышляв и пошустрив интернет пришел к использованию GParted Live CD (есть USB, PXE и HDD). Качаем образ, подсовываем его ВМ (у меня в vmware при перезагрузке машины надо было успеть зайти в виртуальный биос по F2 и поставить boot from cd на первое место). При загрузке Gparted в графическом режиме сразу же открывается окошко с вашим HDD и разделами на нём, выделяем раздел sda4 (он является вспомогательным для доступа к остальным разделам), жмякаем изменить размер и растягиваем до упора Есть отдельная кнопочка “применить изменения”, нажимаем её, ждем успешного завершения и выходим с перезагрузкой.

Итак, теперь у нас доступно место для создания раздела, приступим:

[root@localhost ~]# fdisk /dev/sda

Количество цилиндров для этого диска установлено в 1044.

С этим все в порядке, но значение больше, чем 1024,

и в отдельных установках могут возникнуть проблемы с:
1) программами, запускаемым при загрузке (напр., старые версии LILO)
2) загрузкой и программами разметки из других ОС
(напр., DOS FDISK, OS/2 FDISK)

Команда (m для справки): n #команда “создать раздел”
Первый цилиндр (784-1045, по умолчанию 784): #определяется начало раздела, ничего не вводим
Используется значение по умолчанию 784 
Последний цилиндр или +size или +sizeM или +sizeK (784-1045, по умолчанию 1045): #определяется конец раздела, я хочу чтоб использовалось все место, поэтому ничего не ввожу, жму enter
Используется значение по умолчанию 1045

Команда (m для справки):t #Далее даем команду изменить тип раздела
Номер раздела (1-7): 7 #будем переделывать /dev/sda7 (только что созданный)
Шестнадцатеричный код (введите L для получения списка кодов):8e #Код LVM раздела
Системный тип раздела 7 изменен на 8e (Linux LVM)

Команда (m для справки): w #записываем изменения на диск
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.

ПРЕДУПРЕЖДЕНИЕ: Перечитывание таблицы разделов завершилось неудачей с ошибкой 16: Устройство или ресурс занято.
Ядро все еще использует старую таблицу.
Новая таблица будет использована при следующей перезагрузке.

Далее перезагружаемся.

Итак, мы готовы начинать создавать LVM раздел, проверим еще раз:

[root@localhost ~]# df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda2 3,4G    1,3G  1,9G   41%   /
/dev/sda6 236M   6,1M  218M  3%     /very_important
/dev/sda5 244M   6,1M  225M  3%     /home
/dev/sda1 99M     12M   83M    13%   /boot
tmpfs         506M   0        506M  0%    /dev/shm
[root@localhost ~]# fdisk -l
Диск /dev/sda: 8589 МБ, 8589934592 байт
255 heads, 63 sectors/track, 1044 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 13 104391                 83 Linux
/dev/sda2 14 459 3582495             83 Linux
/dev/sda3 460 720 2096482+        82 Linux своп / Solaris
/dev/sda4 721 1045 2605208        5 Расширенный
/dev/sda5 721 752 257008+          83 Linux
/dev/sda6 753 783 248976             83 Linux
/dev/sda7 784 1045 2099129        8e Linux LVM

Убедились, что /dev/sda7 является Linux LVM разделом, преобразуем раздел /dev/sda7 в физический том, чтобы LVM мог использовать его:

[root@localhost ~]# pvcreate /dev/sda7
Writing physical volume data to disk “/dev/sda7″
Physical volume “/dev/sda7″ successfully created

Создаем логическую группу томов с именем important_vg (имя можно любое) и добавляем в неё один физический том:

[root@localhost ~]# vgcreate important_vg /dev/sda7
Volume group “important_vg” successfully created

Теперь создаем логический раздел с именем important из всего свободного места в группе:

[root@localhost ~]# lvcreate -n important -l +100%FREE important_vg
Logical volume “important” created

можем посмотреть все, что у нас получилось командами: pvdisplay, vgdisplay и lvdisplay.
Теперь мы имеем логический раздел с удобным именем (не безликое sda7), следовательно надо узнать как нам к нему теперь обращаться:

[root@localhost ~]# ls -l /dev/important_vg/
итого 0
lrwxrwxrwx 1 root root 34 Июн 11 15:03 important -> /dev/mapper/important_vg-important

Этот вывод команды ls говорит о следующем: в папке /dev создался каталог с названием нашей группы important_vg, внутри которого создался файл important, который в свою очередь является ссылкой на /dev/mapper/important_vg-important, таким образом обращаться к разделу можно как /dev/important_vg/important, так и /dev/mapper/important_vg-important (далее используется 2 вариант)

Далее создаем файловую систему в нашем свеженьком разделе с именем very_important:

[root@localhost ~]# mkfs.ext3 -L very_important /dev/mapper/important_vg-important
mke2fs 1.39 (29-May-2006)
Filesystem label=very_important
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Теперь надо подменить физический раздел /very_important на раздел /dev/mapper/important_vg-important в /etc/fstab (не забудем про backup #cat /etc/fstab > /etc/fstab.copy):

[root@localhost ~]# cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
#LABEL=/very_important /very_important ext3 defaults 1 2
/dev/mapper/important_vg-important /very_important ext3 defaults 1 2
LABEL=/home /home ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda3 swap swap defaults 0 0

Размонтируем /very_important:

[root@localhost ~]#umount /very_important

и по новой примонтируем все, что прописано в fstab:

[root@localhost ~]#mount -a

На самом деле, на реальной машине возникли ошибки, что раздел занят и не может быть отмонтирован, мне было лень искать блокирующие дескрипторы, поэтому перекрестившись:

[root@localhost ~]#reboot

У кого же не возникло проблем/перезагрузка прошла удачно продолжаем:

[root@localhost ~]# df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda2                                                  3,4G  1,3G   1,9G   41% /
/dev/sda5                                                  244M 6,1M   225M 3%   /home
/dev/sda1                                                  99M   12M    83M   13% /boot
tmpfs                                                         506M  0        506M  0%   /dev/shm
/dev/mapper/important_vg-important 2,0G   68M   1,9G    4%   /very_important

Теперь раздел готов, и мы можем передвинуть туда все данные. Для этого создадим новую папку, куда примонтируем старый раздел с Важной Информацией:

[root@localhost ~]# mkdir /mnt/mpoint
[root@localhost ~]# mount /dev/sda6 /mnt/mpoint/

Перенесем информацию:

[root@localhost ~]# cp -a /mnt/mpoint/ /very_important/

Попрощаемся с разделом /dev/sda6, больше мы его таким не увидим и отмонтируем его:

[root@localhost ~]# umount /mnt/mpoint/

Теперь стоит задача создать физический том LVM, добавить его в группу и расширить логический раздел.
Преобразуем том в LVM тип так же как и /dev/sda7:

[root@localhost ~]# fdisk /dev/sda

Количество цилиндров для этого диска установлено в 1044.
С этим все в порядке, но значение больше, чем 1024,
и в отдельных установках могут возникнуть проблемы с:
1) программами, запускаемым при загрузке (напр., старые версии LILO)
2) загрузкой и программами разметки из других ОС
(напр., DOS FDISK, OS/2 FDISK)

Команда (m для справки):t
Номер раздела (1-7):6
Шестнадцатеричный код (введите L для получения списка кодов):8e
Системный тип раздела 6 изменен на 8e (Linux LVM)

Команда (m для справки):w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.

ПРЕДУПРЕЖДЕНИЕ: Перечитывание таблицы разделов завершилось неудачей с ошибкой 16: Устройство или ресурс занято.
Ядро все еще использует старую таблицу.
Новая таблица будет использована при следующей перезагрузке.

[root@localhost ~]# reboot

Создаем физический том:

[root@localhost ~]# pvcreate /dev/sda6
Writing physical volume data to disk “/dev/sda6″
Physical volume “/dev/sda6″ successfully created

Добавляем в группу:

[root@localhost ~]# vgextend important_vg /dev/sda6
Volume group “important_vg” successfully extended

Теперь самое время поговорить о команде vgdisplay:

[root@localhost ~]# vgdisplay
— Volume group —
VG Name important_vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 2,23 GB
PE Size 4,00 MB
Total PE 572
Alloc PE / Size 512 / 2,00 GB
Free PE / Size 60 / 240,00 MB
VG UUID 4rRD2Y-383d-0igK-BLqR-5Bd9-9ure-U9uk8G

Cur PV сообщает, что эта группа состоит из 2 физических томов, VG Size сообщает о размере группы и Free PE / Size говорит о том, что в группе есть свободное место, не занятое никаким разделом. Как раз таки его и надо присоединить к разделу /dev/mapper/important_vg-important:

[root@localhost ~]# lvextend -l +100%FREE /dev/mapper/important_vg-important
Extending logical volume important to 2,23 GB
Logical volume important successfully resized

Ну и на последок исправим файловую систему ext3 после увеличения размера раздела:

[root@localhost ~]# resize2fs /dev/mapper/important_vg-important
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/mapper/important_vg-important is mounted on /very_important; on-line resizing required
Performing an on-line resize of /dev/mapper/important_vg-important to 585728 (4k) blocks.
The filesystem on /dev/mapper/important_vg-important is now 585728 blocks long.

Вуаля, система готова:

[root@localhost ~]# df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda2                                                  3,4G 1,3G  1,9G   41% /
/dev/mapper/important_vg-important 2,2G  68M   2,1G   4%   /very_important
/dev/sda5                                                  244M 6,1M 225M 3%   /home
/dev/sda1                                                  99M   12M  83M    13% /boot
tmpfs                                                         506M  0      506M  0%   /dev/shm

[root@localhost ~]# fdisk -l
Диск /dev/sda: 8589 МБ, 8589934592 байт
255 heads, 63 sectors/track, 1044 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 13 104391               83 Linux
/dev/sda2 14 459 3582495           83 Linux
/dev/sda3 460 720 2096482+      82 Linux своп / Solaris
/dev/sda4 721 1045 2605208      5 Расширенный
/dev/sda5 721 752 257008+        83 Linux
/dev/sda6 753 783 248976           8e Linux LVM
/dev/sda7 784 1045 2099129      8e Linux LVM

Автор: cuxopa

Источник

Поделиться

* - обязательные к заполнению поля