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

171

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

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

    
задан BonboBingo 30.01.2011 в 18:23
источник

10 ответов

153

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
    
ответ дан Søren Løvborg 06.04.2012 в 16:23
источник
108

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

sudo resize2fs /dev/sda1

РЕДАКТИРОВАТЬ: Сокращение в режиме онлайн не допускается:

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
    
ответ дан CodeAddict 02.03.2012 в 11:50
источник
7

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

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

    
ответ дан leatherjacket 30.09.2012 в 13:34
источник
7

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

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

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

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

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

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

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

    
ответ дан vaab 01.02.2016 в 03:08
источник
6

Более простое решение - используйте 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 ) на всякий случай.

    
ответ дан STRML 18.07.2017 в 15:26
источник
5

Только что закончил изменение корневого раздела 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]# 
    
ответ дан CDR 04.12.2012 в 23:40
источник
0

Я сделал это успешно без 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).

    
ответ дан Roger Dueck 14.07.2017 в 02:09
источник
0

Как указано выше:

  • возможно расширение из корневой системы. (без проблем, поскольку загрузочный раздел не нужно перемещать)

  • Сокращение живого корневого раздела должно выполняться с внешнего загрузочного устройства (загрузка из live system cd / usb-stick), как будто есть какая-либо ошибка, несоответствие. Независимо от того, какая ваша система зависает, должно быть перезагрузился и, в конечном итоге, не сможет правильно загрузиться.

Любой вид «но я сделал это, и он работает» - это просто удача.

    
ответ дан ascervera 10.01.2014 в 22:58
источник
0

Выполните следующие действия.

  1. открытый терминал как суперпользователь su
  2. выполнить parted
  3. введите p , чтобы просмотреть доступные разделы
  4. укажите номер вашего корневого раздела (например: «sda 3» означает номер 3) и удалите смежный раздел, используя rm PARTITION NUMBER , чтобы создать свободное пространство.
  5. теперь увеличьте размер корня, набрав resizepart ROOT NUMBER и при необходимости перезагрузите систему
  6. выйти из parted , набрав exit и в типе терминала partprobe и нажать enter (это можно сделать даже после перезагрузки)
  7. , наконец, запустите resize2fs /dev/sda PARTITION NUMBER и получите доступ к большому корневому разделу.
ответ дан Gurunadha Reddy 13.09.2017 в 22:22
источник
-6

Как уже отмечалось ранее, очень просто выполнить сброс флага загрузки

запустить 'parted'

parted /dev/sda

проверить номер раздела

(parted) print

сбросить флаг загрузки на номер раздела '1' в этом случае

(parted) set 1 boot on
(parted) quit
    
ответ дан benko 16.05.2013 в 15:39
источник

Ознакомьтесь с другими вопросами по меткам