AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 399894
Accepted
Catskul
Catskul
Asked: 2012-06-19 11:24:18 +0800 CST2012-06-19 11:24:18 +0800 CST 2012-06-19 11:24:18 +0800 CST

btrfs 有比较快照的有效方法吗?

  • 772

虽然比较挂载的快照会起作用,但在许多情况下听起来它可能非常慢。

btrfs 是否有用于区分快照的特定功能?(我无法在文档中找到任何内容)

filesystems diff btrfs
  • 5 5 个回答
  • 12347 Views

5 个回答

  • Voted
  1. Best Answer
    amcnabb
    2012-08-21T14:08:14+08:002012-08-21T14:08:14+08:00

    btrfs send出现在 Linux 3.6 (2012) 中,“在两个子卷快照之间生成变化流。” --no-data您可以使用它来通过添加标志来生成快速元数据比较 。

    btrfs send --no-data -p /snapshots/parent /snapshots/child
    

    通常,您会删除--no-data标志并将输出通过管道传输到btrfs receive,以进行增量备份。例如,如果/snapshots/parentat 已经存在/backup/snapshots/parent,btrfs send则只会将这些更改流式传输到/backup文件系统:

    btrfs send -p /snapshots/parent /snapshots/child | btrfs receive /backup/snapshots
    
    • 14
  2. artfulrobot
    2014-03-07T07:19:42+08:002014-03-07T07:19:42+08:00

    我正在运行没有的 Debian 稳定版,所以btrfs send我寻找使用btrfs subvolume find-new.

    更新: 在 Linux 3.6btrfs send中添加,该版本于 2012 年发布,并于 2015 年包含在 Debian 稳定版中。

    如果你有 snapshot1 和 snapshot2 并且你想知道在后面的快照 2 中发生了什么变化,因为 snapshot1 是你可以使用下面的脚本提供的

    btrfs-diff oldsnapshot/ newsnapshot/
    

    这将列出自 oldsnapshot/ 以来在 newsnapshot/ 中更改的所有文件。

    #!/bin/bash
    usage() { echo $@ >2; echo "Usage: $0 <older-snapshot> <newer-snapshot>" >2; exit 1; }
    
    [ $# -eq 2 ] || usage "Incorrect invocation";
    SNAPSHOT_OLD=$1;
    SNAPSHOT_NEW=$2;
    
    [ -d $SNAPSHOT_OLD ] || usage "$SNAPSHOT_OLD does not exist";
    [ -d $SNAPSHOT_NEW ] || usage "$SNAPSHOT_NEW does not exist";
    
    OLD_TRANSID=`btrfs subvolume find-new "$SNAPSHOT_OLD" 9999999`
    OLD_TRANSID=${OLD_TRANSID#transid marker was }
    [ -n "$OLD_TRANSID" -a "$OLD_TRANSID" -gt 0 ] || usage "Failed to find generation for $SNAPSHOT_NEW"
    
    btrfs subvolume find-new "$SNAPSHOT_NEW" $OLD_TRANSID | sed '$d' | cut -f17- -d' ' | sort | uniq
    

    解释:btrfs subvolume find-new查找特定“生成”快照后更改的文件。它还报告当前的世代号。

    注意事项

    例如,获取子卷案例的每日快照:

    mkdir test && cd test
    btrfs subvolume create live
    date >live/foo1
    date >live/bar1
    btrfs subvolume snapshot live/ snap1
    date >live/foo2  # new file
    date >>live/bar1 # modify file
    rm live/foo1     # delete file
    btrfs subvolume snapshot live/ snap2
    date >live/foo3  # new file
    mv live/bar{1,2} # rename file
    rm live/foo2     # delete file
    

    snap1 和 snap2 之间发生了什么变化?

    $ btrfs-diff snap1/ snap2/
    bar1
    foo2
    

    所以我们可以看到新文件,看到修改后的文件,但是删除不报。这是因为该命令报告存在的文件,而不是现在不存在的文件。

    snap2 和实时子卷之间发生了什么变化?

    $ btrfs-diff snap2/ live/
    foo3
    

    不报告重命名的文件。它的数据没有改变。

    现在如果我们将数据添加到重命名的文件中怎么办

    date >>live/bar2
    btrfs-diff snap2/ live/
    bar2
    foo3
    

    好的,有道理。但是让我们创建一个新文件

    date >live/lala
    btrfs-diff snap2/ live/
    bar2
    foo3
    

    嗯!拉拉在哪里?. 如果您添加另一个文件,lala则会出现。所以这种行为有点奇怪。这可能就是为什么 wiki 说:

    find-new 方法有一些严重的局限性,因此不能真正用于发送/接收之类的东西。

    然而,奇怪的是,当您将活动子卷与先前状态进行比较时,而不是在您比较(只读)快照时。因此,除非您还想识别已删除的文件,否则这仍然有用。

    • 13
  3. Att Righ
    2017-04-06T05:41:53+08:002017-04-06T05:41:53+08:00

    这是由快照便利工具支持的snapper。

    sudo snapper -c config diff 445..446

    当然,这需要您使用snapper快照。

    可以使用 找到此快照 ID snapper list -a。不幸的是,在撰写本文时,snapper 不支持单个配置的列表快照,尽管这些数字可以从子卷名称中找到。

    • 5
  4. lustra_pl
    2021-06-05T13:24:09+08:002021-06-05T13:24:09+08:00

    当前解决方案:

    btrfs send --no-data  -p SHAPSHOT_OLD  SHAPSHOT_NEW  |  btrfs receive --dump  |  grep ^update_extent
    
    • 3
  5. Daniel Schaffrath
    2022-08-21T13:05:01+08:002022-08-21T13:05:01+08:00

    备份实用程序btrbk( https://github.com/digint/btrbk ) 也有一个diff(也是一个extents diff)子命令。

    • 1

相关问题

  • 我如何知道 AIX 中磁盘上的文件系统是什么?

  • 控制 UNIX 目录内容用户组所有权

  • 在 Ubuntu 上将 Windows 磁盘分区与 Linux 分区合并

  • 在 VMPlayer 上 Windows 和 Linux 之间共享目录的最佳方式

  • md5sum 重复为同一台机器上的同一文件提供不同的校验和

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve