Hi,
Le 30/09/2020 à 09:40, Jean-Pierre André a écrit :
> Hi,
>
> Didier Spaier wrote on 9/30/20 12:50 AM:
>> Hello,
>>
>> I am the maintainer of the Slint distribution, cf. https://slint.fr
>>
>> I want to provide in our installer the ability to shrink a NTFS file system
>> and
>> associated partition to make room for Slint alongside Windows.
>>
>> But when I check the minimum size of the FS from Windows 10 (tested in a Qemu
>> VM) I get 20375928832 bytes whereas ntfsresize gives 13357295660.
>
> The size returned by ntfsresize is the space actually used,
> IOW the space that would be used if all the data would be
> packed at the beginning of the device. That is generally
> not reachable because relocating data causes extra
> fragmentation which requires some more space.
>
> Now, if the partition is a Windows partition, it needs more
> space for breathing. During a Windows update, two copies
> of the system are temporarily stored. The figure you got from
> Windows probably accounts for that extra space.
>
>> ntfscluster tells me that no inode is found after cluster number 3479395,
>> i.e.
>> byte number 1422934016.
>
> How did you get this ?
It was an approximation. Here is a script to get a more precise value:
#!/bin/sh
LASTPARTPATH=/dev/sda4
NTFSINFO=$(ntfsinfo -mft $LASTPARTPATH)
Cluster=$(echo "$NTFSINFO"|grep "Cluster Size"|sed "s/.* //")
Total=$(echo "$NTFSINFO"|grep "Volume Size in Clusters"|sed "s/.* //")
Free=$(echo "$NTFSINFO"|grep "Free Clusters"|sed "s/.*: //;s/ .*//")
Min=$(($Total - $Free))
FOUND=""
Prev=$Min
Try=$(($Min + $Free))
Diff=2
while [ $Diff -gt 1 ]; do
Answer=$(ntfscluster --force -c ${Try}-$Total $LASTPARTPATH 2>/dev/null)
FOUND=$(echo "$Answer"|grep "no inode found")
Prev=$Try
Free=$(($Free/2))
if [ ! "$FOUND" = "" ]; then
Try=$(($Try - $Free))
else
Try=$(($Try + $Free))
fi
if [ $Try -gt $Prev ]; then
Diff=$(($Try - $Prev))
else
Diff=$(($Prev - $Try))
fi
echo "Try=$Try"
done
echo "Volume size is $Total Clusters or $(($Total * $Cluster)) bytes"
echo "Minimum with no further inode is $Try Clusters or $(($Try * $Cluster))
bytes"
echo "Minimum according to ntfsresize is $Min Clusters or $(($Min * $Cluster))
bytes"
It gave (with the last line added):
Minimum with no further inode is 3526478 Clusters or 14444453888 bytes
Minimum according to ntfsresize is 3190218 Clusters or 13067132928 bytes
Minimum according to Windows: 19562 MiB or 2052243712 bytes.
The result should be accurate, plus or minus one cluster.
> I would need the output of "ntfsinfo -fm /dev/xxx" to give
> an explanation.
Below:
Volume Information
Name of device: /dev/sda4
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: 21330175
MFT Information
MFT Record Size: 1024
MFT Zone Multiplier: 0
MFT Data Position: 24
MFT Zone Start: 786432
MFT Zone End: 3452703
MFT Zone Position: 786432
Current Position in First Data Zone: 3452703
Current Position in Second Data Zone: 0
Allocated clusters 23744 (0,1%)
LCN of Data Attribute for FILE_MFT: 786432
FILE_MFTMirr Size: 4
LCN of Data Attribute for File_MFTMirr: 2
Size of Attribute Definition Table: 2560
Number of Attached Extent Inodes: 0
FILE_Bitmap Information
FILE_Bitmap MFT Record Number: 6
State of FILE_Bitmap Inode: 80
Length of Attribute List: 0
Number of Attached Extent Inodes: 0
FILE_Bitmap Data Attribute Information
Decompressed Runlist: not done yet
Base Inode: 6
Attribute Types: not done yet
Attribute Name Length: 0
Attribute State: 3
Attribute Allocated Size: 2666496
Attribute Data Size: 2666272
Attribute Initialized Size: 2666272
Attribute Compressed Size: 0
Compression Block Size: 0
Compression Block Size Bits: 0
Compression Block Clusters: 0
Free Clusters: 18139957 (85,0%)
>> Should I understand that ntfsresize is not ready for Windows 10, or do I miss
>> something obvious? I would prefer the latter ;)
>
> Please report any bug that you may know, otherwise it
> will probably not be fixed...
I am not saying that there is a bug, rather trying to find out
if/how I could use nfs-3g to find the same minium size as displayed
by Windows 10.
Best regards,
Didier
_______________________________________________
ntfs-3g-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ntfs-3g-devel