Как исправить проблему с размером btrfs

302
Michael Firth

Я думаю, что я столкнулся с известной ошибкой в ​​btrfs:

https://www.spinics.net/lists/linux-btrfs/msg60984.html

Конечно, сообщения об ошибках похожи. Если это та же проблема, кажется несколько прискорбным, что исправление для проблемы 2-летней давности не было перенесено в стабильное ядро ​​V4.9 (именно это использует Debian 9)

Сейчас я нахожусь в ситуации, когда у одного из inode-ов файловой системы есть проблемы с экстентами (как сообщает btrfs check):

root 257 inode 2607184 errors 100, file extent discount Found file extent holes: start: 0, len: 81920 

Кажется, что нет особого совета или документации о том, как выйти из такой ситуации (к счастью, у меня есть резервные копии файловой системы, поэтому в худшем случае можно переформатировать и восстановить)

Кажется, btrfs check --repairпросто циклически печатает одну и ту же ошибку снова и снова, фактически не исправляя ее.

Есть ли способ исправить существующую файловую систему, или я лучше воссоздать ее и восстановить резервную копию?

0
Спасибо - я выбрал похожий (но немного более экстремальный) вариант удаления подобъема с проблемами в нем. Кажется, что освобождение inode заставило файловую систему выполнить чистую проверку. Если вы хотите сделать ответ на основании этого, я буду голосовать как правильный Michael Firth 5 лет назад 0

1 ответ на вопрос

1
Kamil Maciorowski

Я думаю, что root 257относится к идентификатору подобъема, а затем inode 2607184указывает на проблемный индекс. Я хотел бы попытаться удалить (отменить связь) каждый путь, связанный с индексом.

  1. Смонтировать подобъем:

    mount /dev/sdXN -o subvolid=257 /mnt/mountpoint 
  2. Найдите каждую запись с соответствующим номером инода:

    find /mnt/mountpoint -xdev -inum 2607184 
  3. Исследуйте объекты. Надеюсь, вы можете позволить себе удалить их.

    • (Я не уверен, что это может быть каталог в вашем случае). Если это каталог, я подозреваю, что его список может быть неполным.
      1. Переместите его содержимое (если есть) в другой новый каталог (создайте его с тем же владельцем, возможно, с правами доступа); удалить старый каталог; mvновый каталог со старым именем.
      2. Сравните с вашей резервной копией, восстановите недостающие объекты.
    • Если это один или несколько файлов -
      1. Убери их всех.
      2. Восстановите файлы из резервной копии.
  4. Размонтируйте:

    umount /mnt/mountpoint 
  5. Проверьте файловую систему. Проблемного инода больше не должно быть.


Кроме того, вы можете удалить весь подобъем. Это кажется излишним, но это должно избавить от проблемного inode.

  1. Смонтируйте корень файловой системы:

    mount /dev/sdXN -o subvol=/ /mnt/mountpoint 
  2. Список подобъемов:

    btrfs subvolume list /mnt/mountpoint 

    и найдите тот с ID 257.

  3. Удалить подобъем:

    btrfs subvolume delete -c /mnt/mountpoint/path/to/the/subvolume/with/ID/257 
  4. Размонтируйте:

    umount /mnt/mountpoint 
  5. Проверьте файловую систему. Проблемного инода больше не должно быть.

  6. Восстановите ваши данные из резервной копии.
Так как это были только что созданные файлы, которые вызвали ошибку (git checkout), и у меня есть периодическое создание снимка для использования с Samba, я в итоге согласился откатиться на 20 минут вовремя и удалил подобъем. `btrfs check` теперь сообщает об отсутствии ошибок, надеюсь, что нет основной ошибки, которая будет кусаться позже Michael Firth 5 лет назад 0

Похожие вопросы