2023年10月

社群里呼声很高的天府之国,它来了!

经历过 6 月北京场7 月上海场9 月深圳场 之后,10 月 29 日(周日),Linux 爱好者沙龙将会在四川成都市高新区菁蓉汇,与 中国开源年会(COSCON)同场举办!

本次活动依然由 Linux 中国和龙蜥社区(OpenAnolis)联合主办,中国开源年会提供场地支持,人民邮电出版社提供了书籍赞助。

龙蜥社区(OpenAnolis)是国内的顶尖 Linux 发行版社区,我们希望在普及 Linux 知识的同时,也能让中国的 Linux 发行版,为更多人知晓,推动国产发行版的发展和进步。

深圳场现场照片

上海场现场照片

本次活动,我们将设常规的技术分享和闪电演讲两种不同分享的形态。

技术分享会邀请来自 Linux 社区的开发者,分享自己在 Linux 中的技术实践,并配合 Q&A 的环节,帮助大家理解技术难点和实践,如果你有经验和实践想要分享给大家,欢迎报名分享

闪电演讲则不设定主题,每个人有 5 分钟时间来分享自己与 Linux、技术、开源有关的话题,共计 6 个闪电演讲名额,想要试试锻炼自己的演讲能力,不妨从闪电演讲开始。

如果你对分享感兴趣,欢迎填写下方问卷来提交你的议题:

https://jinshuju.net/f/VJkeMZ

(题图:MJ/496a4579-23c7-4376-a0f3-194127b5318c)

在这篇初学者教程中,学习在 Arch Linux 中安装 Brave 浏览器。

Firefox 和 Brave 是我日常浏览网页的程序。

当我安装带有 GNOME 的 Arch Linux 时,它有 GNOME Web 浏览器。这是一个不错的浏览器,但我不能接受它,因为我需要保存的密码、浏览历史记录和插件。

因此,我开始安装我最喜欢的网络浏览器,因此本教程是关于在 Arch Linux 中安装 Brave。

如果你安装了 Yay(或任何其他 AUR 帮助程序),那么安装 Brave 就像使用以下命令一样简单:

yay -S brave-bin

是的!就这么简单。让我们详细看看。

? Manjaro 内置了 AUR 支持。你可以使用 Pamac 软件中心或 pamac/pacman 命令在 Manjaro 中安装 Brave。

在 Arch Linux 上安装 Brave 浏览器

Brave 在官方 Arch 仓库中不可用。但是,它可以在 AUR(Arch 用户仓库)中使用,并且可以使用 Yay 等 AUR 帮助程序轻松安装。

如果你没有 Yay 或任何其他 AUR 帮助程序,请逐一使用这些命令来 安装 Yay

sudo pacman -S --needed base-devel git
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

安装 Yay 后,用它来安装 Brave:

yay -S brave-bin

不用担心。它最终会要求你输入密码。

如果这是你第一次安装浏览器,系统可能会要求你选择字体提供方。使用默认选择或选择任何其他选项。

接下来,它会询问你有关清理构建的问题。Yay 询问你是否应该重新下载软件包(和依赖项)并再次构建它或使用早期构建的缓存(如果有)。

你可以按回车键继续操作,这应该意味着不清理构建。

事实上,当你看到默认选项时,你可以继续按回车键。

在实际安装之前,系统会要求你输入帐户密码。输入你的密码并继续该过程。它将下载大小约为 350 MB 的文件:

安装后,在系统菜单中查找 Brave browser 并从那里运行它。

保持 Brave 更新

你可以使用以下命令更新通过 Yay 安装的 AUR 软件包来保持 Brave 浏览器更新:

yay -Sua

从 Arch 中删除 Brave

不喜欢 Brave? 不用担心。你可以轻松将其删除。

与任何其他软件一样,使用 pacman 命令从 Arch 中删除 Brave:

sudo pacman -Rs brave-bin

总结

AUR 再次拯救你! 安装 Brave 变得非常简单。

顺便说一句,我注意到 Brave 不知何故成为打开图像的默认应用。这意味着,双击图像将在新的 Brave 窗口中打开它们。

我必须通过右键单击图像并选择“打开方式”选项再次将图像查看器设置为默认值。

Somehow Brave becomes the default image viewer. You should change it

在接下来的几天里,我将分享更多我的 Arch 经验。敬请关注!

(题图:MJ/46bf8413-5fe1-41aa-b6f3-a5e660efce2b)


via: https://itsfoss.com/install-brave-arch-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

创作者们,Ubuntu Studio 23.10 来了!它包含了你开始创作旅程所需的一切。

