Установите из PyPI, используя pip install FATtools
(проще) или загрузив исходный код (или выпущенные пакеты) отсюда.
Созданный для пересортировки записей каталога в корневой таблице FAT32, чтобы справиться с ограничениями некоторых аппаратных MP3-плееров, он теперь обеспечивает полную поддержку чтения/записи в Python 3 (как 32-, так и 64-разрядной версии) для FAT12/16/32 и exFAT. файловые системы для взлома и восстановления.
Более того:
Реализованы следующие функции (в основном на Python, с несколькими вызовами ctypes для собственной обработки дисков Win32; совместимость с Linux регулярно не проверяется):
Очевидно, что поскольку файловая система — чрезвычайно сложная и деликатная материя, и в ней могут быть большие ошибки, вы будете ИСПОЛЬЗОВАТЬ ЕЕ ПОЛНОСТЬЮ НА СВОЙ СОБСТВЕННЫЙ РИСК! Но теперь он кажется вполне стабильным и пригодным для использования.
Самой уязвимой областью (и, следовательно, подверженной ошибкам) был механизм кэширования, который работает по-разному:
На самом деле скорость ввода-вывода ближе к системной.
Код распространяется под лицензией GPL (см. GPL.TXT).
[1] Поддержка журнала VHDX фактически ограничивается возможностью воспроизведения.
[2] На самом деле, скажем, можно разбить с помощью GPT VHDX объемом 8 ТБ с секторами по 4 КБ, отформатировать его в FAT32 и с удовольствием использовать его под Windows 11. Однако Windows 11 CHKDSK сообщает не более 4 ТБ байт (при этом он правильно считает кластеры ) ). Кроме того, сам FORMAT не может применить такой законный формат FAT32 к диску емкостью 8 ТБ.
Пакет устанавливает скрипт fattools
, вы можете использовать его для выполнения простых операций командной строки.
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
Обратите внимание, что размер полученного изображения может уменьшиться, если: 1) том(ы) дефрагментированы; 2) таблицы каталогов очищаются и сжимаются; 3) свободное место ранее было стерто (обнулено).
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)
Пожалуйста, загляните в каталог «образцы» для получения дополнительных примеров использования.