Как переместить свободное место между разделами диска

Вопрос или проблема

Я хочу переместить свободное дисковое пространство с одного раздела на другой. Это возможно?

На изображении ниже у меня есть свободное пространство под /local (/dev/sda3). Я хочу выделить это пространство для /, который находится на /dev/sda2.

Как я могу это сделать?

lsblk output

Сделать то, что вы спрашиваете, не просто, но у меня есть два решения, которые, надеюсь, могут помочь вам.

У вас два диска. На первом диске находятся /boot и / в качестве основных разделов, а третий основной раздел sda3 занимает все оставшееся пространство и предоставлен для LVM. У вас есть второй диск, который также предоставлен для LVM в том же VG. Ваша проблема в том, что, чтобы увеличить размер основного раздела sda2, вам нужно переместить начало sda3. Возможно, возможно, что-то вроде gparted могло бы это сделать, но, откровенно говоря, я не уверен. (На Ubuntu раздел / уже находится в LVM, так что у вас только проблема с /boot, что не является большой проблемой.)

Итак, первое возможное решение: уменьшите /local как минимум на 10G, чтобы освободить место в вашем VG. Используйте pvmove, чтобы переместить все экстенты с sda3 на sdb. Как только sda3 больше не будет использоваться, вы можете использовать что-то вроде gparted, чтобы удалить sda3 и расширить sda2.

Кстати, я предпочитаю выводы lvs, vgs и pvs, последний из которых покажет вам (с меньшими головными болями), когда sda3 больше не используется.

Второе возможное решение: решите, какой поддерево из / вы хотите выделить на другой LV. Я, вероятно, решил бы на /usr. Уменьшите /local как минимум на размер этого поддерева, чтобы освободить место в вашем VG. Создайте новый LV с именем /usr, скопируйте файлы, размонтируйте /usr, переименуйте /usr в /usr.bak, создайте /usr, смонтируйте /usr из вашего нового LV, убедитесь, что все работает (перезагрузите и т. д.), а затем вы можете удалить /usr.bak и тем самым освободить пространство. Для этого решения вам, вероятно, придется много работать в однопользовательском режиме, и работа без доступа к бинарным файлам в /usr — интересное упражнение 🙂

Ответ или решение

Перемещение пустого дискового пространства между разделами может показаться сложной задачей, но с правильным подходом и инструментами это вполне осуществимо. Если у вас есть свободное место в разделе /local (например, /dev/sda3), и вы хотите перенести его к корневому разделу / (на /dev/sda2), существует несколько подходов. Рассмотрим два возможных решения данной проблемы.

Возможное решение 1: Использование LVM (Logical Volume Manager)

  1. Планирование и резервное копирование: Перед любыми манипуляциями рекомендуется создать резервные копии важных данных. Это поможет избежать их потери в случае неудачи при изменениях.

  2. Сжатие раздела /local: Вам необходимо освободить место в VG (volume group), уменьшив размер логического тома, соответствующего разделу /local. Для этого выполните команду:

    sudo lvreduce -L -10G /dev/sda3

    Убедитесь, что на томе достаточно места для снижения его размера.

  3. Перемещение данных: Используйте команду pvmove для перемещения всех физических объемов (extents) с /dev/sda3 на второй диск (/dev/sdb, если он есть). Это позволит сделать раздел /dev/sda3 свободным.

    sudo pvmove /dev/sda3
  4. Удаление раздела: После того как раздел будет очищен, вы можете использовать инструмент gparted для удаления /dev/sda3 и расширения раздела /dev/sda2. Запустите gparted:

    sudo gparted

    Затем выберите /dev/sda2 и расширьте его, используя освобожденное место.

  5. Перезагрузка и проверка: После завершения этих действий перезагрузите систему и убедитесь, что все работает корректно, и размер вашего корневого раздела увеличен.

Возможное решение 2: Создание нового логического тома для /usr

Если вы хотите более гибко управлять распределением дискового пространства, вы можете перенести часть данных из / в отдельный логический том (LV).

  1. Планирование и резервное копирование: Как и в первом варианте, создайте резервные копии всех критически важных данных.

  2. Сжатие раздела /local: Уменьшите размер логического тома /local, как описано ранее.

  3. Создание нового логического тома: Создайте новый логический том, который будет использоваться для хранения данных из /usr:

    sudo lvcreate -L [размер] -n new_usr [имя_группы_томов]
  4. Копирование файлов: Скопируйте содержимое /usr на новый логический том:

    sudo rsync -av /usr/ /mnt/new_usr/
  5. Изменение монтирования: Размонтируйте старый /usr, переименуйте его и создайте новую точку монтирования:

    sudo umount /usr
    sudo mv /usr /usr.bak
    sudo mkdir /usr
    sudo mount /dev/[имя_группы_томов]/new_usr /usr
  6. Проверка работоспособности: Убедитесь, что новая структура монтирования работает корректно. Перезагрузите систему и проверьте, все ли работает.

  7. Очистка: После успешной проверки можете удалить временный /usr.bak, если он больше не нужен.

Заключение

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

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

Капча загружается...