Instale desde PyPI usando pip install FATtools
(más fácil) o descargando el código fuente (o los paquetes publicados) desde aquí.
Nacido para reordenar las entradas del directorio en una tabla raíz FAT32 para hacer frente a las limitaciones de algunos reproductores MP3 de hardware, ahora proporciona soporte completo de lectura/escritura en Python 3 (tanto de 32 como de 64 bits) para FAT12/16/32 y exFAT. sistemas de archivos, con fines de piratería y recuperación.
Además:
Se implementan las siguientes características (principalmente en Python, con algunas llamadas de ctypes para manejar discos Win32 de forma nativa; la compatibilidad con Linux no se prueba periódicamente):
Obviamente, dado que un sistema de archivos es un asunto extremadamente complejo y delicado, y pueden existir errores importantes, ¡lo usarás TOTALMENTE BAJO TU PROPIO RIESGO! Pero ahora parece bastante estable y utilizable.
El área más frágil (y, por lo tanto, sujeta a errores) fue el mecanismo de almacenamiento en caché, que opera de diferentes maneras:
En realidad, la velocidad de E/S es más cercana a la del sistema.
El código está certificado por GPL (consulte GPL.TXT).
[1] La compatibilidad con VHDX Log en realidad se limita a la capacidad de reproducción.
[2] En realidad, uno puede particionar con GPT un VHDX de 8 TB con sectores 4K y formatear con FAT32 y usarlo felizmente en Windows 11. Sin embargo, Windows 11 CHKDSK informa no más de 4 TB bytes (aunque cuenta los clústeres correctamente). ). Además, FORMAT en sí no puede aplicar un formato FAT32 tan legítimo a un disco de 8 TB.
El paquete instala un script fattools
, puede usarlo para realizar operaciones simples de línea de comando.
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
Tenga en cuenta que el tamaño de la imagen resultante puede reducirse si: 1) los volúmenes se desfragmentan; 2) las tablas de directorio se limpian y reducen; 3) el espacio libre se ha borrado (puesto a cero) antes.
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)
Mire dentro del directorio 'samples' para obtener más ejemplos de uso.