pip install FATtools
(더 쉬움)를 사용하거나 여기에서 소스 코드(또는 릴리스된 패키지)를 다운로드하여 PyPI에서 설치하세요.
일부 하드웨어 MP3 플레이어의 한계에 대처하기 위해 FAT32 루트 테이블의 디렉토리 항목을 다시 정렬하기 위해 탄생한 이 제품은 이제 FAT12/16/32 및 exFAT에 대해 Python 3(32비트 및 64비트 모두)에서 완전한 읽기/쓰기 지원을 제공합니다. 해킹 및 복구 목적의 파일 시스템.
게다가:
다음 기능이 구현됩니다(주로 Python에서 몇 가지 ctypes 호출을 사용하여 Win32 디스크를 기본적으로 처리합니다. Linux와의 호환성은 정기적으로 테스트되지 않습니다).
분명히 파일 시스템은 매우 복잡하고 민감한 문제이고 큰 버그가 있을 수 있으므로 전적으로 사용자 책임하에 사용하게 될 것입니다! 하지만 지금은 상당히 안정적이고 사용 가능한 것 같습니다.
가장 취약한 부분(따라서 버그가 발생하기 쉬운 부분)은 다양한 방식으로 작동하는 캐싱 메커니즘이었습니다.
실제로 I/O 속도는 시스템 속도에 더 가깝습니다.
코드는 GPL입니다(GPL.TXT 참조).
[1] VHDX 로그 지원은 실제로 재생 기능으로 제한됩니다.
[2] 실제로 말하자면, 4K 섹터가 포함된 8TB VHDX를 GPT로 분할하고 FAT32로 포맷하여 Windows 11에서 사용할 수 있습니다. 그러나 Windows 11 CHKDSK는 4TB 바이트 이하를 보고합니다( 클러스터를 올바르게 계산하는 동안). ). 또한 FORMAT 자체는 이러한 합법적인 FAT32 형식을 8TB 디스크에 적용할 수 없습니다.
패키지는 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' 디렉터리를 살펴보세요.