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


Как увеличить размер корневого раздела системы во время выполнения?

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


189
2018-01-30 17:23


Источник


Мне не нравится звучать как палочка в грязи, но это сопряжено с риском? Почему это должно произойти? Является ли время ожидания основным ограничением? - DevNull
Вы не можете изменять размер раздела влево, потому что это фактически будет шагом. - Zaz
Увеличение размера обвинений ext4 онлайн легко. Трудная часть будет сокращаться (ваш заголовок о «изменении размера»). Для людей, заинтересованных ЛЮБОЙ манипуляцией в корневом разделе (перемещение, сжатие, изменение файловой системы, устройства) во время выполнения, необходимо проконсультироваться с моим ответом: askubuntu.com/a/728141/21888 - vaab


Ответы:


GUI (Ubuntu 14.04 и более поздние версии): GParted v0.17 и более поздние версии обеспечивают для этого хороший графический интерфейс. (Старые версии откажутся изменять размер монтируемого раздела).

Командная строка (любая версия Ubuntu): Для этого есть три шага.

Шаг 1. Сначала раздел должен быть изменен. Если вы используете LVM, это легко, и вы, вероятно, знаете, как действовать. Если вы используете классические разделы, это немного сложнее, и май требуют перезагрузки (хотя вам никогда не нужно загружать другую систему или жить компакт-диск).

Вот как я это делаю: используйте fdisk сначала удалить раздел (идея состоит в том, что данные на диске будут сохранены), а затем тщательно воссоздайте его с большим размером в той же позиции.

Пример:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Опять же, очень важно, чтобы новый раздел начинался с того же блока, что и старый. Идентификатор должен также соответствовать (83 для систем Linux). Будьте готовы потерять все свои данные при малейшей опечатке.

Чтобы быть в безопасности, вы также можете восстановить флаг загрузки (который согласно Википедии по-прежнему требуется на некоторых компьютерах), нажав a,

См. Раздел комментария, что делать, если ваш раздел подкачки находится на пути.

К настоящему времени должно быть понятно, почему люди рекомендуют использовать Live CD. ;-)

Шаг 2. В виде fdisk напомнив вам, вы должны перезагрузить таблицу разделов перед продолжением. Самый безопасный способ - просто перезагрузить компьютер; но вы также можете использовать partprobe или kpartx  (больше информации),

Шаг 3. После изменения размера раздела и перезагрузки таблицы разделов, это простой вопрос resize2fs в файловой системе, и вы можете сделать это, даже когда он установлен в качестве корневого раздела.

Пример:

$ sudo resize2fs /dev/sda1

165
2018-04-06 14:23



Это отлично сработало для меня. Однако я сделал дополнительно, чтобы сохранить флаг загрузки в исходное состояние. - Augustus Kling
Очень полезная статья по той же теме: underscore.at/underscore/newsshow.xml?id=69  cfdisk мне очень помогли. - Frosty Z
Вопрос задал вопрос, как это сделать, не закрывая. Вам понадобится программа, которая может обновлять записи ядра для таблицы разделов диска с установленными разделами. Я читал, что работает partprobe [<device>]должен работать, но в настоящее время у меня нет системы, где я могу ее протестировать. - jbo5112
@ jbo5112: As fdisk говорит, partprobe или kpartx может работать вместо перезагрузки; смотрите также этот вопрос, Даже если вы перезагружаетесь, решение по-прежнему предпочтительнее использовать Live CD, когда дело доходит до времени простоя, где простая перезагрузка может быть менее 10 с для виртуальной машины. Это также быстрее во время работы оператора, поэтому я обычно сам использую этот подход. :) - Søren Løvborg
@ Раймонд: если позволяет давление памяти (см. free -h), отключите обмен (swapoff /dev/sda2), измените таблицу разделов (включая удаление и воссоздание раздела подкачки) и либо выполните 1) перезагрузку, либо 2) перезагрузите таблицу разделов и swapon еще раз. (Если память слишком жесткая, чтобы временно отключить своп, вы все равно можете создать и включить новый раздел подкачки (/dev/sda3), затем swapoff sda2; но тогда вам придется обновлять /etc/fstab с новым именем устройства подкачки.) - Søren Løvborg


Можно сделать он-лайн изменение размера файловой системы ext4, даже если это ваш корневой раздел. Использовать resize2fs команда.

sudo resize2fs /dev/sda1

EDIT: Сокращение в режиме онлайн не допускается:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

109
2018-03-02 10:50



Из man resize2fs: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8). Этот вопрос касается изменения размера раздел, не файловая система, Различие тонкое, но очень важное. - Eliah Kagan
Вы можете использовать fdisk для удаления корневого раздела, а затем воссоздать его в том же стартовом блоке. fdisk выписал изменение, но оно не вступит в силу до перезагрузки. после перезагрузки вы можете использовать программу resize2fs для отправки диска для заполнения части. - James Becwar
Я только что изменил размер корневого раздела ext4 в Интернете. Поэтому я могу подтвердить, что это возможно. Но вместо передачи / dev / sda * в качестве параметра resize2fs вам необходимо передать имя логического тома. - CDR
Я нахожу первый параграф Манипуляция resize2fs наиболее интересный для начального вопроса: The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.). - mo'
Пожалуйста, не гадайте с fdisk когда growpart сделают это очень легко для вас. - STRML


