Periodically, you have to manipulate the virtual disks of the KVM guest systems.
But since this has to be done infrequently, every time you have to rewrite RTFM, so I wrote such a spur.
Today I increased the NTFS disk of the guest Windows using the CentOS 7 host, so below is the live broadcast.
We will carry out all operations by hand - without a mouse and other plug-n-play'ev.
Everything must be done very carefully, before the operation, make a backup of the target disk (if possible; I did it today) or pray well (if there is no space; last time it was just such a case).
For work you will need:
dd (coreutils)
fdisk (util-linux)
kpartx (kpartx)
ntfsresize (ntfsprogs)
We will increase the "disk" ws_e.img from 64 KGB to 16 KGB (up to 80 KGB).
Note : 1 KGB (kakbygigabyte) = 1008 MB (multiples of 63 for historical reasons ), well, itβs accepted among me and not necessarily taken into account).
1. Enlarge your disk
First of all, let's grow the actual disk.
It was:
[root@ext images]# ls -l ws_e.img
-rw-r--r-- 1 root root 67645734912 25 14:31 ws_e.img
Operation:
[root@ext images]# dd if=/dev/zero of=ws_e.img bs=1008M count=16 oflag=append conv=notrunc
16+0
16+0
16911433728 (17 GB), 69,638 c, 243 MB/c
Or a more nimble option (I haven't tried it myself yet):
fallocate -i -l 16128M -o 64512M ws_e.img
Became:
[root@ext images]# ls -l ws_e.img
-rw-r--r-- 1 root root 84557168640 25 14:54 ws_e.img
Note : in the case of transferring data between iron disks, this place should be something likedd if=/dev/sdb of=/dev/sdc
2. Enlarge your partition
man ntfsresize:
To enlarge an NTFS filesystem, first you must enlarge the size of the underlying partition. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size.
:
[root@ext images]# fdisk ws_e.img
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.
(m ): p
Disk ws_e.img: 84.6 GB, 84557168640 bytes, 165150720 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: 0xc617554d
- Id
ws_e.img1 2048 132116479 66057216 7 HPFS/NTFS/exFAT
(m ): d
Selected partition 1
Partition 1 is deleted
(m ): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
(1-4, default 1):
sector (2048-165150719, 2048):
2048
Last sector, +sectors or +size{K,M,G} (2048-165150719, 165150719):
165150719
Partition 1 of type Linux and of size 78,8 GiB is set
(m ): t
Selected partition 1
Hex code (type L to list all codes): 7
Changed type of partition 'Linux' to 'HPFS/NTFS/exFAT'
(m ): p
Disk ws_e.img: 84.6 GB, 84557168640 bytes, 165150720 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: 0xc617554d
- Id
ws_e.img1 2048 165150719 82574336 7 HPFS/NTFS/exFAT
(m ): w
!
.
.. fdisk , .
3. Enlarge your FS
, . ext? resize2fs ( ), NTFS - ntfsresize.
.. ntfsresize --, "":
[root@ext images]# kpartx -av ws_e.img
add map loop0p1 (253:0): 0 165148672 linear /dev/loop0 2048
:
[root@ext images]# fdisk -l /dev/loop0
...
- Id
/dev/loop0p1 2048 165150719 82574336 7 HPFS/NTFS/exFAT
[root@ext images]# ls /dev/mapper
control loop0p1
enlarge:
[root@ext images]# ntfsresize /dev/mapper/loop0p1
ntfsresize v2017.3.23 (libntfs-3g)
Device name : /dev/mapper/loop0p1
NTFS volume version: 3.1
Cluster size : 4096 bytes
Current volume size: 67642585600 bytes (67643 MB)
Current device size: 84556120064 bytes (84557 MB)
New volume size : 84556116480 bytes (84557 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use : 64255 MB (95,0%)
Collecting resizing constraints ...
WARNING: Every sanity check passed and only the dangerous operations left.
Make sure that important data has been backed up! Power outage or computer
crash may result major data loss!
Are you sure you want to proceed (y/[n])? y
Schedule chkdsk for NTFS consistency check at Windows boot time ...
Resetting $LogFile ... (this might take a while)
Updating $BadClust file ...
Updating $Bitmap file ...
Updating Boot record ...
Syncing device ...
Successfully resized NTFS on device '/dev/mapper/loop0p1'.
(Note: ( - 5- ), .)
:
[root@ext images]# kpartx -dv /dev/loop0
del devmap : loop0p1
well and flew:
[root@ext images]# virsh start win2k8r2
win2k8r2
PS
Operation # 3 (or maybe even # 2) can be performed using Windows itself (Disk Management - Expand the volume), but a) it won't work with the system disk, and b) the article is not about that.
Shrinking virtual disks is done in reverse order (FS β partition β disk), only with even more scary attention.
Most of the operations are applicable to transfer between iron disks.