Intelligente Lösungen
in neuer Dimension

NTFS-Partition verkleinern

Neue Rechner muß ich gelegentlich leider mit vorinstalliertem Windows einkaufen. Damit ich parallel dazu Ubuntu-22.04 installieren kann, muß ich die Windows-Partition verkleinern.

Ausgangslage

Ich habe eine VM in VirtualBox und darin läuft eine Standard-Installation von Windows-10. Die Plattenaufteilung sieht so aus:

disk disk-size vendor model serial part part-size fstype usage mountpoint label
sda 80G ATA VBOX HARDDISK VB4ff9ca9f-9e42bb21
. sda1 100M vfat 28%
. sda2 16M null
. sda3 79,4G ntfs 14%
. sda4 524M ntfs 84%

Testablauf

Vorbereitungen

  • NVRAM-Datei löschen: rm -f .../virtualbox/Win10/Win10.nvram
  • Ubuntu-22.04 vom ISO starten

Parameter ermitteln

Parametername Wert Ermittelt mit
NTFS-Laufwerk /dev/sda blkid|
Sektorgröße 512 sfdisk --json ...|
NTFS-Partition /dev/sda3 blkid|
Partitionsnummer 3 “Ende” der NTFS-Partition|
Minimalgröße 11909525504 ntfsresize --info ...|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
root# blkid
/dev/sda1: UUID="B0CC-6401" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="13d408e8-9f66-40b7-97f3-cdfd78511c2b"
/dev/sda3: BLOCK_SIZE="512" UUID="54E8CD1EE8CCFEEC" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="60f948f4-efe9-4dca-a5d7-5ca4a1034a61"
/dev/sda4: BLOCK_SIZE="512" UUID="4E24F13924F1251D" TYPE="ntfs" PARTUUID="5ee0e365-2dde-4739-8531-e27b045120b5"
/dev/sr0: BLOCK_SIZE="2048" UUID="2022-07-22-09-11-47-00" LABEL="Ubuntu 22.04.1 LTS amd64" TYPE="iso9660" PTTYPE="PMBR"
/dev/loop1: TYPE="squashfs"
/dev/loop8: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop0: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sda2: PARTLABEL="Microsoft reserved partition" PARTUUID="e50624ec-f022-4084-ba57-c2fd09c5e7c1"
/dev/loop5: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"

root# sfdisk --json /dev/sda
{
   "partitiontable": {
      "label": "gpt",
      "id": "2AC80F77-58F2-4EF7-9A39-E8AD77C46368",
      "device": "/dev/sda",
      "unit": "sectors",
      "firstlba": 34,
      "lastlba": 167772126,
      "sectorsize": 512,
      "partitions": [
         {
            "node": "/dev/sda1",
            "start": 2048,
            "size": 204800,
            "type": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
            "uuid": "13D408E8-9F66-40B7-97F3-CDFD78511C2B",
            "name": "EFI system partition",
            "attrs": "GUID:63"
         },{
            "node": "/dev/sda2",
            "start": 206848,
            "size": 32768,
            "type": "E3C9E316-0B5C-4DB8-817D-F92DF00215AE",
            "uuid": "E50624EC-F022-4084-BA57-C2FD09C5E7C1",
            "name": "Microsoft reserved partition",
            "attrs": "GUID:63"
         },{
            "node": "/dev/sda3",
            "start": 239616,
            "size": 166454140,
            "type": "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7",
            "uuid": "60F948F4-EFE9-4DCA-A5D7-5CA4A1034A61",
            "name": "Basic data partition"
         },{
            "node": "/dev/sda4",
            "start": 166694912,
            "size": 1073152,
            "type": "DE94BBA4-06D1-4D40-A16A-BFD50179D6AC",
            "uuid": "5EE0E365-2DDE-4739-8531-E27B045120B5",
            "attrs": "RequiredPartition GUID:63"
         }
      ]
   }
}

root# parted /dev/sda print
Modell: ATA VBOX HARDDISK (scsi)
Festplatte  /dev/sda:  85,9GB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: gpt
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Dateisystem  Name                          Flags
 1      1049kB  106MB   105MB   fat32        EFI system partition          boot, esp
 2      106MB   123MB   16,8MB               Microsoft reserved partition  msftres
 3      123MB   85,3GB  85,2GB  ntfs         Basic data partition          msftdata
 4      85,3GB  85,9GB  549MB   ntfs                                       versteckt, diag

