Изменение размеров работающего раздела, добавление раздела swap без перегазгрузки

  • 46th day of Chaos, in the yold 3185
  • 0 Comments

Инструкция актуальна для большинства дистрибутивов Linux: Debian, Ubuntu, Arch, CentOs, Fedora, Gentoo etc.
Для доступа к утилитам `partprobe` и `resize2fs` установите предварительно пакет `parted`.
Все команды выполняйте под суперпользователем. Для начала посмотрим на обнаруженные разделы:
fdisk -l
Это даст примерно такой вывод об имеющихся разделах:
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x648aed90
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 56915967 56913920 27,1G 83 Linux
/dev/sda3 56915968 83886079 26970112 12,9G 83 Linux

40 ГБ жёсткий диск разделён на два ext4 раздела sda1 и sda3. В этой статье будет описано как без перезагрузки на работающей системе удалить второй раздел, создать 4ГБ раздел swap. И расширить работающий первый раздел до конца доступного пространства.
Отмонтируем второй диск sda3:
umount /dev/sda3
Зайдём в fdisk:
fdisk /dev/sda
В нём, маленькие латинские буквы – это команды. `m`, а затем Enter выведет список доступных команд.
Мы же введём поочередёно следующие команды: `p`, `d`, `3`, `p`. Для того чтобы удалить второй раздел:
Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x648aed90
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 56915967 56913920 27,1G 83 Linux
/dev/sda3 56915968 83886079 26970112 12,9G 83 Linux
Command (m for help): d
Partition number (1,3, default 3): 3
Partition 3 has been deleted.
Command (m for help): p
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x648aed90
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 56915967 56913920 27,1G 83 Linux
Command (m for help):

Далее, создадим новый раздел для swap.
Команды: `n`, `p`, `2`,
Здесь утилита спросит первый сектор для раздела. Если сделаем 4 ГБ swap, это 4294967296 байт. Разделим на 512 – получим 8388608 секторов – это размер swap области. Если последний сектор 83886079, то первый сектор: (83886079 – 8388608) = 75497471. Это значит первый сектор для 4 GB раздела надо будет указать 75497471 при имеющихся параметрах.
Далее просто Enter, чтобы ввелось значение поумолчанию (Последний сектор default 83886079)
И изменим тип этого раздела командами: `t`, `2`, `82`, `p`.
На вопрос “Partition type (type L to list all types):” можно ответить `L` и посмотреть список доступных вариантов.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (56915968-83886079, default 56915968): 75497471
Last sector, +sectors or +size{K,M,G,T,P} (75497471-83886079, default 83886079):
Created a new partition 2 of type 'Linux' and of size 4 GiB.
Command (m for help): t
Partition number (1,2, default 2): 2
Partition type (type L to list all types): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Command (m for help): p
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x648aed90
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 56915967 56913920 27,1G 83 Linux
/dev/sda2 75497471 83886079 8388609 4G 82 Linux swap / Solaris
Command (m for help):

Теперь увеличим первый раздел неотмонтируя его (это работающая система), для этого удалим его и сразу создадим новый с нужными параметрами (последний сектор не 56915967, а 75497470), для этого вводим команды:
`d`, `1`, `n`, `p`, `1`, [Enter], [Enter], `N`
Command (m for help): d
Partition number (1,2, default 2): 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1,3,4, default 1): 1
First sector (2048-83886079, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-75497470, default 75497470):
Created a new partition 1 of type 'Linux' and of size 36 GiB.
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help):

Если первый раздел после проведённых операций потерял загрузочный тэг (* в колонке boot после команды p), активировать его можно командами a, 1:
Command (m for help): a
Partition number (1,2, default 2): 1
The bootable flag on partition 1 is enabled now.
Command (m for help):

Если начало раздела отличается от того, которое может быть создано (при вводе первичного значения – Value out of range) – сначала создайте то, которое предлагается, затем перейдите в экспертный режим, `x`, измените значение начала раздела на необходимое `b` и выйдете из экспертного режима `r`.
Ещё раз введите команду p и проверьте устаривают ли вас такие изменения. Ведь всё проделанное ещё не вступило в силу. Если всё устраивает – можно вводить команду w для принятия изменений:
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: 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).

После этого запускаем:
partprobe /dev/sda
и затем:
resize2fs /dev/sda1
Будет примерно такой вывод при успехе:
resize2fs 1.43.4 (31-Jan-2017)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/sda1 is now 9436927 (4k) blocks long.

Всё прошло успешно. Файловые системы изменены.

Сделаем своп из второго раздела:
mkswap /dev/sda2
При успехе:
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=0f0c8c2e-7f31-49de-b449-1a6efbd203ca

Подключим его как swap:
swapon /dev/sda2

Теперь изменим параметры автозагрузки, в файле /etc/fstab
Если были какие-то старые записи помимо основного системного раздела – их стоит закомментировать. И добавить такую для раздела swap:
UUID=0f0c8c2e-7f31-49de-b449-1a6efbd203ca none swap sw 0 0
(идентификатор был задан командой mkswap)

После этого swap должен подключаться автоматически и всё будет готово для дальнейшей работы.

Leave a Comment

Your email address will not be published. Required fields are marked *