Installez depuis PyPI en utilisant pip install FATtools
(plus facile) ou en téléchargeant le code source (ou les packages publiés) à partir d'ici.
Né pour trier les entrées de répertoire dans une table racine FAT32 afin de faire face aux limites de certains lecteurs MP3 matériels, il offre désormais une prise en charge complète en lecture/écriture dans Python 3 (32 et 64 bits) pour FAT12/16/32 et exFAT. systèmes de fichiers, à des fins de piratage et de récupération.
De plus:
Les fonctionnalités suivantes sont implémentées (principalement en Python, avec quelques appels ctypes pour gérer les disques Win32 de manière native ; la compatibilité avec Linux n'est pas régulièrement testée) :
Évidemment, étant donné qu'un système de fichiers est une question extrêmement complexe et délicate, et que de gros bugs peuvent surgir, vous l'utiliserez TOTALEMENT À VOS PROPRES RISQUES ! Mais il semble maintenant assez stable et utilisable.
La zone la plus fragile (et donc sujette aux bugs) était le mécanisme de mise en cache, qui fonctionne de différentes manières :
En fait, la vitesse des E/S est plus proche de celle du système.
Le code est sous GPL (regardez GPL.TXT).
[1] La prise en charge du journal VHDX est en réalité limitée à la capacité de relecture.
[2] En fait, on peut dire qu'on peut partitionner avec GPT un VHDX de 8 To avec des secteurs 4K et le formater avec FAT32 et l'utiliser avec plaisir sous Windows 11. Cependant, Windows 11 CHKDSK ne rapporte pas plus de 4 To d' octets (alors qu'il compte correctement les clusters ). De plus, FORMAT lui-même ne peut pas appliquer un tel format FAT32 légitime à un disque de 8 To.
Le package installe un script fattools
, vous pouvez l'utiliser pour effectuer des opérations simples en ligne de commande.
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
Veuillez noter que la taille de l'image résultante peut être réduite si : 1) le(s) volume(s) est(sont) défragmenté(s) ; 2) les tables de répertoires sont nettoyées et réduites ; 3) l'espace libre a déjà été effacé (mis à zéro).
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)
Veuillez consulter le répertoire « samples » pour plus d'exemples d'utilisation.