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

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

2 ответа2

2

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

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

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

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

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

0

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

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

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .