FATtools
v.1.0.39
使用pip install FATtools
(更簡單)從 PyPI 安裝或從此處下載原始程式碼(或已發佈的軟體包)。
它的誕生是為了重新排序FAT32 根表中的目錄條目,以應對某些硬體MP3 播放器的限制,現在在Python 3(32 位元和64 位元)中為FAT12/16/32 和exFAT 提供完整的讀/寫支援檔案系統,用於駭客攻擊和恢復目的。
而且:
實作了以下功能(主要是在 Python 中,透過一些 ctypes 呼叫來本機處理 Win32 磁碟;不定期測試與 Linux 的兼容性):
顯然,由於檔案系統是一個極其複雜和微妙的問題,並且可能存在大錯誤,因此您將完全自行承擔使用它的風險!但現在看起來相當穩定且可用。
最脆弱的區域(因此容易出現錯誤)是快取機制,它以不同的方式運作:
實際上,I/O 速度更接近系統的速度。
程式碼是 GPL 的(查看 GPL.TXT)。
[1] VHDX 日誌支援實際上僅限於重播功能。
[2] 實際上,可以說,可以使用GPT 對具有4K 磁區的8 TB VHDX 進行分割區,並使用FAT32 進行格式化,並在Windows 11 下愉快地使用它。 TB位元組(雖然它正確計算簇) )。此外,FORMAT 本身無法將這種合法的 FAT32 格式套用至 8 TB 磁碟。
該軟體包安裝了一個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)
請查看“samples”目錄以取得更多使用範例。