Вопросы о повреждении данных BTRFS и снимках?

0

Мне любопытно, что происходит, когда у нас есть поврежденный, не подлежащий исправлению файл в файловой системе со снимками, например, BTRFS, и мы пытаемся заменить файл из резервной копии? Я подозреваю, что снимки будут все еще содержать поврежденную версию файла. Есть ли способ исправить эти ошибки в снимках тоже?

Другой связанный вопрос, что случится, если сам снимок будет поврежден? Мы потеряем это?

inf3rno
источник

Ответы:

2

Снимки будут по-прежнему содержать поврежденные версии, потому что их идея заключается в том, что они являются Point-In-Time. В тот момент они оказались коррумпированными.

После того, как вы прогуглите BTRFS sbnapshots, похоже, что вы сможете смонтировать снимки, внести изменения в этот файл на снимке, и это сработает.

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

Что касается «что произойдет, если сам моментальный снимок поврежден» - это вряд ли возможно при BTRFS, но я ожидаю, что логика будет состоять в том, чтобы скопировать его на другое блочное устройство, а затем попытаться восстановить на этом блочном устройстве, как если бы он был оригинальным FS.

(Отказ от ответственности - я никогда не использовал BTRFS. Я немного больше, чем новичок, когда дело доходит до ZFS, но я достаточно хорошо понимаю концепции)

davidgo
источник
0

Я использую BTRFS. Я могу подтвердить и уточнить некоторые из того, что говорит этот ответ ; и я могу добавить что-то еще.

Вы можете смонтировать любой снимок. Вы можете изменить его, если он не был создан с опцией «только для чтения». Снимок - это просто подобъем, он не «запоминает», из какого другого подобъема он был создан. Подобъем источника и его снимок изначально эквивалентны. Лучше думать о вновь созданном снимке как о «форке», а не буквальном «снимке», «копировании», «замороженном состоянии» или любом другом имени, которое указывает на его более низкий статус по сравнению с «оригиналом».

Когда вы разветвляетесь подобъем (создаете моментальный снимок), вы можете подумать о снимке на момент времени, если решите больше не изменять «копию» (либо явно создав его как доступный только для чтения, либо просто ничего не делая с ним). , оставив его в покое), пока «оригинал», возможно, все еще используется. Я использую моментальные снимки для резервного копирования своей системы перед «apt-get upgrade», но никогда не удосужился создать их «только для чтения». Моя точка зрения такова: их статус Point-In-Time не из-за некоторых метаданных на моем диске, а из-за метаданных в моей голове - я просто воздерживаюсь от их изменения.

Снимки делят (изначально почти все) блоки данных с «оригинальным» подобъемом. Если содержимое данного блока приводит к повреждению файла, то файл будет поврежден в каждом снимке, который разделяет блок. Перезапись (изменение) файла в одном из подобъемов отображает его в блок (ы), содержащие новый контент, только в контексте этого подобъема; другие подтомы остаются такими, какими они были.

Если у вас есть поврежденный файл, совместно используемый несколькими подобъемами, и вы хотите заменить его из резервной копии, вы можете:

  • (общий метод) перезаписать весь файл (или отсоединить и создать заново), это переназначит все его части в другие блоки;
  • (необычный метод) применяет двоичное исправление к файлу, это переназначит некоторые его части на другие блоки (это возможно, если повреждение происходит внутри файла, а не внутри файловой системы, например, недопустимый, но иным образом читаемый PDF).

Выполнение этого независимо в нескольких подобъемах приведет к независимому переназначению, при этом неиспользуемые блоки будут приниматься несколько раз, а не только один раз.

Чтобы избежать этого и сделать эти замененные файлы в нескольких подобъемах общими для всех своих блоков, выполните следующие действия:

  1. Если он еще не установлен, установите корень файловой системы Btrfs где: mount -o subvol=/ …. Таким образом, все возможные подобъемы будут доступны в одной точке монтирования.
  2. Замените файл из резервной копии в любом отдельном объеме.
  3. Для каждого другого подобъема, где файл должен быть заменен
    1. отсоединить (удалить) файл,
    2. затем скопируйте ( cp) уже замененный файл из другого подобъема с --reflink=alwaysопцией; важно сделать это в одной точке монтирования.
  4. Теперь вы можете получить umountкорень файловой системы BTRFS.
Камиль Мачоровски
источник