Ubuntu 的新版本如同雨后的春笋般持续涌现!☔ 其中一款新版本就是 Ubuntu Studio 23.10,它带来了一些实用的更新和改进。

下面就让我们详细了解一下它。

? Ubuntu Studio 23.10 将会提供九个月的支持,直到 2024 年 7 月

? Ubuntu Studio 23.04: 新增了哪些特性?

对于那些刚接触的朋友,Ubuntu Studio 是针对 内容创作者特制的官方 Ubuntu 发行版

Ubuntu Studio 预装了许多在音频/视频制作、摄影、网络直播、图形设计等多种领域中使用的应用程序。

Ubuntu Studio 的这个版本基于 Ubuntu 23.10 发行版,进行了一些关键性的改进:

  • KDE Plasma 的升级提升
  • 全新壁纸
  • 更新的应用套件
  • Linux 内核升级到 6.5 版本
  • 安装程序中加入的音频配置工具

KDE Plasma 的升级提升

Ubuntu Studio 23.10 带有新的 KDE Plasma 5.27.8 桌面环境,以及新的翻译、各种修复,和三个关键的问题修复:

  • 系统设置搜索栏中移除了软连字符;
  • Powerdevil 默认情况下不会在虚拟机中自动挂起;
  • 提升了在 X11 上运行的 KRunner 启动速度。

你可以通过查阅 发布说明,来了解所有技术性的变动。

Ubuntu Studio 的音频配置

Ubuntu Studio 的安装工具现在包括了一个音频配置向导,让系统级音频设置更为方便。

你可以根据自己的需求,调整音频的延迟和采样率。

这个功能对于使用 Ubuntu Studio 进行音频制作的创作者会特别实用。

全新壁纸

新版本的 Ubuntu Studio 引入了一款新壁纸,名为 “Ubuntu Studio Mantic Minotaur”,其设计习得了 Ubuntu 23.10 默认壁纸 “Mantic Minotaur” 的灵感。

我个人很喜欢它的暗色调设计 ?

更新的应用套件

Ubuntu Studio 23.10 提供了 一系列更新的应用 ,其中一些重要的应用包括:

  • Ardour 7.5.0
  • Blender 3.6.2
  • Inkscape 1.2.2
  • Audacity 3.3.3
  • Darktable 4.2.1
  • Kdenlive 23.08.1
  • OBS Studio 29.1.3

Linux 内核升级至 6.5 版本

所有的这些,全都运行在Linux 内核 6.5之上,让 Ubuntu Studio 23.10 能够支持如 USB4/Wi-Fi 7 的初始支持AMD 的各种优化等。

?️ 其他的改进

此外,还有一些你应该了解的改变:

  • 由于引入了 0.3.79 版本,提升了 PipeWire 的性能。
  • Ubuntu Studio 的安装程序已去掉了 Backports PPA 的选项。
  • 将 Carla 升级到了 2.5.6版。

你可以访问 官方发布说明 以了解关于升级和技术变动的更多细节。

? 下载 Ubuntu Studio 23.10

你可以在 官方网站 或者 Ubuntu 的 镜像仓库 中下载到最新的Ubuntu Studio版本。

Ubuntu Studio 23.10

? 你以前用过 Ubuntu Studio 吗?你的使用体验如何?

