是否可以逐字备份一个 btrfs 分区(包括所有通过将快照树标记为 COW 来节省空间的共享结构)到另一个分区?例如,我想备份我的根分区,它有几个 btrfs 子卷(/ 本身的快照)。
我能想到的唯一方法是使用块复制工具,dd
但效率低下,因为我的分区只有 20% 已满,我打算定期备份它。我已经使用 增量备份所有内容rsync
,因此这不是另一个问题的解决方法。我只需要一点点克隆我的 btrfs 分区,而不必使用诸如dd
.
例如,我知道 ext3 提供了转储和恢复实用程序。这就是我正在寻找的东西。
更新
这是一个更新,以澄清这样一个事实,即我希望能够像访问实时磁盘一样访问备份存储上的文件(即我不想将转储文件存储在备份存储上)。
让我首先为您提供我的设置的详细信息:
我在 x86_64 架构上运行 Fedora 13。我已经使用 sshfs 挂载了一个远程目录:
jim@localsite $ sshfs jim@remotesite:/home/jim /home/jim/remotemount
Run Code Online (Sandbox Code Playgroud)
现在如果 su 到 root 并尝试读取挂载点下的内容,我得到:
root@localsite $ ls -l /home/jim/remotemount
ls: cannot access remotemount: Permission denied
root@localsite $ ls -l /home/jim
total 0
drwxrwx---. 1 jim jim 90 Oct 1 12:00 bin
drwxrwx---. 1 jim jim 90 Oct 1 12:00 dev
d?????????? ? ? ? ? ? remotemount
drwxrwx---. 1 jim jim 90 Oct 1 12:00 tmp
Run Code Online (Sandbox Code Playgroud)
看到 root 无法访问 remotemount 目录是很奇怪的。这是预期的行为吗?如果是这样,为什么?如果没有,任何有关如何修复它的线索都会有所帮助。谢谢。
在 Fedora 13 发行版中,如何找到软件包所属的安装组?例如,我想知道inkscape 包属于哪个安装组。
使用:
yum info inkscape
Run Code Online (Sandbox Code Playgroud)
不显示组信息。
我知道如何使用列出所有组并随后列出每个组的所有包的脚本来执行此操作,并从中提取出感兴趣的包。我想知道是否可以使用现有工具以更简单的方式执行此操作。
这是最近的 linux 内核的假设设置:
/dev/sda1 is formatted as btrfs
Run Code Online (Sandbox Code Playgroud)
然后我运行以下命令在 /dev/sda1 的根目录上创建两个子卷:
$ mount /dev/sda1 /mnt
$ btrfs subvolume create /mnt/a
$ btrfs subvolume create /mnt/b
$ umount /mnt
Run Code Online (Sandbox Code Playgroud)
现在我希望在两个不同的挂载点上同时挂载这两个子卷:
$ mount -o subvol=a /dev/sda1 /a
$ mount -o subvol=b /dev/sda1 /b
Run Code Online (Sandbox Code Playgroud)
这就是问题所在。我用一个文件作为块设备(使用循环)尝试了这个,它工作正常(至少对于每个文件中的两个文件)。但是,在安装了一个完整的系统后,将根目录放在一个子卷中,将主目录放在另一个子卷中,在启动时都挂载,我收到一个错误,告诉我底层设备是“写保护的”,并且第一次尝试读取主目录目录内容导致内核崩溃。
我想知道我想要做什么(使用不同的挂载选项多次挂载一个块设备)实际上是否被 btrfs 或 os.