Вопрос или проблема
Я хочу переместить свободное дисковое пространство с одного раздела на другой. Это возможно?
На изображении ниже у меня есть свободное пространство под /local
(/dev/sda3). Я хочу выделить это пространство для /
, который находится на /dev/sda2.
Как я могу это сделать?
Сделать то, что вы спрашиваете, не просто, но у меня есть два решения, которые, надеюсь, могут помочь вам.
У вас два диска. На первом диске находятся /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)
-
Планирование и резервное копирование: Перед любыми манипуляциями рекомендуется создать резервные копии важных данных. Это поможет избежать их потери в случае неудачи при изменениях.
-
Сжатие раздела
/local
: Вам необходимо освободить место в VG (volume group), уменьшив размер логического тома, соответствующего разделу/local
. Для этого выполните команду:sudo lvreduce -L -10G /dev/sda3
Убедитесь, что на томе достаточно места для снижения его размера.
-
Перемещение данных: Используйте команду
pvmove
для перемещения всех физических объемов (extents) с/dev/sda3
на второй диск (/dev/sdb
, если он есть). Это позволит сделать раздел/dev/sda3
свободным.sudo pvmove /dev/sda3
-
Удаление раздела: После того как раздел будет очищен, вы можете использовать инструмент
gparted
для удаления/dev/sda3
и расширения раздела/dev/sda2
. Запуститеgparted
:sudo gparted
Затем выберите
/dev/sda2
и расширьте его, используя освобожденное место. -
Перезагрузка и проверка: После завершения этих действий перезагрузите систему и убедитесь, что все работает корректно, и размер вашего корневого раздела увеличен.
Возможное решение 2: Создание нового логического тома для /usr
Если вы хотите более гибко управлять распределением дискового пространства, вы можете перенести часть данных из /
в отдельный логический том (LV).
-
Планирование и резервное копирование: Как и в первом варианте, создайте резервные копии всех критически важных данных.
-
Сжатие раздела
/local
: Уменьшите размер логического тома/local
, как описано ранее. -
Создание нового логического тома: Создайте новый логический том, который будет использоваться для хранения данных из
/usr
:sudo lvcreate -L [размер] -n new_usr [имя_группы_томов]
-
Копирование файлов: Скопируйте содержимое
/usr
на новый логический том:sudo rsync -av /usr/ /mnt/new_usr/
-
Изменение монтирования: Размонтируйте старый
/usr
, переименуйте его и создайте новую точку монтирования:sudo umount /usr sudo mv /usr /usr.bak sudo mkdir /usr sudo mount /dev/[имя_группы_томов]/new_usr /usr
-
Проверка работоспособности: Убедитесь, что новая структура монтирования работает корректно. Перезагрузите систему и проверьте, все ли работает.
-
Очистка: После успешной проверки можете удалить временный
/usr.bak
, если он больше не нужен.
Заключение
Перемещение пустого дискового пространства между разделами системы требует тщательного планирования и выполнения всех шагов с осторожностью. Инструменты, такие как gparted
и LVM, делают этот процесс более управляемым и безопасным. Всегда помните о важности резервирования данных перед внесением изменений в структуру хранения. Надеемся, что предоставленные инструкции окажутся для вас полезными, и вы сможете успешно перенастроить ваши разделы.