Как моментальные снимки ZFS используют пространство на практике?

  1. Создан снимок
  2. Удалил огромный файл
  3. Дельта по-прежнему равна 0 (снимок больше не использует пространство) в zfs list для последних трех снимков.

Должна ли дельта или используемое пространство не соответствовать размеру удаляемого файла. Я знаю, что ZFS - это COW, но я не понимаю, почему я не могу откатить дочерний элемент /usr/home/xxxx.

# ls /home/xxxxx/testing12345.txt 
/home/xxxxx/testing12345.txt
# ls -alh /home/xxxxx/testing12345.txt                                                                                                                                 
-rw-r--r--  1 root  xxxxx   254M Aug 28 00:06 /home/xxxxx/testing12345.txt
# zfs list -rt snapshot tank1/usr/home/xxxxx
NAME                                        USED  AVAIL  REFER  MOUNTPOINT
tank1/usr/home/xxxxx@myRecursiveSnapshot   291M      -   804M  -
tank1/usr/home/xxxxx@devEnv                 71K      -  1.39G  -
tank1/usr/home/xxxxx@xfce                     0      -  1.39G  -
tank1/usr/home/xxxxx@testhome                 0      -  1.39G  -
tank1/usr/home/xxxxx@testagain               1K      -  1.39G  -
tank1/usr/home/xxxxx@27082015                 0      -  1.39G  -
tank1/usr/home/xxxxx@270820150                0      -  1.39G  -
tank1/usr/home/xxxxx@2708201501               0      -  1.39G  -
# 
# 
# 
# 
# zfs snapshot -r tank1@28082015                                                                                                                                        
# zfs list -rt snapshot tank1/usr/home/xxxxx                                                                                                                           
NAME                                        USED  AVAIL  REFER  MOUNTPOINT
tank1/usr/home/xxxxx@myRecursiveSnapshot   291M      -   804M  -
tank1/usr/home/xxxxx@devEnv                 71K      -  1.39G  -
tank1/usr/home/xxxxx@xfce                     0      -  1.39G  -
tank1/usr/home/xxxxx@testhome                 0      -  1.39G  -
tank1/usr/home/xxxxx@testagain               1K      -  1.39G  -
tank1/usr/home/xxxxx@27082015                 0      -  1.39G  -
tank1/usr/home/xxxxx@270820150                0      -  1.39G  -
tank1/usr/home/xxxxx@2708201501               0      -  1.39G  -
tank1/usr/home/xxxxx@28082015                 0      -  1.39G  -
# rm /home/xxxxx/testing12345.txt                                                                                                                                      
# zfs list -rt snapshot tank1/usr/home/xxxxx                                                                                                                           
NAME                                        USED  AVAIL  REFER  MOUNTPOINT
tank1/usr/home/xxxxx@myRecursiveSnapshot   291M      -   804M  -
tank1/usr/home/xxxxx@devEnv                 71K      -  1.39G  -
tank1/usr/home/xxxxx@xfce                     0      -  1.39G  -
tank1/usr/home/xxxxx@testhome                 0      -  1.39G  -
tank1/usr/home/xxxxx@testagain               1K      -  1.39G  -
tank1/usr/home/xxxxx@27082015                 0      -  1.39G  -
tank1/usr/home/xxxxx@270820150                0      -  1.39G  -
tank1/usr/home/xxxxx@2708201501               0      -  1.39G  -
tank1/usr/home/xxxxx@28082015                 0      -  1.39G  -
# 

Меня пытались откатить, используя различные снимки каталогов /usr, /usr/home и /usr/home/xxxx. Я читал форумы FreeBSD, руководство, а также пытался откатить только tank1@[snapshot name]--all безрезультатно. Что-то странное, когда я меняю файлы в /usr/home/xxxxx файлы в скрытом каталоге .zfs/snapshots/[snapshot name]/usr/home/xxxxx тоже меняются.


person sjt003    schedule 28.08.2015    source источник
comment
если вы собираетесь проголосовать против этого, пожалуйста, оставьте комментарий с объяснением, чтобы я мог исправить вопрос. Голосование против без комментария не особенно полезно.   -  person sjt003    schedule 28.08.2015
comment
Я должен упомянуть, что я могу успешно выполнить zfs send и zfs receive резервный пул.   -  person sjt003    schedule 28.08.2015
comment
Вы ищете ссылку на документ, объясняющий это, или вас удовлетворит практика, подтверждающая поведение в коде ОС bsd?   -  person dhein    schedule 01.09.2015
comment
Я следил за руководством BSD, поэтому мне не нужны справочные материалы — я ищу ответ, почему моментальный снимок не увеличивается в выделенном размере, когда я удаляю большой файл из тома, созданного с помощью моментального снимка, и почему я не могу восстановить его, когда я очень старательно выполняю шаги восстановления, @Zaibis   -  person sjt003    schedule 03.09.2015
comment
@Zaibis, я также ищу канонический ответ о том, как, когда и сколько места приходится на моментальные снимки zfs - я считаю, что за этим ответом следует быстрое объяснение того, что я здесь делаю неправильно или почему мое восстановление не t работы будет достаточно для щедрости   -  person sjt003    schedule 03.09.2015
comment
когда я изменяю файлы в /usr/home/xxxxx, файлы в скрытом каталоге .zfs/snapshots/[имя снимка]/usr/home/xxxxx также изменяются ‹= Какие изменения вы испытываете ? Потому что, когда я делаю это локально, существующий снимок ничуть не меняется.   -  person dhke    schedule 08.09.2015
comment
Я вижу изменения в каталоге снимков .zfs, соответствующие моим действиям, предпринятым в фактическом каталоге   -  person sjt003    schedule 08.09.2015
comment
@ sjt003 Это очень странно, и, как уже отмечалось, я не могу подтвердить это локально. Я бы также посчитал такое поведение просто (критической) ошибкой.   -  person dhke    schedule 09.09.2015


Ответы (1)


Используйте эту команду, чтобы увидеть пространство, используемое для всех моментальных снимков vdev — нужное вам свойство — usedsnap:

zfs list -o name,used,avail,refer,creation,usedds,usedsnap,origin,compression,compressratio,refcompressratio,mounted,atime,lused

Я добавил еще несколько свойств, так как использую сжатие в своих пулах zfs.

Кстати, каталоги снимков zfs доступны только для чтения.

Вы сказали, что не можете откатиться? Если это так, укажите -r или -R и, возможно, -f, если у вас есть клоны, образец:

zfs rollback -r poolname/dataset@oldersnaphot
zfs rollback -R poolname/dataset@oldersnaphot

Прочтите руководство перед выполнением отката zfs:

       -r
           Destroy any snapshots and bookmarks more recent than the one specified.
       -R
           Recursively destroy any more recent snapshots and bookmarks, as well as any clones of those snapshots.
       -f
           Used with the -R option to force an unmount of any clone file systems that are to be destroyed.
person soyayix    schedule 07.10.2015