LVM: возможно ли расширить используемый раздел?

LVM: возможно ли расширить используемый раздел?

У меня есть диск, на котором я храню данные БД. Диск сейчас заполнен, и я хочу добавить еще один диск к машине. Я слышал, что с помощью LVM можно добавлять и расширять разделы, поэтому я хотел бы узнать, можно ли расширить текущий полный диск (не повреждая его текущие данные) путем добавления нового диска?

решение1

LVM позволяет легко изменять размер существующих разделов и перемещать их¹. Но они должны быть разделами LVM в первую очередь. Поскольку ваш текущий раздел не находится на LVM, вам придется делать все вручную. Все команды в моем ответе должны быть выполнены как root.

Подготовьте новый диск

  1. Создайте раздел GPT или MBR для использования Linux. Используйте весь диск, если вы не хотите использовать его совместно с другой операционной системой. Я назову этот раздел /dev/sdb1.
  2. Сделать /dev/sdb1LVMфизический объем, т.е. объявляем, что эта часть диска будет использоваться для LVM.

    pvcreate /dev/sdb1
    
  3. Создать LVMгруппа томовсодержащий этот физический том. Все тома LVM являются частью группы томов. Выберите имя для этой группы томов, например alex_os.

    vgcreate alex_os /dev/sdb1
    
  4. Теперь у вас есть немного места для использования LVM. Создайте логический том LVM, достаточно большой для данных, которые вы хотите на нем хранить. Вы можете использовать все пространство, если хотите (если только вы не хотите зарезервировать место для другой файловой системы или пространства подкачки), но поскольку сжать файловую систему сложнее, чем расширить ее, лучше всего использовать только то, что, по вашему мнению, вам понадобится в среднесрочной перспективе, плюс запас прочности. Выберите имя для логического тома, например, rootдля вашей корневой файловой системы или dbесли вы собираетесь хранить на нем свою базу данных.

    lvcreate -L 40g -n root alex_os
    

Дальнейшие действия зависят от того, хотите ли вы перенести раздел ОС на новый диск или использовать новый диск в качестве дополнительного хранилища.

Используйте новый диск для дополнительного хранения

  1. Создайте файловую систему на новом диске.

    mkfs.ext4 /dev/mapper/alex_os-root
    
  2. Зарегистрируйте новую файловую систему для использования. Выберите для нее точку монтирования. Это может быть как существующий каталог, так и новый каталог.

    • Если вы хотите переместить, например, /var/lib/mysqlна новый диск, сделайте его точкой монтирования. Сначала смонтируйте новую файловую систему во временное местоположение, переместите данные (убедитесь, что во время этого файлы не используются!)

      service mysql stop
      mount /dev/mapper/alex_os-db /mnt
      mv /var/lib/mysql/* /mnt
      mount --move /mnt /var/lib/mysql
      service mysql start
      

      Наконец, отредактируйте файл /etc/fstab, добавив следующую строку после строки, содержащейся /во втором столбце:

      /dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
      
    • Если вы не хотите привязывать новый диск к определенной службе, смонтируйте его в другом месте, например, добавьте следующую строку /etc/fstabпосле строки, содержащей /во втором столбце:

      /dev/mapper/alex_os-db /media/data ext4 errors=remount,ro 0 2
      

      Затем создайте точку монтирования и смонтируйте файловую систему:

      mkdir /media/data
      mount /media/data
      

      Теперь вы можете переместить туда любые данные и использоватьсимволические ссылкииз того места, где служба ожидает файлы. Остановите все службы, обращающиеся к файлам, пока вы их перемещаете! Например, чтобы переместить содержимое /var/lib/mysqlна новый диск:

      service mysql stop
      mv /var/lib/mysql /media/data/
      ln -s /media/data/mysql /var/lib/mysql
      service mysql start
      

Перенести систему на новый диск

  1. Перезагрузите, чтобы восстановить носитель (например,SystemRescueCD) для копирования данных на новый диск. Вы не можете сделать копию из работающей системы, поскольку невозможно получить согласованный снимок². Для копирования данных у вас есть две возможности:

    • Создайте файловую систему и скопируйте файлы, например, для файловой системы ext4:

      mkfs.ext4 /dev/mapper/alex_os-root
      mount /dev/mapper/alex_os-root /media/alex_os-root
      cp -a /media/sda1 /media/alex_os-root
      
    • Скопируйте образ файловой системы, затем разверните его для заполнения, например, для файловой системы ext4:

      cat /dev/sda1 >/dev/mapper/alex_os-root
      resize2fs /dev/mapper/alex_os-root
      
  2. Сделайте новый диск загрузочным. Как именно это сделать, зависит от вашего дистрибутива. Обычно вам придется установить загрузчик и пересобрать initramfs. Например, в Ubuntu вам обычно понадобится что-то вроде

    chroot /media/alex_os-root
    update-initramfs
    update-grub
    grub-install /dev/sdb
    

¹ Изменение размера файловой системы на разделе — это отдельный вопрос; большинство современных файловых систем поддерживают расширение в режиме онлайн, но не сжатие в режиме онлайн.
² Технически этоможетвозможно, повезет, cp -aесли система в противном случае простаивает, но это рецепт катастрофы; это может привести к трудно отслеживаемым отложенным ошибкам. Одним из преимуществ LVM является то, что вы можете использовать его для создания согласованного снимка. Некоторые файловые системы (zfs, btrfs) имеют собственную функцию снимка, но не ext4.

Связанный контент