(题图:Ubuntu


via: https://news.itsfoss.com/ubuntu-studio-23-10/

作者:Sourav Rudra 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

只有约 11% 的开源项目得到了积极维护

Sonatype 的《年度软件供应链分析报告》发现,开源项目的维护率在下降。在对 117 万个开源项目进行了评估后,报告显示今年仅有 11% 的项目在积极维护,比去年下降了 18%。调查主要涉及四个生态系统:通过 NPM 维护的 JavaScript、通过 Maven 维护的 Java、通过 PyPI 维护的 Python 和通过 NuGet 维护的 .NET,此外还包括一些 Go 项目。此外,报告还发现,67% 的受访者表示,他们不认为自己的应用程序依赖于已知的漏洞库;39% 的组织在一到七天内发现漏洞;39% 的企业需要一周以上的时间来缓解漏洞;每 8 次开放源代码下载中就有 1 次存在已知风险,但 96% 的漏洞下载版本都有可用的修复版本。

消息来源:Info World
老王点评:开源项目就像野草,随时生,随时长,随时枯荣。

谷歌人工智能 “绿灯计划” 加速交通、降低油耗和碳排放

谷歌的 “绿灯计划”通过对地图数据的机器学习来优化绿灯时间,减少车辆的空转时间以及刹车和加速次数。谷歌 2021 年首次在四个十字路口进行了试点测试,测试中观察到燃料和十字路口延迟时间减少了 10% 到 20%。谷歌称,“早期的数据显示,我们有可能减少 30% 的停车位,……在曼彻斯特测试的排放水平和空气质量提高了 18%,……帮助减少了 240 多万吨碳排放,相当于一整年减少了约 50 万辆燃油汽车”。

消息来源:Engadget
老王点评:这就是智慧交通该做的事情,随着车机联网普及,会有更智能的交通管理。

微软计划放弃使用 NTLM 验证方式

20 多年来,各种版本的 Windows 一直使用 Kerberos 作为主要的身份验证协议。不过,在某些情况下,操作系统必须使用另一种方法,即 NTLM(NT LAN 管理器)。NTLM 的优点是因为它不需要本地网络连接到域控制器,它也是使用本地账户时唯一受支持的协议。这些优点导致一些应用程序和服务硬编码使用 NTLM。但 Kerberos 提供了更好的安全保证,而且可扩展性更强,这也是它现在成为 Windows 首选默认协议的原因。今天,微软宣布将扩大 Kerberos 的使用范围,并计划最终完全放弃使用 NTLM,微软将其称为 “Windows 身份验证的进化”。

消息来源:Neo Win
老王点评:NTLM 也不够 NT 了。

Ardour 8.0 这个重大升级为我们带来了对新硬件的支持,完善的自动化创建流程等。

Ardour 作为最好的 Linux 数字音频工作站(DAW) 之一,允许音频专业人士进行包括创建、录音、混音音乐和其他各类音频的各种工作。

这一次,我们迎来了这款 DAW 的重大升级。 Ardour 8.0 的发布距离它的 7.0 发布 近一年,不过这还是它发展历程中的一次显著进步。

下面就让我们来详细探讨一下它都带来了哪些新的变化。

? Ardour 8.0: 有哪些新功能?

Ardour 8.0 版本承诺提供丰富的新特性以及大量的修复。

而且,开发者在此次发布时也特别强调,Ardour 的会话文件格式没有发生改变,这就意味着,所有在之前 7.x 版本的 Ardour 创建的会话在加载时都不会出现问题。

以下是一些主要亮点:

  • 支持 Novation Launchpad Pro
  • MIDI 音轨头部进行了全新设计
  • MIDI 动力性的提高
  • 支持区域分组功能
  • macOS 的公证服务

支持 Novation Launchpad Pro

Ardour 8.0 版本的增加了对 Novation 公司发售的 Launchpad Pro 的支持,它是一款电子乐器,包括一个 8×8 格的 RGB,可以检测力度的触摸垫,可以完成各种各样的任务。

对于 Ardour 来说,它可以用于 触发音频切片和线索控制音频增益水平操作声音平移 甚至 设置音轨/总线的水平

MIDI 音轨头部全新设计

全新设计的 MIDI 音轨头 带来了一些引人注目的变化,最值得注意的包括:

  • 八度音符如 C3、C4 将会永久显示。
  • 可以通过钢琴卷动键来记录 MIDI。
  • 滚动+缩放 scroomer 功能的直观设计。
  • 滚动+缩放 scroomer 功能中可以显示音符名称,可以使用 MIDNAM 数据,泛用音符编号或 12TET 名。

MIDI 动力学的改进

在一直以来的用户需求驱动下,Ardour 的开发者终于新增了一款 传统的 动力棒棒糖 velocity lollipop 界面

这个界面由带有顶部圆点的垂直横条组成,可以用这个横条调节音符力度。我建议你可以在上面的视频中了解更多关于这个在 Ardour 8.0 版本中实施的一项功能。

支持区域分组功能

这也是用户长期以来的一项需求。区域分组 提供了一个选取多个 区域 并将它们组合成一个单一元素的功能。

这个功能可以赋予你将多个元素整合移动/剪辑的能力,减少对每个元素重复操作的需要。

macOS 验证

当你在苹果电脑上安装第三方软件时,计算机会警告你该软件可能会对你的系统产生损害或含有恶意软件,当然,对于用户而言,这可能是一个糟糕的用户体验,他们可能不会尝试运行它。

为了改善用户体验,Ardour 决定参加并支付一个苹果开发者账户以使用它的验证系统 Notarization

因此,下次当你在 macOS 上安装 Ardour 时,你会看到软件已经被苹果检查/验证没有携带恶意软件,这会让用户对 Ardour 有更多的信心。

?️ 其它的改变

最后,以下还有一些其他带来的改变:

  • 支持自由手绘自动化曲线。
  • 新增了三个新的 MIDI 算法插件。
  • 集成有序排列组成特性的专专用标尺。
  • BBT 标记提供了多项提升。

你也可以查看 官方发布说明 来更多地了解这次发布的信息。

? 下载 Ardour 8.0

由于 Ardour 是一个跨平台的应用程序,你可以在它的 官方网站 上找到适用于 LinuxWindowsmacOS 的软件包。

Ardour

如果你对源代码感兴趣,你也可以查看它的 GitHub 仓库


via: https://news.itsfoss.com/ardour-8-0-release/

作者:Sourav Rudra 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这篇文章会探讨什么是 Btrfs 快照,它们如何工作的,你在日常生活中进行快照的好处。这篇文章是《Btrfs 详解》系列文章中的一篇。从 Fedora Linux 33 开始,Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默认文件系统。

如果你错过了,这里是本系列的上一篇文章:Btrfs 详解:子卷

简介

想象一下,你长时间处理一个文件,反复添加和撤销修改。然后,在某个时刻你意识到:两小时前你撤销的部分修改,现在会非常有用。而昨天在你销毁那个设计之前,你也已经修改了这个特殊的部分。当然,由于你会定期保存文件,所以旧的改动会丢失。很多人可能都遇到过这样的情况。如果能恢复旧版本的文件,而无需定期手动复制,岂不美哉?

这是一个 Btrfs 快照可以帮助你的特别场景。当你使用正确的话,快照同时也为你的电脑提供了很好的备份方案。

下面你会找到一些关于快照的例子。如果你想跟着操作,你必须拥有访问某些 Btrfs 文件系统的权限和 root 权限。你可以通过下面命令来验证一个目录的文件系统。

$ findmnt -no FSTYPE /home
btrfs

这个命令会输出你 /home/ 目录的文件系统名称。如果它是 btrfs,那就可以了。让我们创建一个新的目录去做实验:

$ mkdir ~/btrfs-snapshot-test
$ cd ~/btrfs-snapshot-test

在下面的文本中,你会看到很多像上面显示的那样的命令输出框。请在阅读/比较命令输出时请记住,框中的内容在行末会被换行。这使得识别跨多行的长行变得困难,降低了可读性。如果有疑问,试着调整浏览器窗口的大小,看看文本的变化!

Btrfs 快照

让我们从一个基本的问题开始:什么是 Btrfs 快照?如果你在文档 [1] 和维基 [2] 中查找,你不会立刻找到这个问题的答案。事实上,从“功能”一节里是找不到的。如果你搜索一下,你会发现快照和 Btrfs 子卷一起被大量地提及 [3] 。所以现在做什么呢?

还记得快照在系列前面的文章里两次被提到吗?是这样说的:

CoW 的优势在哪里?简单的说:文件被修改和编辑的历史被保存了下来。Btrfs 保存文件旧版本的引用(inode)可以轻易地被访问。这个引用就是快照:文件系统在某个时间点的状态镜像。这将是这系列文章里的单独的一篇,所以暂时留到后面介绍。

—— Btrfs 详解:基础概念

以及:

另外一个分离 //home 的优势是我们可以分别进行 快照 。子卷是快照的边界,对一个子卷的快照永远不会包含该子卷下面的其他子卷的内容。快照的更多细节会在后续的文章中介绍。

—— Btrfs 详解:子卷

看起来快照是和 Btrfs 子卷相关的。你可能之前在其他地方听到过快照,比如说 LVM(逻辑卷管理器)。虽然技术角度上它们都是为了同一个目的,但它们在实现方面有所不同。

每个 Btrfs 快照是一个子卷。但是,不是每个子卷都是一份快照。区别在于子卷里面包含的内容。一个快照是子卷加上一些内容:它包含对现在和过去版本的文件的引用(inode)。让我们看看快照是从哪来的!

创建 Btrfs 快照

想使用快照功能,你需要一个 Btrfs 子卷来进行快照。让我们在测试目录(~/btrfs-snapshot-test)里创建一个:

$ cd ~/btrfs-snapshot-test
$ sudo btrfs subvolume create demo
Create subvolume './demo'
$ sudo chown -R $(id -u):$(id -g) demo/
$ cd demo

因为 Btrfs 子卷默认是被 root 所有的,你必须用 chown 去修改子卷里的文件的所有权到普通用户上。现在我们在里面新加一些文件:

$ touch foo bar baz
$ echo "Lorem ipsum dolor sit amet, " > foo

你的目录现在看起来像这样:

$ ls -l
total 4
-rw-r--r--. 1 hartan hartan  0 Dec 20 08:11 bar
-rw-r--r--. 1 hartan hartan  0 Dec 20 08:11 baz
-rw-r--r--. 1 hartan hartan 29 Dec 20 08:11 foo

让我们从这里创建第一次快照:

$ cd ..
$ sudo btrfs subvolume snapshot demo demo-1
Create a snapshot of 'demo' in './demo-1'

这就好了。让我们看看发生了什么:

$ ls -l
total 0
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo-1
$ tree
.
├── demo
│   ├── bar
│   ├── baz
│   └── foo
└── demo-1
    ├── bar
    ├── baz
    └── foo

2 directories, 6 files

这看起来是一份拷贝!为了验证,我们从快照里读取 foo 的内容:

$ cat demo/foo
Lorem ipsum dolor sit amet,
$ cat demo-1/foo
Lorem ipsum dolor sit amet,

当我们修改原始文件时,真正的效果变得明显:

$ echo "consectetur adipiscing elit, " >> demo/foo
$ cat demo/foo
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
$ cat demo-1/foo
Lorem ipsum dolor sit amet,

这表明快照仍然持有“旧”版本的数据:foo 的内容没有改变。到目前为止,你可以通过一个简单的文件复制来实现完全相同的目标。现在你也可以继续处理旧文件了。

$ echo "sed do eiusmod tempor incididunt" >> demo-1/foo
$ cat demo-1/foo
Lorem ipsum dolor sit amet,
sed do eiusmod tempor incididunt

但是在底层,我们的快照实际上是一个新的 Btrfs 子卷。你可以通过下面的命令来验证这一点:

$ sudo btrfs subvolume list -o .
ID 259 gen 265 top level 256 path home/hartan/btrfs-snapshot-test/demo
ID 260 gen 264 top level 256 path home/hartan/btrfs-snapshot-test/demo-1

Btrfs 子卷 vs. 文件复制

这一切有什么意义呢?到目前为止快照看起来是一个更加复杂的复制文件的方式。事实上,快照不仅仅是表面上看起来那么简单。让我们来创建一个更大的文件:

$ dd if=/dev/urandom of=demo/bigfile bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.3454 s, 399 MB/s

现在有一个512 MB 大小的新文件 demo/bigfile 。让我们创建另一个快照,这样在你修改数据的时候就不会丢失:

$ sudo btrfs subvolume snapshot demo demo-2
Create a snapshot of 'demo' in './demo-2'

现在我们通过追加少量字符串到文件来模拟变化:

$ echo "small changes" >> demo/bigfile

这是生效后的文件结构:

$ tree
.
├── demo
│   ├── bar
│   ├── baz
│   ├── bigfile
│   └── foo
├── demo-1
│   ├── bar
│   ├── baz
│   └── foo
└── demo-2
    ├── bar
    ├── baz
    ├── bigfile
    └── foo

3 directories, 11 files

但是真正的神奇的发生在其他地方。你已经复制了 demo/bigfile ,你现在拥有了两个大约 512 MiB 的文件。但是,因为它们是不同的拷贝,它们应该会占据共 1 GiB 的空间。记住两个文件的差异不超过 10 字节 —— 和原文件大小相比这几乎没什么差别。

Btrfs 快照工作原理与文件复制不同:而是它们保持对当前和过去的 inode 的引用。当你在文件追加更新时,在底层 Btrfs 分配更多的空间去存储更新,同时在原来的 inode 增加对新数据的引用。之前的内容保持不变。为了便于理解,你可以认为这是仅仅“存储”原文件和修改版本的差异。

让我们看看这个效果:

$ sudo compsize .
Processed 11 files, 5 regular extents (9 refs), 3 inline.
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL      100%      512M         512M         1.0G
none       100%      512M         512M         1.0G

这个有趣的数字出现在 TOTAL 一行:

  • Referenced 是当前目录下所有文件大小的总和
  • Disk Usage 是用于在磁盘上存储文件分配空间的大小

你有一共 1 GiB 的文件,但存储它们仅仅占据了 512 MiB。

Btrfs 快照和备份

目前为止,在这篇文章中,你已经看到如何创建 Btrfs 快照和它们的特别之处。有人可能会想:如果我在我的 PC 本地进行一系列的快照,我就有一个可靠的备份策略。 其实不是这样的 。如果 Btrfs 子卷共享的底层数据被偶然破坏了(被 Btrfs 之外的东西影响,比如宇宙射线),所有指向这些数据的子卷都会存在相同的错误。

为了让快照成为真正的备份,你应该将它们存储到一个不同的 Btrfs 系统上,例如在一个外部驱动器上。为了本文的目的,让我们在一个文件里创建一个新的 Btrfs 系统,并挂载它来模拟一个外部驱动。如果你有一个格式为 Btrfs 的外部驱动器,请随意替换以下命令中提到的所有路径来试试!让我们创建一个新的 Btrfs 文件系统:

注意:下面的命令会在你的文件系统上创建一个 8 GB 大小的新文件。如果你想跟着下面的步骤,请确保你的磁盘空间至少有 8 GB 剩余。请不要分配小于 8 GB 到这个文件,否则 Btrfs 可能在挂载时会遇到问题。

$ truncate -s 8G btrfs_filesystem.img
$ sudo mkfs.btrfs -L "backup-drive" btrfs_filesystem.img
btrfs-progs v5.18
See http://btrfs.wiki.kernel.org for more information.

[ ... ]

Devices:
    ID        SIZE  PATH
    1     8.00GiB  btrfs_filesystem.img

这些命令创建了名为 btrfs_filesystem.img 的 8 GB 新文件,同时在上面格式化了一个 Btrfs 文件系统。现在你可以像外部驱动器一样挂载它:

$ mkdir backup-drive
$ sudo mount btrfs_filesystem.img backup-drive
$ sudo chown -R $(id -u):$(id -g) backup-drive
$ ls -lh
total 4.7M
drwxr-xr-x. 1 hartan hartan    0 Dec 20 08:35 backup-drive
-rw-r--r--. 1 hartan hartan 8.0G Dec 20 08:37 btrfs_filesystem.img
drwxr-xr-x. 1 hartan hartan   32 Dec 20 08:14 demo
drwxr-xr-x. 1 hartan hartan   18 Dec 20 08:11 demo-1
drwxr-xr-x. 1 hartan hartan   32 Dec 20 08:14 demo-2

妙,现在挂载在 backup-drive 下面有一个独立的 Btrfs 文件系统!让我们尝试进行快照并且把快照放进去:

$ sudo btrfs subvolume snapshot demo backup-drive/demo-3
Create a snapshot of 'demo' in 'backup-drive/demo-3'
ERROR: cannot snapshot 'demo': Invalid cross-device link

发生了什么?噢,你尝试对 demo 进行一次快照并把它存在不同的 Btrfs 文件系统里(从 Btrfs 视角来看是一个不同的设备)。还记得一个 Btrfs 子卷仅持有对文件和内容的引用(inode)?这正是问题所在:文件和内容存在于我们的 home 文件系统,但不在新创建的 backup-drive 。你得找到一种方式去传输子卷和其内容到新的文件系统里。

在不同的 Btrfs 文件系统存储快照

针对这个目的 Btrfs 工具有两个特殊的命令。让我们首先来看看它们是如何工作的:

$ sudo btrfs send demo | sudo btrfs receive backup-drive/
ERROR: subvolume /home/hartan/btrfs-snapshot-test/demo is not read-only
ERROR: empty stream is not considered valid

另一个错误!这时它告诉你我们想要传输的子卷不是只读的。这是对的:你可以写入新内容到所有目前为止创建的快照/子卷。你可以像这样创建一个只读的快照:

$ sudo btrfs subvolume snapshot -r demo demo-3-ro
Create a readonly snapshot of 'demo' in './demo-3-ro'

不像之前那样,这里 -r 选项被加到了 snapshot 子命令里。这创建一个只读的快照,这很容易去验证:

$ touch demo-3-ro/another-file
touch: cannot touch 'demo-3-ro/another-file': Read-only file system

现在你可以重新尝试传输子卷:

$ sudo btrfs send demo-3-ro | sudo btrfs receive backup-drive/
At subvol demo-3-ro
At subvol demo-3-ro
$ tree

├── backup-drive
│   └── demo-3-ro
│       ├── bar
│       ├── baz
│       ├── bigfile
│       └── foo
├── btrfs_filesystem.img
├── demo
[ ... ]
└── demo-3-ro
    ├── bar
    ├── baz
    ├── bigfile
    └── foo

6 directories, 20 files

成功了!你成功传输原来子卷 demo 的一个只读快照到一个外部的 Btrfs 文件系统。

在非 Btrfs 文件系统存储快照

上面你已经看到你如何能存储 Btrfs 子卷/快照到其他的 Btrfs 文件系统。但如果你没有其他的 Btrfs 文件系统并且不能新创建一个,比如说外部驱动器需要一个和 Windows 或 MacOS 兼容的文件系统,你可以做什么呢?在这种情况下你可以存储子卷在文件里:

$ sudo btrfs send -f demo-3-ro-subvolume.btrfs demo-3-ro
At subvol demo-3-ro
$ ls -lh demo-3-ro-subvolume.btrfs
-rw-------. 1 root root 513M Dec 21 10:39 demo-3-ro-subvolume.btrfs

文件 demo-3-ro-subvolume.btrfs 现在包含了随后重建 demo-3-ro 子卷需要的所有东西。

增量地发送快照

如果你对不同的子卷重复执行这个操作,你会发现在某些时间点不同的子卷不再共享它们的文件内容。这是因为像上面一样发送一个子卷,去重建这个单独的子卷的所有数据将被传送到目标位置。但是,你可以引导 Btrfs 只向目标位置发送不同子卷的差异!所谓的增量发送将保证共享的引用在子卷中仍然共享。为了展示这一点,新增一些变动到我们原来的子卷:

$ echo "a few more changes" >> demo/bigfile

然后创建另一个只读子卷:

$ sudo btrfs subvolume snapshot -r demo demo-4-ro
Create a readonly snapshot of 'demo' in './demo-4-ro'

然后现在发送它:

$ sudo btrfs send -p demo-3-ro demo-4-ro | sudo btrfs receive backup-drive
At subvol demo-4-ro
At snapshot demo-4-ro

在上面的命令,-p 选项指定了一个父子卷用来计算差异。重要的是记住原 Btrfs 文件系统和目标 Btrfs 文件系统都必须包含相同的、未被修改过的父子卷!确保新的子卷真的在那里:

$ ls backup-drive/
demo-3-ro  demo-4-ro
$ ls -lR backup-drive/demo-4-ro/
backup-drive/demo-4-ro/:
total 524296
-rw-r--r--. 1 hartan hartan         0 Dec 20 08:11 bar
-rw-r--r--. 1 hartan hartan         0 Dec 20 08:11 baz
-rw-r--r--. 1 hartan hartan 536870945 Dec 21 10:49 bigfile
-rw-r--r--. 1 hartan hartan        59 Dec 20 08:13 foo

但你怎样知道增量发送只传输了子卷间的差异呢?让我们传输数据流到一个文件里然后看看它有多大:

$ sudo btrfs send -f demo-4-ro-diff.btrfs -p demo-3-ro demo-4-ro
At subvol demo-4-ro
$ ls -l demo-4-ro-diff.btrfs
-rw-------. 1 root root 315 Dec 21 10:55 demo-4-ro-diff.btrfs

根据 ls ,这个文件仅仅只有 315 字节大小!这意味着增量传输只传输子卷间的差异,和额外的 Btrfs 相关的元数据。

从快照中恢复子卷

在继续之前,让我们清理掉这时候不再需要的东西:

$ sudo rm -rf demo-4-ro-diff.btrfs demo-3-ro-subvolume.btrfs
$ sudo btrfs subvolume delete demo-1 demo-2 demo-3-ro demo-4-ro
$ ls -l
total 531516
drwxr-xr-x. 1 hartan hartan         36 Dec 21 10:50 backup-drive
-rw-r--r--. 1 hartan hartan 8589934592 Dec 21 10:51 btrfs_filesystem.img
drwxr-xr-x. 1 hartan hartan         32 Dec 20 08:14 demo

到目前为止你已经成功创建了可读/写和只读的 Btrfs 子卷快照,并把它们发送到外部。但是,为了把这作为备份策略,还要有一种方式去发送子卷回原来的文件系统和让它们再次变为可写。出于这个目的,我们移动 demo 子卷到其他地方并且尝试从最近的快照中重建它。第一步:重命名为 broken 子卷。一旦恢复成功它会被删除:

$ mv demo demo-broken

第二步: 传回最近的快照到这个文件系统:

$ sudo btrfs send backup-drive/demo-4-ro | sudo btrfs receive .
At subvol backup-drive/demo-4-ro
At subvol demo-4-ro
[hartan@fedora btrfs-snapshot-test]$ ls
backup-drive  btrfs_filesystem.img  demo-4-ro  demo-broken

第三步: 从快照创建一个可读写的子卷:

$ sudo btrfs subvolume snapshot demo-4-ro demo
Create a snapshot of 'demo-4-ro' in './demo'
$ ls
backup-drive  btrfs_filesystem.img  demo  demo-4-ro  demo-broken

上一步非常重要:你不能重命名 demo-4-rodemo ,因为这仍然是一个只读子卷!最后你可以检查你所有你想要的东西是不是在那里:

$ tree demo
demo
├── bar
├── baz
├── bigfile
└── foo

0 directories, 4 files
$ tail -c -19 demo/bigfile
a few more changes

最后的命令告诉你 bigfile 的最后 19 个字符实际上是上次变更执行的结果。这个时候,你可能想从 demo-broken 复制最近的更新到新的 demo 子卷。因为你没有执行任何更新,你可以过时的子卷:

$ sudo btrfs subvolume delete demo-4-ro demo-broken
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-4-ro'
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-broken'

就是这样!你成功从一个之前存在不同 Btrfs 文件系统(外部介质)的快照中恢复 demo 子卷。

子卷作为快照的边界

在本系列的第二篇文章中我提到子卷作为快照的边界,但这到底是什么意思呢?简单来说,子卷的一份快照仅包含这个子卷的内容,而不是下面嵌套的子卷。让我们来看看这个:

$ sudo btrfs subvolume create demo/nested
Create subvolume 'demo/nested'
$ sudo chown -R $(id -u):$(id -g) demo/nested
$ touch demo/nested/another_file

让我们像以前一样进行一次快照:

$ sudo btrfs subvolume snapshot demo demo-nested
Create a snapshot of 'demo' in './demo-nested'

然后查看里面的内容:

$ tree demo-nested
demo-nested
├── bar
├── baz
├── bigfile
├── foo
└── nested

1 directory, 4 files

$ tree demo
demo
├── bar
├── baz
├── bigfile
├── foo
└── nested
    └── another_file

1 directory, 5 files

注意到 another_file 不见了,仅仅是目录 nested 还在。这是因为 nested 是一个子卷:demo 的快照包含嵌套子卷的目录(挂载点),但里面的内容是缺失的。目前没有方法递归地执行快照去包含嵌套子卷。但是,我们可以利用这个优势去从快照中排除一些目录!这通常对那些你容易再现的数据有用,或者它们很少变化。例子有虚拟机或者容器镜像,电影,游戏文件等等。

在总结之前,我们移除所有测试过程中创建的东西:

$ sudo btrfs subvolume delete demo/nested demo demo-nested
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo/nested'
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo'
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-nested'
$ sudo umount backup-drive
$ cd ..
$ rm -rf btrfs-snapshot-test/

基于 Btrfs 备份最后思考

如果你决定使用 Btrfs 来执行数据的定期备份,那么你可能需要使用一个工具来自动完成这项任务。Btrfs 维基有一个专门针对 Btrfs [4] 的备份工具列表。在那里,你还将看到另一个手动执行 Btrfs 备份步骤的摘要。就我个人而言,我对 btrbk [5] 有很多很好的体验,我正在使用它来执行我自己的备份。除了备份之外,btrbk 还可以在你的 PC 本地保存 Btrfs 快照列表。我使用它来防止意外的数据删除。

如果你想要了解更多有关使用 Btrfs 进行备份的内容,欢迎在下面评论,我会考虑写一篇专门讨论这个话题的后续文章。

总结

本文研究了 Btrfs 快照,它们本质上是 Btrfs 子卷。你了解了如何创建可读写和只读快照,以及这种机制如何有助于防止数据丢失。

本系列的后续文章将讨论:

  • 压缩 - 透明地节省存储空间
  • 配额组 - 限制文件系统大小
  • RAID - 替代 mdadm 配置

如果你还想了解与 Btrfs 相关的其他主题,请查看 Btrfs 维基 [2:1] 和文档 [1:1] 。不要忘记查看本系列的前两篇文章!如果你认为本文缺少了一些内容,请在下面的评论中告诉我们。再会!

参考资料

  1. https://btrfs.readthedocs.io/en/latest/Introduction.html ↩︎ ↩︎
  2. https://btrfs.wiki.kernel.org/index.php/Main_Page ↩︎ ↩︎
  3. https://btrfs.readthedocs.io/en/latest/Subvolumes.html ↩︎
  4. https://btrfs.wiki.kernel.org/index.php/Incremental_Backup#Available_Backup_Tools ↩︎
  5. https://github.com/digint/btrbk ↩︎

(题图:MJ/ad8a61ed-ce6f-409e-b503-69104dd71149)


via: https://fedoramagazine.org/working-with-btrfs-snapshots/

作者:Andreas Hartmann 选题:lujun9972 译者:A2ureStone 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出