Как снимки файловой системы отличаются от простого создания копии файлов?

Можно использовать символьную ссылку, я просто попробовал это, чтобы быть уверенным. Так как материал в/tmp является непостоянным, который означает, что необходимо будет создать файл при начальной загрузке прежде dhcpcd выполнения.

touch /tmp/dhcpcd.resolv.conf
ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf

Я включал ln, укусил посредством иллюстрации, но отметил, что Вы не должны создавать символьную ссылку каждый раз при начальной загрузке; просто вставьте свою систему RO однажды и (снова) удостоверьтесь/tmp файл, с которым она связывается, создается, прежде чем что-либо попытается получить доступ к ней.

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

5
07.01.2014, 09:35
4 ответа

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

Я не действительно знаком со специфическими особенностями Btrfs, но следующее относится к ZFS, из которого Btrfs черпает много вдохновения. По-видимому, снимки Btrfs являются на самом деле чтением-записью, делая их более подобными клонам файловой системы ZFS, но это не изменяет их отношения к копиям файла.

Снимок является копией момента времени только для чтения состояния файловой системы.

Это работает, потому что и Btrfs и ZFS являются так называемой Копией В файловых системах Записи. Каждый раз, когда блок данных изменяется, измененные данные записаны в местоположение на диске, отличающемся от оригинала. Основной позитивный аспект этого - то, что это значительно увеличивает надежность: потому что очень небольшие данные должны быть перезаписаны на месте, существует значительно уменьшенная возможность продвижения задач к потере данных. Однако существуют также другие преимущества. Одно такое преимущество состоит в том, что можно сделать создание снимков уровня файловой системы эффективно. Главная оборотная сторона - то, что, поскольку Ваше устройство хранения данных заполняется, оно имеет тенденцию значительно увеличивать фрагментацию устройства хранения данных, поскольку средство выделения блока изо всех сил пытается найти где-нибудь, где угодно, физически сохранить копию. На самом деле, рекомендуется сохранить использование пула ZFS ниже 80%, по-видимому, нисколько по той точной причине.

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

Теперь, как это отличается от простого создания копии с помощью rsync, CP, кошки или безотносительно? Это отличается, потому что, пока данные на самом деле не изменяются, никакая дополнительная физическая копия данных не сделана.

Это похоже на hardlinks на stereoids; та же физическая дисковая копия данных используется при доступе к файлу под различными именами. Различие - то, что с hardlinks, изменение в файле под одним именем распространяет к любой копии, потому что они действительно ссылаются на те же блоки данных. С копией на записи и созданием снимков, измененные блоки только обнаруживаются в месте, где они были изменены. (Со снимками только для чтения это означает в "текущей" версии файла.) Также только необходимо переписать блоки, которые были на самом деле изменены; остающиеся блоки оставляют точно, где они. Для того, чтобы сделать вещи как файлы создания снимков, содержащие образы дисков VM, например, это может иметь значительное значение в количестве данных, должен был сохранить на диске.

Так, для резюме:

  • Создание снимков только требует такого дискового пространства, как измененные блоки требуют. Копирование требует количества раз копий размер файла.
  • Снимки только для чтения или чтение-запись, в зависимости от дизайна файловой системы. Копии являются чтением-записью дизайном.
  • Копии независимы. Снимки ссылаются на те же блоки данных как текущая версия файла до текущей версии изменений файла (полностью или часть).
7
27.01.2020, 20:34
  • 1
    На BTRFS Snaphots, - быть значением по умолчанию - чтение-запись. Снимки только для чтения были начаты AFAIK с ядром 3.8. –  Adam Ryczkowski 07.01.2014, 11:44
  • 2
    @AdamRyczkowski Так снимок Btrfs подобен клону ZFS. Это - хорошая информация, хотя я не думаю, что она оказывает любое значительное влияние на законность моего ответа. –  a CVn 07.01.2014, 11:47

Снимки не делают резервных копий. Думайте о них как о необычном наборе копии на записи hardlinks (которые, следовательно, ограничены тем же btrfs разделом), что Вы сможете смонтироваться как на вид отдельная файловая система (в будущем, Вы сможете использовать различные опции монтирования для каждого подобъема (=snapshot)).

Только с rsync Вы на самом деле копируете данные.


В BTRFS, благодаря неизменности фактических данных, хранивших на диске (если Вы не монтируетесь с --nodatacow) возможно иметь две копии идентичного файла, хранившего в общей области на диске, но без любых побочных эффектов любого символьные ссылки, ни hardlinks. Существует даже инструмент "bedup", который сканирует Ваш btrfs раздел и освобождает пространство на жестком диске, используемое идентичными файлами.

Эта функция BTRFS также интегрируется с cp программа: с пользовательской точки зрения cp --reflink <source> <dest> не отличается от нормального копирования, хотя много порядков величины быстрее. Это на самом деле не копирует данные. Копия будет сделана прозрачно файловой системой, каждый раз, когда Вы пытаетесь на самом деле изменить любые или целевые или исходные файлы. И это верно для любого файла, который Вы изменяете, не только, которые были скопированы с --reflink. Вот почему это называют системой COW (COW = Копия На Записи)

4
27.01.2020, 20:34
  • 1
    "резервных копий" очень грязно, Adam. Оба полных копирования, нулевое разовое копирование (клонирование), создание снимков, копируя на другой жесткий диск, копируя на другую машину все считают резервными копиями с разными уровнями безопасности так сказать. –  ArekBulski 29.10.2015, 20:59

Основное различие между снимком и копией с cp -a --reflink к той же файловой системе то, что снимок намного быстрее (почти мгновенный); производительность не зависит от сколько файлов, там находятся в исходном подобъеме. Существует также менее принципиальное различие, которое я действительно нахожу немного неудобными: создание снимков только копирует сам объем, и вложенные подобъемы появятся как пустые каталоги в снимке. Для полноты, --reflink флаг просит, чтобы CP использовало reflink syscall, который быстр и включает совместное использование пространства в файловых системах COW, вместо того, чтобы копировать данные путем чтения из одного файла и вписывания в другой.

0
27.01.2020, 20:34

Снимки могут быть отправлены в другую BTRFS, расположенную на отдельном диске или машине, с помощью btrfs send . Эта операция может быть чрезвычайно быстрой и эффективной при выполнении инкрементных передач моментальных снимков, поскольку BTRFS будет отправлять только различия с момента последнего переданного моментального снимка. Во многих случаях это превосходит rsync / cp ( https://btrfs.wiki.kernel.org/index.php/Incremental_Backup )

Я не думаю, что вы можете отправить rsync Папка через btrfs send . То же самое для папки, скопированной с помощью cp -a --reflink = true

Также , принятый ответ (от Майкла) не включает тот факт, что для Btrfs вы можете использовать cp -a --reflink = true , который во многих аспектах ведет себя как снимок произвольного каталога. Значение «до тех пор, пока данные не изменятся, никакая дополнительная физическая копия данных не будет сделана». (поэтому дополнительное пространство не используется и операция выполняется очень быстро).

Также обратите внимание, что cp -a --reflink = true отличается от cp -al . Ссылаются только на общие блоки, поэтому изменение одного файла не приводит к изменению другого. Насколько мне известно, ZFS не поддерживает эту функцию.

0
27.01.2020, 20:34

Теги

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