root# ntfsresize --info /dev/sda3
ntfsresize v2021.8.22 (libntfs-3g)
Device name        : /dev/sda3
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 85224518144 bytes (85225 MB)
Current device size: 85224519680 bytes (85225 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use       : 11910 MB (14,0%)
Collecting resizing constraints ...
You might resize at 11909525504 bytes or 11910 MB (freeing 73315 MB).
Please make a test run using both the -n and -s options before real resizing!

Dateisystem verkleinern

  • Testaufruf: ntfsresize --size 20G --no-action /dev/sda3
  • Verkleinerung durchführen: echo 'y' | ntfsresize --size 20G /dev/sda3

    Hinweis: Die Option “ntfsresize —force …” funktioniert leider nicht richtig, die Sicherheitsabfrage erscheint dennoch!

  • Dateisystem bereinigen: ntfsfix -d /dev/sda3

    Unklar: Ist dies eine gute Idee? Wenn wir das Dateisystem nicht bereinigen, dann können wir keine Infos über das Dateisystem mehr abrufen!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
root# ntfsresize --size 20G --no-action /dev/sda3
ntfsresize v2021.8.22 (libntfs-3g)
Device name        : /dev/sda3
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 85224518144 bytes (85225 MB)
Current device size: 85224519680 bytes (85225 MB)
New volume size    : 19999998464 bytes (20000 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use       : 11910 MB (14,0%)
Collecting resizing constraints ...
Needed relocations : 0 (0 MB)
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 ...
The read-only test run ended successfully.

root# echo y | ntfsresize --size 20G /dev/sda3
ntfsresize v2021.8.22 (libntfs-3g)
Device name        : /dev/sda3
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 85224518144 bytes (85225 MB)
Current device size: 85224519680 bytes (85225 MB)
New volume size    : 19999998464 bytes (20000 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use       : 11910 MB (14,0%)
Collecting resizing constraints ...
Needed relocations : 0 (0 MB)
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/sda3'.
You can go on to shrink the device for example with Linux fdisk.
IMPORTANT: When recreating the partition, make sure that you
  1)  create it at the same disk sector (use sector as the unit!)
  2)  create it with the same partition type (usually 7, HPFS/NTFS)
  3)  do not make it smaller than the new NTFS filesystem size
  4)  set the bootable flag for the partition if it existed before
Otherwise you won't be able to access NTFS or can't boot from the disk!
If you make a mistake and don't have a partition table backup then you
can recover the partition table by TestDisk or Parted's rescue mode.

root# ntfsfix -d /dev/sda3
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
Checking the alternate boot sector... FIXED
NTFS volume version is 3.1.
NTFS partition /dev/sda3 was processed successfully.

Daten des verkleinerten Dateisystems ermitteln

Parametername Wert Ermittelt mit
Größe 19999998464 ntfsresize --info ...|
Cluster-Größe 4096 ntfsresize --info ... oder ntfsinfo -m ...|
Cluster-Anzahl 4882812 ntfsinfo -m ...|
Sector-Größe 512 ntfsinfo -m ...|
Start-Sektor sfdisk --json ...|

Beboachtung: “Eigentlich” würde ich erwarten, dass dies gilt:

  • Cluster-Größe x Cluster-Anzahl = Größe
  • Cluster-Größe x Cluster-Anzahl: 4096 x 4882812 = 19999997952
  • Größe: 19999998464

Leider wird die Erwartung enttäuscht!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root# ntfsresize --info /dev/sda3
ntfsresize v2021.8.22 (libntfs-3g)
Device name        : /dev/sda3
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 19999998464 bytes (20000 MB)
Current device size: 85224519680 bytes (85225 MB)
Checking filesystem consistency ...
...

root# ntfsinfo -m /dev/sda3
Volume Information 
  Name of device: /dev/sda3
  Device state: 11
  Volume Name: 
  Volume State: 91
  Volume Flags: 0x0000
  Volume Version: 3.1
  Sector Size: 512
  Cluster Size: 4096
  Index Block Size: 4096
  Volume Size in Clusters: 4882812
...

Partition verkleinern

Sektoranzahl:

  • Dateisystem-Göße / Sektor-Größe = 19999998464 / 512 = 39062497
  • Cluster-Anzahl * Cluster-Größe / Sektor-Größe = 4882812 * 4096 / 512 = 39062496

Verkleinern:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
root# echo ",39062497"|sfdisk -N 3 /dev/sda
Es wird überprüft, ob diese Festplatte zur Zeit benutzt wird … OK

Festplatte /dev/sda: 80 GiB, 85899345920 Bytes, 167772160 Sektoren
Festplattenmodell: VBOX HARDDISK   
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 2AC80F77-58F2-4EF7-9A39-E8AD77C46368

Alte Aufteilung:

Gerät         Anfang      Ende  Sektoren Größe Typ
/dev/sda1       2048    206847    204800  100M EFI-System
/dev/sda2     206848    239615     32768   16M Microsoft reserviert
/dev/sda3     239616 166693755 166454140 79,4G Microsoft Basisdaten
/dev/sda4  166694912 167768063   1073152  524M Windows-Wiederherstellungsumgebung

