问题标签 [btrfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
88 浏览

recover - 如何恢复调整大小的 btrfs lvm 分区

我尝试缩小一个btrfs lvm分区为另一个新分区腾出空间。我用过fdisk。我删除并重新创建了 btrfs 分区。令我失望的是,btrfs 分区现在是无类型的。我试过了

0 投票
1 回答
121 浏览

c - 用于在 btrfs 中设置文件和目录时间戳的 API

BTRFS 文件/目录包含时间戳:

  • 创造 (otime)
  • 修改(mtime)
  • 属性修改(ctime)
  • 访问(一次)

是否有一些 API 可以让我为文件设置所有这些时间戳?我用谷歌搜索了一下,但还没有找到任何东西。

编程语言无关紧要,我希望会有一些 C API,但 python 也很好,而且会更好。

0 投票
2 回答
753 浏览

docker - 发送/接收带有快照的子卷 (btrfs)

btrfs 子卷很棒,可以嵌套。Docker 支持 btrfs 并大量使用嵌套快照。

我正在尝试将我的 /var/lib/docker 移动到新驱动器。

程序“应该”是。
1- 制作 /var/lib/docker 的 ro 快照

源和目标都在同一个 fs 上。

2.- 将快照发送到新驱动器

在 docker 文件夹内,有一个 btrfs 文件夹,里面装满了子卷。我希望快照中的文件夹也是子卷,但它们似乎只是普通文件夹。

;TLDR
所以,问题是,如果我拍摄一个子卷的快照,其中嵌套了子卷,它们不应该是快照中的子卷吗?我在这里遇到 btrfs 限制了吗?

0 投票
1 回答
1147 浏览

installation - 尝试安装 manjaro 并在分配磁盘可用空间时遇到问题

我正在尝试在装有 oem windows 10 的笔记本电脑上安装 manjaro,我使用 manjaro 架构师 cli 安装程序来安装。我已经创建了 LVM,分割了逻辑卷,在 LVM 上创建了 luks,将分区格式化为 btrfs 并安装了它。当我下一步开始安装 DE 时,我发现了错误:

然后我输入 df -hT 并看到这个:

行有什么问题?

怎么会这样——使用%100%和Avail 0,但从162G只用了1.1G?

0 投票
1 回答
240 浏览

boost - 使用 Yocto 构建时 boost 和 btrfs-tools 失败

我正在尝试使用带有 ROS 元层(thud-draft)的 Poky 2.6(thud)构建自定义 Linux 映像。该映像是为 x86-64 系统构建的。我的bblayers.conf文件内容如下

构建失败并出现以下错误

bitbake boost单独使用但 btrfs-tools 每次都失败时的 boost 构建。btrfs-tools 的需求是什么,是否可以删除 btrfs-tools 并在没有它的情况下构建映像。

日志文件可以在这里找到: log.do_compile.26496 log.do_compile.27908

0 投票
1 回答
449 浏览

debian - 如何挂载 btrfs 子卷?

findmnt 给了我这个条目:

.apps 文件夹是一个子卷。我创建了一个与 .apps 相同级别的子卷:.mysubvol

为 .mysubvol 创建条目的正确挂载命令是什么?

最好的问候

0 投票
1 回答
72 浏览

python - 在 Btrfs 上获取 Python 中的所有 4 个时间戳

如果我stat对 Btrfs 下的文件执行命令,我会得到如下输出:

如何在 Python 中获得 4 次?

我试过做os.stat(),但是那里不存在出生时间。我在过去的答案中找到了 crtime,但这需要sudo,但stat不需要。

我可以自己解析stat结果,但理想情况下有些东西已经存在。

0 投票
0 回答
213 浏览

c - BTRFS 压缩格式

我正在尝试分析 BTRFS 写入过程的行为。我需要创建一个简单的测试程序,它产生(显然在用户级别)与 BTRFS 模块在物理硬盘上生成的 blob 相同的压缩 blob。

在启用压缩的 BTRFS 文件系统下写入文件的具体步骤是什么?文件是否拆分为文件页/范围?文件页大小如何确定?压缩过程是确定性的吗?文件页大小如何确定?尽管有大量可用空间,但某些文件页不是 128KiB 大(最大容量)。怎么来的?压缩的确切规则是什么?尽管压缩率很高,但某些文件页并未被压缩。怎么来的?

在阅读了一些文档和源代码(linux/fs/btrfs/zlib.c & linux/fs/btrfs/inode.c)并使用小文件(小于 10KiB)测试 FS 后,我的发现(以及更多问题):(纠正我)

*较小的文件被分成 4096 字节的页面以便进一步压缩。压缩的 blob 是连续的。使用 zlib,较小的文件仅保存为 1 blob(以 0x785E 开头)。较大的文件保存为单独的非连续 blob。使用 zlib 将更大的文件保存为多个 0x785E blob。在压缩之前对这些大文件进行碎片化的步骤是什么?片段大小是如何确定的?

*如果文件小于扇区大小(512 字节),则文件保存为原始文件。正确的?

*如果压缩尝试未能节省至少 1x PAGE_SIZE 的空间(即至少 4096 字节),则文件将保存为原始文件并标记为不可压缩。正确的?

编写过程的伪代码会很好。请原谅我对 BTRFS 规范的无知。预先感谢您的帮助。

更新:在做进一步的测试后,我已经可以回答我自己的一些问题了。

更新:我发现了另一种极端情况,其中文件页的大小不是 128KiB。我仍然需要知道压缩过程的确切规则。

更新:我改变了我的问题。回答我之前的问题:

(a) 是的,这些文件通常被分成 128-KiB 大的页面;有些页面较小。一些小文件(我仍然不知道它们的条件——有多小?)被压缩或原始保存到内联范围中。

(b) (我仍然不知道这个问题的答案)通常如果有很多可用空间,文件页的大小为 128-KiB。在某些情况下(非连续可用空间和其他未知条件尚未确定),某些文件页设置为 0x1000 字节(4096 字节)的倍数。

(c) 压缩函数是确定性的。但是,由于不同操作环境中的相同文件的处理方式不同(文件页大小不同,压缩标记不同),因此不同磁盘上相同文件的压缩 blob 在磁盘上彼此不同。如果文件在完全相同的环境中处理,则其压缩的 blob 在磁盘上将是相同的。

主要规则:

该文件将被分成多个 128KiB 页面。(至少对于 zlib)每页要分成 4096 字节的步(每页最多 128 步)。压缩启发式检查(以确保压缩输出小于原始输入)从第 3 步开始,直到页面结束 - 对于前 2 步,不进行任何检查。从压缩循环的第 3 步开始,如果压缩后的输出大于原始输入,则取消当前页面的压缩过程,并将当前页面保存为原始 blob。

成功后,页面将保存为压缩 blob - 在默认 zlib 设置下,blob 以 0x785E 开头。压缩的 blob 在末尾用 0x00 填充。

附带规则:

如果文件小于 512 字节并且存储到内联扩展区中,则文件将被保存为原始文件。

如果压缩文件的大小 + 扇区大小(默认为 512 字节)小于原始文件的大小,则接受压缩输出,否则丢弃压缩输出并将文件标记为不可压缩。

如果文件的可用空间非常稀缺,则将文件划分为不相等的页面 - 某些页面的大小不会为 128KiB。

0 投票
1 回答
152 浏览

snapshot - 如何在 BTRFS 文件系统上以读写和只写方式列出打开的文件?

我正在编写一个 bash 备份脚本,它在已安装的卷(即 /mnt/btrfs/subvolume)上创建 BTRFS 子卷快照。像往常一样,我会使用“lsof /mnt/btrfs/subvolume”并将其输出通过管道传输到“awk 'NR==1 || $4~/[0-9][uw]/'”之类的东西,所以我可以看看是否有任何变化的文件。

这不会以相同的方式在 BTRFS 上工作,并且不会返回打开的文件进行写入。我最好的猜测是 BTRFS 子卷使用“写入时复制”,因此内核/lsof 不知何故被愚弄并且没有显示这些更改。有谁知道,我如何检查是否有任何文件在安装的 BTRFS 子卷下被更改/写入?

问候

0 投票
2 回答
430 浏览

c - 如何在 C/C++ 中获取文件的磁盘地址?

当一个文件被保存到驱动器中时,它的内容被写入然后被索引。我想获取索引并访问文件的原始内容。

关于如何做到这一点的任何想法,尤其是对于 ex4 和 btrfs?

更新:我想获取文件范围的地址。有关地址的信息必须存储在磁盘的某个位置。我想检索此信息,以便映射文件内容的物理位置。有什么方法可以实现吗?

更新:大家好!感谢您的回复。我想要的是一个函数/命令,它返回一个范围地址列表。debugfs 似乎是具有最相关功能的功能/命令。