114 lines
2.3 KiB
Markdown
114 lines
2.3 KiB
Markdown
---
|
||
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
|
||
```
|
||
|
||
如果上述方法仍无法修复,您可能需要考虑从备份恢复数据或联系专业数据恢复服务。 |