Installieren Sie von PyPI mit pip install FATtools
(einfacher) oder laden Sie den Quellcode (oder die veröffentlichten Pakete) hier herunter.
Es wurde entwickelt, um Verzeichniseinträge in einer FAT32-Stammtabelle neu zu sortieren, um den Einschränkungen einiger Hardware-MP3-Player gerecht zu werden. Es bietet jetzt vollständige Lese-/Schreibunterstützung in Python 3 (sowohl 32- als auch 64-Bit) für FAT12/16/32 und exFAT Dateisysteme für Hack- und Wiederherstellungszwecke.
Darüber hinaus:
Die folgenden Funktionen sind implementiert (hauptsächlich in Python, mit einigen Ctypes-Aufrufen zur nativen Verarbeitung von Win32-Festplatten; die Kompatibilität mit Linux wird nicht regelmäßig getestet):
Da ein Dateisystem eine äußerst komplexe und heikle Angelegenheit ist und große Fehler auftreten können, verwenden Sie es natürlich auf eigene Gefahr! Aber es scheint jetzt ziemlich stabil und brauchbar zu sein.
Der fragilste Bereich (und daher anfällig für Fehler) war der Caching-Mechanismus, der auf unterschiedliche Weise funktioniert:
Tatsächlich liegt die E/A-Geschwindigkeit näher an der des Systems.
Der Code unterliegt der GPL (siehe GPL.TXT).
[1] Die VHDX-Protokollunterstützung ist eigentlich auf die Wiedergabefähigkeit beschränkt.
[2] Tatsächlich kann man mit GPT eine 8 TB große VHDX mit 4K-Sektoren partitionieren und mit FAT32 formatieren und problemlos unter Windows 11 verwenden. Allerdings meldet Windows 11 CHKDSK nicht mehr als 4 TB Bytes (während es Cluster korrekt zählt). ). Außerdem kann FORMAT selbst ein solches legitimes FAT32-Format nicht auf eine 8-TB-Festplatte anwenden.
Das Paket installiert ein fattools
-Skript, mit dem Sie einfache Befehlszeilenoperationen ausführen können.
fattools mkvdisk -s 8T --large-sectors image.vhdx
fattools mkfat -t exfat -p gpt image.vhdx
fattools mkvdisk -b image.vdi delta.vdi
fattools wipe image.vhd
fattools imgclone image.raw image.vhd
Bitte beachten Sie, dass die resultierende Bildgröße reduziert werden kann, wenn: 1) das/die Volume(s) defragmentiert ist/sind; 2) Verzeichnistabellen werden bereinigt und verkleinert; 3) Der freie Speicherplatz wurde zuvor gelöscht (auf Null gesetzt).
fattools imgclone \.PhysicalDrive2 image.vhd
fattools ls image1.vhd/py* image2.vdi/py*
fattools cp C:Python39Libsite-packages image.vhd/Python39/Lib
fattools cp image.vhd/Python39 C:ProgramData
fattools cat image.vhd/readme.txt
fattools rm image.vhd/Python39
# -*- coding: cp1252 -*-
from FATtools.Volume import *
disk = vopen('MyDiskImage.img', 'r+b', 'disk')
from FATtools import partutils
gpt = partutils.partition(disk)
from FATtools import mkfat, Volume
part = Volume.vopen('MyDiskImage.img', 'r+b', 'partition0')
mkfat.exfat_mkfs(part, part.size)
fattools reordergui
# -*- coding: cp1252 -*-
from FATtools.Volume import *
# Assuming we have DirA, DirB, DirC in this disk order into X:
root = vopen('X:', 'r+b')
new_order = '''DirB
DirC
DirA'''
root._sortby.fix = new_order.split('n') # uses built-in directory sort algorithm
root.sort(root._sortby) # user-defined order, in _sortby.fix list
root.sort() # default ordering (alphabetical)
# -*- coding: cp1252 -*-
from FATtools.Volume import vopen, vclose
from FATtools.mkfat import exfat_mkfs
from os.path import join
import os
real_fat_fs = 'F:' # replace with mount point of your file system
# Open and format with FATtools
fs = vopen(real_fat_fs, 'r+b',what='disk')
exfat_mkfs(fs, fs.size)
vclose(fs)
# Write some files with Python and list them
T = ('c','a','b','d')
for t in T:
open(join(real_fat_fs, t+'.txt'), 'w').write('This is a sample "%s.txt" file.'%t)
print(os.listdir(real_fat_fs+'/'))
# Open again, and sort root with FATtools
fs = vopen(real_fat_fs, 'r+b')
fs.sort()
vclose(fs)
# Check new table order with Python
print(os.listdir(real_fat_fs+'/'))
# -*- coding: cp1252 -*-
from FATtools.Volume import vopen, vclose
from FATtools.mkfat import exfat_mkfs
from FATtools.partutils import partition
# Open & create GPT partition
o = vopen('\\.\PhysicalDrive1', 'r+b',what='disk')
print('Partitioning...')
partition(o, 'mbr')
vclose(o)
# Reopen and format with EXFAT
o = vopen('\\.\PhysicalDrive1', 'r+b',what='partition0')
print('Formatting...')
exfat_mkfs(o, o.size)
vclose(o) # auto-close partition AND disk
# Reopen FS and write
print('Writing...')
o = vopen('\\.\PhysicalDrive1', 'r+b')
# Write some files with FATtools and sort them
T = ('c','a','b','d')
for t in T:
f = o.create(t+'.txt')
f.write(b'This is a sample "%s.txt" file.'%bytes(t,'ascii'))
f.close()
o.sort()
vclose(o)
Weitere Anwendungsbeispiele finden Sie im Verzeichnis „samples“.