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

По стопам статьи с сайта 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

Добавить комментарий

Ваш e-mail не будет опубликован.