Увеличение размера виртуального диска в VirtualBox для гостевой операционной системы Oracle Linux
В данном посте пошагово описывается способ расширения размера дискового раздела root операционной системы Oracle Linux за счет увеличения виртуального диска VirtualBox.
Могут возникнуть случаи, когда заранее выделенного места на дисковом пространстве гостевой операционной системы (далее ОС) Oracle Enterprise Linux (далее OEL) в виртуальной машине может быть недостаточно. В такой ситуации, есть возможность расширить дисковое пространство (виртуальный диск) на гостевой операционной системе средствами VirtualBox и системными средствами ОС OEL, не пересоздавая виртуальную машину. Под гостевой ОС подразумевается операционная система, которая устанавливается, настраивается и работает на виртуальной машине. В данном посте описывается ситуация, когда заполняется дисковое пространство на корневом дисковом разделе root. Для расширения дискового пространства системного диска гостевой ОС Oracle Linux, надо выполнить следующие шаги:
- Проверить текущий размер диска гостевой ОС.
- Настроить диск виртуальной машины в VirtualBox.
- Расширить системный диск гостевой операционной системы.
1. Проверка текущего размера расширяемого локального диска гостевой ОС.
Проверяется текущий размер дискового раздела root гостевой ОС с помощью инструментов командной строки.
[root@dushanbe ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 472M 0 472M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 7.5M 488M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/mapper/ol-root 8.0G 7.7G 350M 96% / /dev/sda1 1014M 200M 815M 20% /boot tmpfs 100M 52K 100M 1% /run/user/1000 [root@dushanbe ~]#
Анализируя полученный результат, можно заключить, что в корневом разделе (/) (в данном случае /dev/mapper/ol-root) свободно 350М из имеющихся 8 Гб.
Проверяется размер диска в гостевой Oracle Linux.
[root@dushanbe ~]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 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 Disk label type: dos Disk identifier: 0x000b826b Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 20971519 9436160 8e Linux LVM Disk /dev/mapper/ol-root: 8585 MB, 8585740288 bytes, 16769024 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 Disk /dev/mapper/ol-swap: 1073 MB, 1073741824 bytes, 2097152 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 [root@dushanbe ~]#
Результат команды fdisk показывает, что размер виртуального диска /dev/sda 10.7 Гб и из них 8585 MB (то есть 8 Гб) используется корневым разделом – /dev/mapper/ol-root: 8585 MB.
После этого можно приступать к расширению дискового пространства корневого раздела.
2. Настройка диска виртуальной машины в VirtualBox.
Необходимо остановить гостевую операционную систему Oracle Linux. Надо убедиться, что виртуальная машина выключена, а не находится в состоянии сохранения. Также перед продолжением, необходимо удалить снэпшоты (snapshots), которые ассоциируются с виртуальной машиной, если они используются в VirtualBox. Это поможет определить, что модифицируется корректный виртуальный диск, и что все будет правильно работать после модификации.
Для настройки расширения диска виртуальной машины в VirtualBox, надо войти в меню «Файл» и выбрать «Менеджер виртуальных носителей», как показано на скриншоте ниже.

В «Менеджере виртуальных носителей» можно увидеть все виртуальные диски существующих виртуальных машин. В данном примере их три. Изменение размера виртуального диска будет выполняться для OEL-fdisk.vdi, у которой размер диска 10 Гб. Выбирается OEL-fdisk.vdi и по нажатию на «Свойства» можно получить доступ к дополнительной информации и опциям, среди которых есть и изменение размера диска.

Размер диска увеличивается на 2 Гб в пункте «Размер», то есть был 10 Гб и теперь назначается 12 Гб.

3. Расширение корневого раздела (/) гостевой операционной системы внутри виртуальной машины.
Теперь необходимо запустить виртуальную машину на Oracle Linux и распределить появившееся дисковое пространство. Для этого можно использовать утилиту fdisk и проверить размер раздела диска /dev/sda, где находится корневой раздел (/).
[root@dushanbe ~]# fdisk -l /dev/sda Disk /dev/sda: 12.9 GB, 12884901888 bytes, 25165824 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 Disk label type: dos Disk identifier: 0x000b826b Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 20971519 9436160 8e Linux LVM [root@dushanbe ~]#
Видно, что размер диска изменился с 10 на 12 Гб. Теперь надо сделать это новое пространство видимым для системы и нужного раздела. Запускается утилита fdisk для удаления и пересоздания LVM, данные пользователей останутся без изменений.
[root@dushanbe ~]# fdisk /dev/sda Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
Выбирается ключ «m» для получения списка команд. Из списка выбирается ключ «p» для вывода данных таблицы разделов (партицирования).
Command (m for help): p Disk /dev/sda: 12.9 GB, 12884901888 bytes, 25165824 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 Disk label type: dos Disk identifier: 0x000b826b Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 20971519 9436160 8e Linux LVM
Удаляется второй раздел ключом «d», т.к. основной раздел по умолчанию находится во втором разделе:
Command (m for help): d Partition number (1,2, default 2): 2 Partition 2 is deleted
Создается новый основной раздел ключом «n» и начальные и конечные значения секторов оставляются по умолчанию:
Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (2099200-25165823, default 2099200): Using default value 2099200 Last sector, +sectors or +size{K,M,G} (2099200-25165823, default 25165823): Using default value 25165823 Partition 2 of type Linux and of size 11 GiB is set
После создания нового раздела проверяются текущие значения таблицы разделов (партицирования):
Command (m for help): p Disk /dev/sda: 12.9 GB, 12884901888 bytes, 25165824 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 Disk label type: dos Disk identifier: 0x000b826b Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 25165823 11533312 83 Linux
Меняется системный идентификатор для созданного раздела с помощью ключа «t» и шестнадцатеричного кода 8e, который обозначает Linux LVM. Таким образом, тип раздела сменится с Linux на Linux LVM.
Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): L 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT 1e Hidden W95 FAT1 80 Old Minix Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'
Все изменения на диск записываются ключом «w».
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. [root@dushanbe ~]#
Новые изменения разделов вступят в силу после следующей перезагрузки операционной системы. В связи с этим перезагружается операционная система.
[root@dushanbe ~]# shutdown -r now
После перезагрузки ОС проверяются настройки физического раздела диска.
[root@dushanbe ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name ol PV Size <9.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 2303 Free PE 0 Allocated PE 2303 PV UUID ww56kW-YGE7-cwiF-Q0YF-DjER-qabM-H5IAbs [root@dushanbe ~]#
и изменяется размер физического диска:
[root@dushanbe ~]# pvresize /dev/sda2 Physical volume "/dev/sda2" changed 1 physical volume(s) resized / 0 physical volume(s) not resized [root@dushanbe ~]# pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name ol PV Size <11.00 GiB / not usable 2.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 2815 Free PE 512 Allocated PE 2303 PV UUID ww56kW-YGE7-cwiF-Q0YF-DjER-qabM-H5IAbs [root@dushanbe ~]#
Проверяются размер и другие настройки логического размера диска.
[root@dushanbe ~]# lvdisplay --- Logical volume --- LV Path /dev/ol/swap LV Name swap VG Name ol LV UUID DcuUcA-sjK0-Bng5-fLBv-Y9bM-CoAN-txH7JX LV Write Access read/write LV Creation host, time dushanbe, 2020-12-18 13:10:52 +0500 LV Status available # open 2 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto currently set to 8192 Block device 249:1 --- Logical volume --- LV Path /dev/ol/root LV Name root VG Name ol LV UUID 8FT9Ud-VTiN-6Uk4-Cev6-uP4Y-CqRm-YdV00j LV Write Access read/write LV Creation host, time dushanbe, 2020-12-18 13:10:52 +0500 LV Status available open 1 LV Size <8.00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto currently set to 8192 Block device 249:0 [root@dushanbe ~]#
Далее расширяется логический диск с помощью команды lvextend:
[root@dushanbe ~]# lvextend -L 10G /dev/ol/root Insufficient free space: 513 extents needed, but only 512 available
Ошибка выше возникает из-за того, что в этой логической группе уже есть логический том, который занимает место и не дает расшириться на 10 Гб. В данном случае можно распределить логическому тому все свободное дисковое пространство, используя приведенную ниже команду:
[root@dushanbe ~]# lvextend -l +100%FREE /dev/ol/root Size of logical volume ol/root changed from <8.00 GiB (2047 extents) to <10.00 GiB (2559 extents). Logical volume ol/root successfully resized. [root@dushanbe ~]#
Проверяются настройки логического размера диска после его расширения:
[root@dushanbe ~]# lvdisplay --- Logical volume --- LV Path /dev/ol/swap LV Name swap VG Name ol LV UUID DcuUcA-sjK0-Bng5-fLBv-Y9bM-CoAN-txH7JX LV Write Access read/write LV Creation host, time dushanbe, 2020-12-18 13:10:52 +0500 LV Status available # open 2 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto currently set to 8192 Block device 249:1 --- Logical volume --- LV Path /dev/ol/root LV Name root VG Name ol LV UUID 8FT9Ud-VTiN-6Uk4-Cev6-uP4Y-CqRm-YdV00j LV Write Access read/write LV Creation host, time dushanbe, 2020-12-18 13:10:52 +0500 LV Status available open 1 LV Size <10.00 GiB Current LE 2559 Segments 1 Allocation inherit Read ahead sectors auto currently set to 8192 Block device 249:0 [root@dushanbe ~]#
Применяются изменения для логического раздела диска.
[root@dushanbe ~]# xfs_growfs /dev/mapper/ol-root meta-data=/dev/mapper/ol-root isize=256 agcount=4, agsize=524032 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 spinodes=0 data = bsize=4096 blocks=2096128, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2096128 to 2620416 [root@dushanbe ~]#
Проверяются размеры разделов из чего видно, что корневой раздел (/) (в данном случае /dev/mapper/ol-root) расширился с 8 Гб на 10 Гб и свободно стало 2.4 Гб вместо 350 Мб.
[root@dushanbe ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 472M 0 472M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 6.9M 489M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/mapper/ol-root 10G 7.7G 2.4G 77% / /dev/sda1 1014M 200M 815M 20% /boot tmpfs 100M 24K 100M 1% /run/user/1000 [root@dushanbe ~]#
На этом завершается процесс увеличения размера корневого диска гостевой операционной системы Oracle Enterprise Linux, работающей в VirtualBox.