По стопам статьи с сайта freecoder.ru
И очень много полезной информации о LVM здесь.
Кратко и по делу.
Есть 160 Гб старенький жёсткий диск. Приобрёл Seagate Constellation ES3 1 Тб и решил перенести все данные со старого.
Разметка на старом:
- /boot — ext2
- LVM
- / — ext4
- swap
- /home — ext4
- /var — ext4
Как видно, есть LVM. Переносим.
Подключение физического HDD описывать не буду — смысла нет.
Все команды делаются из под рута, если кто забыл.
- Размечаем новый жёсткий диск.
- Смотрим командой fdisk -l какие есть диски
- Командой fdisk /dev/sdX выбираем для работы новый жёсткий диск, где X — буква отображённая в листинге ранее указанной команды.
- Для справки можно нажать m, чтобы увидеть список доступных команд
- Жмём p, чтобы увидеть лист разделов.
- Жмём d, чтобы удалить ненужные разделы, если они есть. Если их нет, то естественно пропускаем этот шаг.
- Жмём n, чтобы создать разделы. Enter. Тип раздела ставим по-умолчанию primary, сразу жмакая Enter. Номер будущего раздела тоже по-умолчанию — 1. Enter. С какого сектора начать разметку раздела. Жмём Enter, подтверждая, что с самого начала. Пока всё идёт по умолчанию. В запросе на конец раздела задаём нужный нам размер раздела в мегабайтах. Я выбрал 500. Для бутового раздела этого хватит с лихвой. Набираем +500M и первый раздел создастся.
- Жмём n, для повторного создания раздела, только теперь все варианты выбираем такие какие предлагается.
- После чего нажимаем w, для записи изменений в разметку. (Примечание: форматировать разделы нет нужды, сделаем это потом)
- Перед использованием нового раздела инициализируем его.
- pvcreate /dev/sdX2 (X — буква диска, может быть c, d,e,f и т.п., 2 — потому что, это второй раздел. Первый мы отдали буту. Не забываем.
- После выполнения команды, второй раздел нового жёсткого диска успешно преобразился в LVM, чтобы его далее можно было спокойно использовать в наших целях. Однако, это пока что всего навсего болванка, которая только способна сказать, что, дескать, я LVM, но кому принадлежу — не знаю. Здесь нет даже файловой системы. Давайте сделаем с этим хоть что-то.
- Добавляем наш новый LVM раздел в существующий, но физически расположенный на старом жёстком volume group, в котором содержатся описания чей логический том кому принадлежит и какое место занимает. Иначе говоря захватываем в существующую группу томов старого харда новое место, расположенное на новом.
- Команда vgextend сделает это.
- Сначала узнаём название нашей volume group командой pvdisplay, показывающей на каком физическом харде находится та или иная группа томов
- Узнав имя группы томов, к которой мы будем присоединять наш новый пустой LVM раздел, пишем команду «vgextend имя_группы_томов /dev/sdX2«
- Теперь группа томов переползла и на нашу новую, расположенную на новом харде LVM область.
- Переносим данные со старого физического тома на новый, командой pvmove. Эта команда возьмёт все экстенты из старого размещения и перенесёт в новое. Выполняется долго, желательно выполнять в screen.
- Вводим команду pvmove -v /dev/sdYZ /dev/sdX2, где Y — буква диска старого физического тома, Z — номер раздела, на котором располагается LVM-разметка. X — уже известная нам буква нового диска, 2 — потому что второй, первый — это boot, ключ -v, чтобы видеть прогресс.
- Теперь создаём boot раздел с файловой системой ext2, на первом разделе нашего нового диска.
- 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
- И помните, UUID не меняем у исходного старого раздела. Даже если очень хочется.
- После форматирования раздела в ext2 монтируем его в какой-нибудь каталог, и копируем в него действующий каталог /boot:
-
mkdir /mnt/1 mount /dev/sdX1 /mnt/1/ cp -aT /boot/ /mnt/1/
- Устанавливаем загрузчик grub2 на новый жесткий диск:
- grub-install /dev/sdX
- Удаляем уже освобожденные и неиспользуемые HDD из группы томов:
-
vgreduce web /dev/sdb5 (старый том на старом диске) vgreduce web /dev/sda1 (ещё старый том на старом диске) vgreduce web /dev/sdc1 (и т.д.)
- Осталось увеличить размер томов и файловых систем.
- Командой lvdisplay смотрим какие тома сколько места занимают
- Допустим, что нам нужно увеличить рутовый раздел на 50 Гб. Для этого пишем «lvextend -L +50G /dev/vg-name/lv-name«, где -L — задаёт размер тома на необходимое количество байт, +50G — прибавляет к тому 50 Гигабайт (если писать без плюса, то это будет указание сделать раздел именно такого размера, буква G — как определитель, что это будет гигабайт, а не мегабайт, гибибайт или что-то другое), /dev/vg-name/lv-name — пути к увеличиваемому тому, это можно увидеть в выводе команды lvdisplay.
- Теперь, когда рутовый раздел у нас вырос, нужно увеличить размер файловой системы на нём. Файловая система сама не растянется за увеличившимся томом. Вводим resize2fs /dev/vg-name/lv-name (или можно просто в команде выше приписать ключ -r, это автоматически увеличит и файловую систему)
- Обычно файловая система ext4, меняет свой размер без размонтирования.
- Осталось добавить раздел для веб-сервера, чтобы он не мешался в корне
- Здесь в общем-то всё просто. Если нужно занять новым разделом всё свободное место, то используйте команду lvcreate -l +100%FREE vg-name -n new-lv-name, где -l 100%FREE указание на создание тома на всём свободном пространстве. (маленькая l, кстати, используется для указания размера в экстентах, в отличие от большой L), vg-name — имя группы томов, на которых будет создан новый том, -n — ключ, указывающий имя нового тома new-lv-name
- Например, создадим новый раздел для /srv
- lvcreate -l100%FREE web -n lv-srv
- Создаём файловую систему: mkfs.ext4 /dev/web/lv-srv
- Переносим старый /srv/ на /dev/web/lv-srv
- Остановим процесс, работающий с этой папкой service apache2 stop
- Переименуем папку /srv в /srv-old и создадим папку /srv mv /srv /srv-old && mkdir /srv
- Примонтируем новый созданный раздел к /srv «/mount /dev/web/lv-srv /srv/«
- Скопируем файлы из старого местоположения в новое cp -aTv /srv-old/ /srv/
- Запишем в /etc/fstab данные для монтирования нового раздела
- /dev/web/lv-srv /srv defaults 0 0