Более простое решение - используйте growpart <device> <partition>:

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

Как всегда, создайте резервную копию таблицы разделов (sfdisk -d /dev/xvda > partition_bak.dmp) на всякий случай.


18
2017-07-18 13:26



Как насчет сокращения? - Aaron Franke
Был надеяться использовать этот метод, но получил sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table (с использованием двойной загрузки с окнами) - monkut
Сокращение невозможно в режиме онлайн. Я рекомендую использовать gparted для этого. - STRML
Это было идеально для изменения размера корневого раздела и файловой системы моей AWS VM. Приветствия. - MetaFight


Вы также можете просто использовать GParted - пока размер, размер которого вы изменяете, не тот, который вы загрузили, - иначе я предлагаю живой компакт-диск вариант несколько легче для новичков.

GParted в основном делает все шаги - только на основе графического интерфейса.


8
2017-09-30 11:34



Я загрузил свою систему с Ubuntu 12.04 Live CD и изменил размер раздела ext4 с помощью GParted. Работала хорошо для меня. Во всяком случае, до этой операции я резервировал все свои важные данные. - StandDuPp
я думаю, gparted нужно разбить раздел. но я могу ошибаться. - Nick
Вопрос, очевидно, в том, что раздел, из которого они загружаются, и загрузка загруженного компакт-диска требует перезапуска машины. -1 - wjandrea


Да, вы можете сжимать / перемещать / выражать онлайн-корневой раздел без перезагрузки (ни livecd, ни usbkey): обратитесь к этому ответу, Это очень хорошо написано и легко следовать, хотя довольно долго и немного рискованно. Поэтому, если вы хотите расширить свой раздел ext4, вы можете придерживаться обычных рабочих resize2fsрешения.

Общее решение, которое я использовал, будет работать, например, для любого типа выделенного или VPS-решения.

TLDR; это решение подразумевает pivot_root в tmpfs так что вы можете umount безопасно, что ваш корневой раздел живет и возится с ним. Сделав это, вы pivot_root вернитесь в новый корневой раздел.

Это позволяет в значительной степени манипулировать корневой файловой системой (перемещать ее, изменять файловую систему, изменять ее физическое устройство ...).

В этом процессе перезагрузка не требуется, и это позволяет обойти ограничение из resize2fs  неспособность сокращаться  ext4 перегородки.

Я лично использовал это, и он отлично работает и на debian-системе, поэтому он должен работать на Ubuntu. Я очень удивлен, не увидев, что это углубленное решение немного связано со многими вопросами на веб-сайтах stackexchange, которые касаются одной и той же проблемы.

Заметка: Конечно, если вы хотите увеличить свой раздел, просто resize2fs будет достаточно, как указано во многих местах и ​​в других ответах здесь.


8
2018-02-01 02:08



Я думаю, что большинство людей, после того как вы остановили все программы и службы, обращающиеся к корневому разделу, вы могли бы перезагрузить машину. Для сокращения / перемещения это может быть еще быстрее, если использовать живой компакт-диск, но для роста (безусловно, наиболее общей задачи и того, о чем спрашивал ОП) существуют способы, которые не связаны с временным отключением большей части системы , - Søren Løvborg
@ SørenLøvborg: вы можете перезапустить основные службы, которые нуждаются в непрерывном производстве, выполняя полную процедуру. Существует множество конфигураций, в которых вы не можете поместить LiveCD (экземпляры VPS, выделенные серверы ...) или обстоятельства, при которых вы хотите избежать перезагрузки по определенным причинам. В названии оригинального вопроса упоминается «изменение размера», которое привлекает людей, ищущих сжатые разделы в Интернете. ** Никакое другое решение не позволяет сжимать ext4 онлайн. ** Это решение является рискованным, сложным, но самым мощным из всех, и оно заполняет недостатки других. - vaab


Только что закончил изменение размера корневого раздела ext4 в живой системе, в то время как корень был монтирован.

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

5
2017-12-04 22:40





Я просто сделал это успешно без umount, pivot_root, или временное удаление основного раздела, используя parted 3.2 в ядре Ubuntu 16.04, 4.4.0. Чтобы быть осторожным, я делал все с виртуальной консоли с отключенным отключением сети и делал снимок заранее на всякий случай, но моментальный снимок не нужен, поэтому я мог бы так же хорошо это сделать через SSH и без изменения уровней запуска.

Определить размер раздела: parted /dev/sda1 print | egrep "Disk.*GB"

Опционально переключитесь в многопользовательский режим без подключения к сети (это должно выполняться с консоли, а не с SSH):

runlevel     # remember the original runlevel
init 2

При необходимости снимите снимок VM, чтобы быть осторожным.

Изменение размера раздела:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

Изменение размера файловой системы: resize2fs /dev/sda1

Если что-то пойдет не так, вы можете восстановить свой снимок здесь. Если все пошло нормально, вернитесь к нормальному уровню выполнения (полученному выше) - обычно 5: init 5, На этом этапе лучше всего выполнить полную перезагрузку, чтобы убедиться, что все вернулось должным образом (после этого у меня был вопрос date / ntp).


0
2017-07-14 00:09