--- title: # 修复 Btrfs 文件系统错误并恢复 Docker 运行 created: 2026-05-31 source: Cherry Studio tags: --- # 修复 Btrfs 文件系统错误并恢复 Docker 运行(飞牛系统) 当 Btrfs 文件系统因断电变为只读时,您需要按照以下步骤修复: ## 1\. 卸载文件系统(如果已挂载) ```bash sudo umount /path/to/存储空间2 ``` ## 2\. 运行 Btrfs 文件系统修复 ### 基本修复(尝试正常恢复) ```bash sudo btrfs check --readonly /dev/sdX2 # 先只读检查,替换为实际设备名 ``` ### 如果发现错误需要修复 ```bash sudo btrfs check --repair /dev/sdX2 ``` **注意**:`--repair` 选项有一定风险,建议先备份重要数据。它会尝试自动修复文件系统结构错误。 ## 3\. 高级修复选项(如果基本修复无效) ### 重置日志(log tree) ```bash sudo btrfs rescue zero-log /dev/sdX2 ``` ### 清除损坏的树(谨慎使用) ```bash sudo btrfs rescue clear-ino-cache /dev/sdX2 sudo btrfs rescue fix-device-size /dev/sdX2 ``` ## 4\. 重新挂载文件系统 ```bash sudo mount -t btrfs -o compress-force=zstd,noatime,space_cache=v2 /dev/sdX2 /path/to/存储空间2 ``` ## 5\. 恢复 Docker 服务 ```bash sudo systemctl restart docker ``` ### 检查容器状态 ```bash docker ps -a ``` ### 尝试启动容器 ```bash docker start $(docker ps -aq) ``` ## 6\. 如果仍有问题 ### 重建 Btrfs 空间缓存 ```bash sudo btrfs filesystem resize max /path/to/存储空间2 ``` ### 检查并修复子卷 ```bash sudo btrfs subvolume list /path/to/存储空间2 sudo btrfs subvolume sync /path/to/存储空间2 ``` ## 7\. 预防措施 1. **启用 Btrfs 异步写入**: 在`/etc/fstab`中添加`async`选项 2. **定期检查与平衡**: ```bash sudo btrfs scrub start /path/to/存储空间2 sudo btrfs balance start -dusage=50 -musage=50 /path/to/存储空间2 ``` 3. **考虑使用 RAID1**: ```bash sudo btrfs device add /dev/sdY /path/to/存储空间2 sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /path/to/存储空间2 ``` 4. **启用 COW 禁用**: 对 Docker 存储目录禁用写入时复制: ```bash sudo chattr +C /path/to/存储空间2/docker ``` 如果上述方法仍无法修复,您可能需要考虑从备份恢复数据或联系专业数据恢复服务。