Вы здесь

Перенос LVM - раздела на новый жесткий диск

LVM в Linux

На работе в качестве сервера для бэкапов используется старенький системник, с процессором Celeron, 1 GB оперативной памяти, и 3 HDD (120 Gb + 80 Gb + 80 Gb), которые объединены в один том при помощи LVM. Общий размер тома около 260 GB.

На днях решил заменить вышеописанные 3 жестких диска на 1 SATA HDD размером 2 TB, и решил подробно описать этот процесс.

Примерный алгоритм действий:

1. Подключаем новый HDD к системнику. (у меня свободных SATA-портов на материнке не было, поэтому я воспользовался переходником USB - SATA).
2. Разметка подключенного диска (X - это буква диска)
/dev/sdX1 - /boot (250МБ) (LVM2 не поддерживает boot-разделы, поэтому он всегда выносится на отдельный НЕ-LVM -раздел.)
/dev/sdX2 - оставшаяся часть от 2 ТБ - на неё будем переносить все с 3-х старых HDD.
3. Перенос всех данных на /dev/sdX2(pvmove oldpv newpv)
4. Создание раздела ext2 на /dev/sdX1, для переноса туда каталога /boot.
5. Устанавка grub2 в /dev/sdX (подключенный 2 TB SATA-диск)
6. Удаление всех неиспользуемых HDD.
7. Увеличение размера тома и файловой системы.

В именах устройств /dev/sdX, /dev/sdX1 и /dev/sdX2 вместо X у вас будет своя буква, будьте внимательны.

Немного теории о технологии LVM:

PV(PhisycalVolume) – диски или разделы жёсткого диска, имеющие тип 8E (LVM), отданные под управление LVM, входят в состав группы томов VG.

VG(VolumeGroup) – группы томов, объединяют пространство PV и могут быть нарезаны на один или несколько LV. Группа томов состоит из физических томов, объединяя их в одну единицу. Затем из дискового пространства группы томов выделяются логические тома, которые непосредственно используются системой.

LV(LogicalVolume) – логический том, представляется блоковым устройством, который можно использовать в операционной системе как логический раздел диска.

Логический том LVM — аналогичен разделу обычного диска. в не-LVM системе. Логический том форматируется в нужную вам файловую систему для использования. Физически данные, расположенные на одном логическом томе LVM, могут быть расположены на различных физических дисках(разделах дисков) и даже различных компьютерах, объединенных по сети.

Теперь подробно о каждом шаге:

1 - 2. Про подключение и разметку диска я уже писал ранее, поэтому смотрите в этой статье - Подключаем новый жесткий диск в Debian.
Добавлю только, что разбиваем на два раздела - 1-й на 250 mb (для /boot - раздела), на оставшейся части просто создаем раздел /dev/sdX2, но не форматируем.

Перед использованием диска или раздела (в нашем случае только что созданный /dev/sdX2) в качестве физического тома для LVM его нужно инициализировать:

pvcreate /dev/sdX2 

Если вам нужно инициализировать целый диск, то команда будет такой:

pvcreate /dev/hdb 

Эта команда создает в начале указанного диска или раздела описание физического тома, включающее дескриптор группы томов.

После инициализации добавляем физический том в группу томов LVM. Делается это командой vgextend

- смотрим информацию о группах томов, которые есть в системе:

vgextend

ниже частичный вывод в моей системе:

--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 20
VG Access read/write
VG Status resizable

- Добавляем наш инициализированный раздел в группу томов vg0:

vgextend vg0 /dev/sdX2

3. Перенос всех данных на /dev/sdX2

После подключения 2 TB-винта и переноса на него данных, я планировал отключить освободившиеся 3 винта, поэтому нужно все аккуратно перенести с них на новый винт.

Переносить будем командой pvmove, которая позволяет переместить данные эстенты с одного физического тома на другой.

Смотрим, какие у вас есть физические тома:

pvdisplay
pvdisplay

Данная команда покажет все физические тома в системе, их размеры, и процент свободного места на них:
Total PE 476869
Free PE 0

