У меня есть диск, на котором я храню данные БД. Диск сейчас заполнен, и я хочу добавить еще один диск к машине. Я слышал, что с помощью LVM можно добавлять и расширять разделы, поэтому я хотел бы узнать, можно ли расширить текущий полный диск (не повреждая его текущие данные) путем добавления нового диска?
решение1
LVM позволяет легко изменять размер существующих разделов и перемещать их¹. Но они должны быть разделами LVM в первую очередь. Поскольку ваш текущий раздел не находится на LVM, вам придется делать все вручную. Все команды в моем ответе должны быть выполнены как root.
Подготовьте новый диск
- Создайте раздел GPT или MBR для использования Linux. Используйте весь диск, если вы не хотите использовать его совместно с другой операционной системой. Я назову этот раздел
/dev/sdb1
. Сделать
/dev/sdb1
LVMфизический объем, т.е. объявляем, что эта часть диска будет использоваться для LVM.pvcreate /dev/sdb1
Создать LVMгруппа томовсодержащий этот физический том. Все тома LVM являются частью группы томов. Выберите имя для этой группы томов, например
alex_os
.vgcreate alex_os /dev/sdb1
Теперь у вас есть немного места для использования LVM. Создайте логический том LVM, достаточно большой для данных, которые вы хотите на нем хранить. Вы можете использовать все пространство, если хотите (если только вы не хотите зарезервировать место для другой файловой системы или пространства подкачки), но поскольку сжать файловую систему сложнее, чем расширить ее, лучше всего использовать только то, что, по вашему мнению, вам понадобится в среднесрочной перспективе, плюс запас прочности. Выберите имя для логического тома, например,
root
для вашей корневой файловой системы илиdb
если вы собираетесь хранить на нем свою базу данных.lvcreate -L 40g -n root alex_os
Дальнейшие действия зависят от того, хотите ли вы перенести раздел ОС на новый диск или использовать новый диск в качестве дополнительного хранилища.
Используйте новый диск для дополнительного хранения
Создайте файловую систему на новом диске.
mkfs.ext4 /dev/mapper/alex_os-root
Зарегистрируйте новую файловую систему для использования. Выберите для нее точку монтирования. Это может быть как существующий каталог, так и новый каталог.
Если вы хотите переместить, например,
/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
Перенести систему на новый диск
Перезагрузите, чтобы восстановить носитель (например,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
Сделайте новый диск загрузочным. Как именно это сделать, зависит от вашего дистрибутива. Обычно вам придется установить загрузчик и пересобрать initramfs. Например, в Ubuntu вам обычно понадобится что-то вроде
chroot /media/alex_os-root update-initramfs update-grub grub-install /dev/sdb
¹ Изменение размера файловой системы на разделе — это отдельный вопрос; большинство современных файловых систем поддерживают расширение в режиме онлайн, но не сжатие в режиме онлайн.
² Технически этоможетвозможно, повезет, cp -a
если система в противном случае простаивает, но это рецепт катастрофы; это может привести к трудно отслеживаемым отложенным ошибкам. Одним из преимуществ LVM является то, что вы можете использовать его для создания согласованного снимка. Некоторые файловые системы (zfs, btrfs) имеют собственную функцию снимка, но не ext4.