LFS (Large File System),是一个Python实现的大文件管理系统(LFS)项目。
LFS(Large File System)旨在优化大型文件的存储和管理。它通过将大文件存储到专门的仓库中,并在原位置创建链接的方式,有效节省磁盘空间并简化文件管理。
- 自动扫描指定目录下的大文件
- 支持自定义文件大小阈值
- 忽略已存在的软链接文件
- 将大文件存储到统一的LFS仓库中
- 在原位置创建指向仓库文件的软链接
- 使用SHA-256哈希值唯一标识文件
- 根据文件大小将文件分类存储:
- 1M-10M
- 10M-100M
- 100M-500M
- 500M-1G
- 1G-5G
- 5G以上
- 自动检测并清理无链接指向的仓库文件
- 避免存储空间浪费
- Python 3.8 或更高版本
- Windows/Linux/macOS 操作系统
系统会在首次运行时创建 lfs.ini 配置文件,包含以下参数:
LFS-BASE="./lfs_base/" # LFS仓库根目录
USR-BASE="./" # 用户文件根目录
LFS-SIZE="10MB" # 默认最小处理文件大小
python lfs.py [选项]常用选项:
-lbase, --lfs-base: 指定LFS仓库目录 (默认: ./lfs_base/)-ubase, --usr-base: 指定用户文件目录 (默认: ./)-size, --min-size: 指定最小处理文件大小 (默认: 10MB)-clean, --clean-mode: 启用清理模式-no-delete-confirm, --no-confirm: 跳过删除确认
-
初始化和处理文件:
python lfs.py -ubase "/path/to/files" -size "50MB"
-
清理无链接文件:
python lfs.py -clean -no-delete-confirm
可以直接在Python代码中使用LFS功能:
from lfs import LFSManager
# 创建LFS管理器实例
lfs = LFSManager('/path/to/lfs/repository')
# 初始化仓库
lfs.init_repo()
# 处理大于10MB的文件
lfs.process_files('/path/to/user/files', 10 * 1024 * 1024)
# 清理无链接文件
lfs.clean_repo(no_confirm=True)- 文件扫描: 递归扫描指定目录,找出大于设定阈值的文件
- 哈希计算: 为每个大文件计算SHA-256哈希值作为唯一标识
- 文件存储: 将文件按大小分类存储到LFS仓库对应目录中
- 链接创建: 在原位置创建指向仓库文件的软链接
- 清单维护: 更新
lfs_assets.json清单文件记录文件信息
- 系统会自动跳过包含
lfs_assets.json的目录 - 不会对已存在的软链接文件进行处理
- Windows系统上启用了长路径支持以处理路径过长的问题
- 清理功能只会删除没有有效链接指向的仓库文件
lfs_repository/
├── objects/ # 文件存储目录
│ ├── 1M-10M/ # 1MB-10MB文件
│ ├── 10M-100M/ # 10MB-100MB文件
│ ├── 100M-500M/ # 100MB-500MB文件
│ ├── 500M-1G/ # 500MB-1GB文件
│ ├── 1G-5G/ # 1GB-5GB文件
│ └── 5G-above/ # 5GB以上文件
└── lfs_assets.json # 文件清单
- 权限问题: 确保对LFS仓库目录和用户文件目录有足够的读写权限
- 软链接创建失败: 在某些文件系统或操作系统上可能不支持软链接,系统会自动回退到文件复制
- 路径过长: Windows系统上已启用长路径支持,但仍需注意极端情况
设置环境变量 LFS_DEBUG=1 可以启用调试输出,获取更多详细信息。