10

В Linux я использовал для изменения размера разделов MBR, используя fdisk, даже в живых файловых системах, а затем запускал resize2fs/pvresize/... (в зависимости от типа fs), чтобы получить новое выделенное пространство.

В последнее время я использую разделы Xen и GPT и заметил, что, к сожалению, parted не позволяет оперативно изменять размеры подключенного раздела, на самом деле он будет жаловаться:

Error: Partition XXX is being used. You must unmount it before you modify it with Parted.

Я пробовал и команду resize и даже комбинацию rm + mkpart , но они оба будут жаловаться на монтируемый раздел.

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

5 ответов5

11

Самый безопасный способ сделать это - загрузиться с помощью аварийного носителя (live CD или подобного) и использовать GParted, который изменит размер как раздела, так и файловой системы, которую он содержит. Это будет работать, только если раздел в настоящее время не используется.

Если вы не можете позволить себе любые простои, хотя, вы можете попробовать использовать gdisk вместо parted Вам нужно будет удалить раздел, размер которого вы хотите изменить, и создать новый на его месте с той же начальной точкой, как и в случае с fdisk . gdisk готов работать на используемом диске, хотя ядро может не регистрировать никаких изменений. В этом случае вам может понадобиться использовать partprobe или kpartx чтобы заставить ядро принять новую таблицу разделов, или даже перезагрузить компьютер, если это не работает. (Это все должно быть очень похоже на использование fdisk .)

6

Обычно это работает только с более свежими дистрибутивами Linux. Необходимые инструменты:

  • partprobe (обычно часть parted)
  • gdisk / sgdisk

Раздел GPT хранит резервный заголовок в конце диска. Если вы изменили размер базового устройства, резервный заголовок будет где-то посередине. Первый шаг - переместить заголовок раздела в конец диска.

Предполагается, что диск является /dev /sda, а раздел - /dev /sda3 (также должен быть последним разделом):

sgdisk -e /dev/sda

Затем удалите последний раздел и заново создайте его:

sgdisk -d 3 /dev/sda
sgdisk -N 3 /dev/sda

Обычно вы увидите сообщение о том, что ядро не может повторно загрузить таблицу разделов. Вы должны запустить partprobe, чтобы раздел был зарегистрирован с новым размером:

partprobe /dev/sda

Если это не удастся, вам придется перезагрузить виртуальную машину. После этого вы можете расширить свою файловую систему с помощью соответствующего инструмента, для ext4 и т.д .:

resize2fs /dev/sda3

Внимание: запуск sgdisk может быть разрушительным. Убедитесь, что у вас есть правильные процедуры резервного копирования на месте.

3

Вот пример, который автоматизированный инструмент использует для изменения размера раздела в сети, за один прогон:

sgdisk -d 1 -n 1: 2048: 0 -c 1: -u 1: E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1: 0700 /dev /xvda

Вот список параметров для команды sgdisk:

  • -d 1 удалить первый раздел
  • -n 1:2048:0 говорит о создании нового раздела "номер 1" с начальным сектором 2048. Конечный сектор = "0", что означает "использовать все доступное пространство для этого раздела
  • -u устанавливает уникальный guid для этого раздела (это характерно для разделов GPT); Вы можете использовать "R" для GUID, чтобы установить случайное значение. Вы также можете получить идентификатор текущего раздела через gdisk /dev/xvda; p вывод, чтобы использовать тот же UID
  • -t 1:0700 означает, что первый раздел имеет тип-код '0700'.

/dev/xvda был диском, который мы переделили.

Таким образом, он сразу удаляет и создает новый раздел на своем месте.

PS. Несколько замечаний по типу '0700'. От мужчины SGDISK(8)

   -t, --typecode=partnum:{hexcode|GUID}
          Change a single partition's type  code.  You  enter  the  type  code  using  either  a  two-byte  hexadecimal  number,  as 

описанный ранее, или полностью указанное значение GUID, например, EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.

Здесь вы найдете лучшее объяснение того, что означает «0700» - http://www.rodsbooks.com/gdisk/walkthrough.html

«Но подождите, - говорите вы, - я думал, что на диске есть раздел FAT!"Это действительно так. Windows использует один код GUID для всех своих разделов данных, будь то FAT или NTFS. В прошлом тот же код использовался в Linux для его разделов данных. (Подробнее об этом в ближайшее время ....) Таким образом, в этом случае несколько разных кодов MBR преобразуются в один код GUID GPT. GPT fdisk использует несколько произвольно код 0x0700 (или, точнее, EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) для всех этих целей.

В моем случае я считаю, что это был раздел ext4 в Linux, но typecode раздела не означает тип файловой системы, поэтому «0700» больше похож на универсальный тип для sgdisk. По крайней мере, в тех случаях, которые я видел.

PPS. Вам может потребоваться запустить partprobe для ядра, чтобы узнать об изменении разделов без перезагрузки системы.

1

Я просто суммирую некоторые ответы и комментарии здесь:

parted просто откажется изменить любой смонтированный раздел. gdisk сделает всю работу за вас, но его нет в стандартном репозитории RHEL или CentOS. Это в хранилище EPEL , хотя.

Помните, что изменение разделов на используемом диске может помешать ядру зарегистрировать изменения. Если это произойдет, используйте partprobe , partx или перезагрузите компьютер.

1

Вы спрашиваете об изменении размера логического тома? Вот как я бы это сделал:

vgextend vgname /dev/sdb3
lvextend -L +3T /dev/mapper/location
resize2fs /mount/point

ИЛИ (xfs):

xfs_growfs /mount/point -D <bytes>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .