Дано: ВМ с 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