/dev/sda3: 
Neue Aufteilung:
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: 2AC80F77-58F2-4EF7-9A39-E8AD77C46368

Gerät         Anfang      Ende Sektoren Größe Typ
/dev/sda1       2048    206847   204800  100M EFI-System
/dev/sda2     206848    239615    32768   16M Microsoft reserviert
/dev/sda3     239616  39302112 39062497 18,6G Microsoft Basisdaten
/dev/sda4  166694912 167768063  1073152  524M Windows-Wiederherstellungsumgebung

Die Partitionstabelle wurde verändert.
ioctl() wird aufgerufen, um die Partitionstabelle neu einzulesen.
Festplatten werden synchronisiert.

Schlusssichtung:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root# sgdisk -p /dev/sda
Disk /dev/sda: 167772160 sectors, 80.0 GiB
Model: VBOX HARDDISK   
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 2AC80F77-58F2-4EF7-9A39-E8AD77C46368
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 167772126
Partitions will be aligned on 2048-sector boundaries
Total free space is 88336380 sectors (42.1 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          206847   100.0 MiB   EF00  EFI system partition
   2          206848          239615   16.0 MiB    0C01  Microsoft reserved ...
   3          239616        78364608   37.3 GiB    0700  Basic data partition
   4       166694912       167768063   524.0 MiB   2700

Unklarheiten und Probleme

Nummerierung der Partitionen

Wie sieht die Nummerierung aus, wenn eine Partition mitten drin gelöscht wird? Also:

  • Ich habe erst die Partitionen 1,2,3 und 4
  • Ich lösche die Partition 2
  • Wie sehen nun die Nummern der restlichen Partitionen aus?
    • 1 2 3?
    • 1 3 4?

Erkenntnis: 1 3 4 ist die verwendete Nummerierung!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
root# sfdisk --dump /dev/sda
label: gpt
label-id: 2AC80F77-58F2-4EF7-9A39-E8AD77C46368
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 167772126
sector-size: 512

/dev/sda1 : start=        2048, size=      204800, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=13D408E8-9F66-40B7-97F3-CDFD78511C2B, name="EFI system partition", attrs="GUID:63"
/dev/sda2 : start=      206848, size=       32768, type=E3C9E316-0B5C-4DB8-817D-F92DF00215AE, uuid=E50624EC-F022-4084-BA57-C2FD09C5E7C1, name="Microsoft reserved partition", attrs="GUID:63"
/dev/sda3 : start=      239616, size=    39062497, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=60F948F4-EFE9-4DCA-A5D7-5CA4A1034A61, name="Basic data partition"
/dev/sda4 : start=   166694912, size=     1073152, type=DE94BBA4-06D1-4D40-A16A-BFD50179D6AC, uuid=5EE0E365-2DDE-4739-8531-E27B045120B5, attrs="RequiredPartition GUID:63"

root# sfdisk --dump /dev/sda >sda.dump

root# sfdisk --delete /dev/sda 2

root# sfdisk --part-uuid /dev/sda 2
sfdisk: /dev/sda: Partition 2: Partition ist unbenutzt

root# sfdisk --json /dev/sda
{
   "partitiontable": {
      "label": "gpt",
      "id": "2AC80F77-58F2-4EF7-9A39-E8AD77C46368",
      "device": "/dev/sda",
      "unit": "sectors",
      "firstlba": 34,
      "lastlba": 167772126,
      "sectorsize": 512,
      "partitions": [
         {
            "node": "/dev/sda1",
            "start": 2048,
            "size": 204800,
            "type": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
            "uuid": "13D408E8-9F66-40B7-97F3-CDFD78511C2B",
            "name": "EFI system partition",
            "attrs": "GUID:63"
         },{
            "node": "/dev/sda3",
            "start": 239616,
            "size": 39062497,
            "type": "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7",
            "uuid": "60F948F4-EFE9-4DCA-A5D7-5CA4A1034A61",
            "name": "Basic data partition"
         },{
            "node": "/dev/sda4",
            "start": 166694912,
            "size": 1073152,
            "type": "DE94BBA4-06D1-4D40-A16A-BFD50179D6AC",
            "uuid": "5EE0E365-2DDE-4739-8531-E27B045120B5",
            "attrs": "RequiredPartition GUID:63"
         }
      ]
   }
}

Verfügbarer Plattenplatz innerhalb von Win10

Ich habe die NTFS-Partition verkleinert auf 20GB. Zuvor wurde angezeigt, dass grob 11GB belegt sind.

Nach dem Start von Win10 sieht die Situation anders aus:

  • Als Größe von C: wird 18.6 GB angezeigt
  • Frei sind davon 700 MB (also quasi nix)

Also: Man sollte wohl besser mindestens 40GB für Win10 vorsehen!

Links

Historie

  • 2022-07-23: Erste Version