После этого начинаем осуществлять перенос со старых томов на недавно созданный раздел (/dev/sdX2)

pvmove /dev/sdb5 /dev/sdX2

Таким образом я перенес данный с трех старых HDD на один новый 2 TB. Перенос данных занял около 4-х часов.

4. Создаем файловую систему ext2 на /dev/sdX1 под boot-раздел:

(mkfs.ext2 /dev/sdX1)

Обратите внимание, что UUID boot-раздела должен быть таким же, как и у действующего boot-раздела в вашей системе на данный момент. Посмотреть UUID каждого раздела можно командой
blkid, вот примерный её вывод:

/dev/sda1: UUID="829790c4-7afd-4bf6-86f9-933dd5deb617" TYPE="ext2" PARTUUID="455
/dev/sda2: UUID="FCAC3P-O0aa-5HYn-sr4W-RFkV-hjUJ-akn0Xh" TYPE="LVM2_member" PART

Сменить UUID можно командой tune2fs, перевад ей с параметром -U нужный UUID и устройство, на котором нужно его сменить:

tune2fs -U 829790c4-7afd-4bf6-86f9-933dd5deb617 /dev/sdx1

После форматирования раздела в ext2 монтируем его в какой-нибудь каталог, и копируем в него действующий каталог /boot:

mkdir /mnt/1
mount /dev/sdd1 /mnt/1/
cp -aT /boot/ /mnt/1/

5. Устанавливаем загрузчик grub2 на новый жесткий диск (2 TB):

grub-install /dev/sdX

6. Удаляем уже освобожденные и неиспользуемые HDD из группы томов:

vgreduce vg0 /dev/sdb5
vgreduce vg0 /dev/sda1
vgreduce vg0 /dev/sdc1

Проверяем, все ли удалилось командой pvdisplay.

7. После увеличения тома необходимо увеличить размер его файловой системы. Делается это командой lvextend.

Сначала выводим список логических томов:

lvdisplay
lvdisplay

У меня логический том, который нужно увеличить, называется
/dev/vg0/vg0_file.

lvextend -l +100%FREE /dev/vg0/vg0_file

Этой командой мы добавим тому vg0_file все нераспределенное пространство, которое у нас есть.

И изменяем объем файловой системы на томе:

resize2fs /dev/vg0/vg0_file

Проверяем что получилось:

df -h

Должно быть примерно следующее:

/dev/mapper/vg0-vg0_file 1.8T 116G 1.6T

Теперь можно выключить сервер, отсоединить 3 освободившихся HDD, и перезагрузиться. У меня все заработало с первого раза.
Если есть вопросы/дополнения, буду рад увидеть их в комментариях.

Рубрики: 

Комментарии

У меня после всех этих манипуляций система не грузится. Пробовал по разному. То есть пока диск (старый) не vgreduce все работает и грузится. Причем даже если в fstab поменять UID boot-раздела на тупо /dev/sda1 (причем при перезагрузках диски (у меня их два) могут меняться (был sda, стал sdb и наоборот - логику смены не понял) но система все равно будет грузиться. Но вот как только диск извлечешь - писец. Система просто висит с мигающим курсором (физически диск подключен). Пробовал на VM с гипервизором hyper-v. Что у меня не так?

После всей этой радости пришлось ещё переустанавливать grub, загружаясь с livecd, но в целом сработало.

Шикарная инструкция. Спасибо огромное. Все получилось с первого раза

Спасибо за теплые слова!

Спасибо за инструкцию, сделал почти так же - и все прошло успешно, даже монитор не понадобился, все по ssh и "на горячую".
Единственное с чем пришлось повозиться - это затупил, и создал разметку диску GPT, и уже на нее перекинул LVM томы. Потом пришлось ставить gdisk, переделывать разметку в MBR (2 минуты), и только потом бут раздел делать "бутабельным" и уже ставить на него grub, если бы не этот "затуп", все бы прошло на час быстрее, еще раз раз большое спасибо!