На работе в качестве сервера для бэкапов используется старенький системник, с процессором 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
- смотрим информацию о группах томов, которые есть в системе:
vgdisplay
ниже частичный вывод в моей системе:
--- 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
Данная команда покажет все физические тома в системе, их размеры, и процент свободного места на них:
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
У меня логический том, который нужно увеличить, называется
/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, и перезагрузиться. У меня все заработало с первого раза.
Если есть вопросы/дополнения, буду рад увидеть их в комментариях.
Также рекомендуем:
Если вам нужно просто увеличить размер тома LVM - Увеличиваем размер тома LVM
Комментарии
У меня после всех этих
У меня после всех этих манипуляций система не грузится. Пробовал по разному. То есть пока диск (старый) не vgreduce все работает и грузится. Причем даже если в fstab поменять UID boot-раздела на тупо /dev/sda1 (причем при перезагрузках диски (у меня их два) могут меняться (был sda, стал sdb и наоборот - логику смены не понял) но система все равно будет грузиться. Но вот как только диск извлечешь - писец. Система просто висит с мигающим курсором (физически диск подключен). Пробовал на VM с гипервизором hyper-v. Что у меня не так?
После всей этой радости
После всей этой радости пришлось ещё переустанавливать grub, загружаясь с livecd, но в целом сработало.
Шикарная инструкция. Спасибо
Шикарная инструкция. Спасибо огромное. Все получилось с первого раза
Спасибо за теплые слова!
Спасибо за теплые слова!
Спасибо за инструкцию, сделал
Спасибо за инструкцию, сделал почти так же - и все прошло успешно, даже монитор не понадобился, все по ssh и "на горячую".
Единственное с чем пришлось повозиться - это затупил, и создал разметку диску GPT, и уже на нее перекинул LVM томы. Потом пришлось ставить gdisk, переделывать разметку в MBR (2 минуты), и только потом бут раздел делать "бутабельным" и уже ставить на него grub, если бы не этот "затуп", все бы прошло на час быстрее, еще раз раз большое спасибо!
Спасибо, наконец всё
Спасибо, наконец всё разложилось в голове по полочкам после прочтения вашей инструкции.
Спасибо, отличная инструкция.
Спасибо, отличная инструкция. Все сработало.
Благодарю за отличную
Благодарю за отличную инструкцию!
Исправьте, пожалуйста, опечатку, после слов "- смотрим информацию о группах томов, которые есть в системе:" вместо vgextend надо выполнять vgdisplay, чтобы получить результат на соответствующем скриншоте.