Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了btrfs卷的LVM快照更改已挂载的设备大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我在LVM上有一个btrf卷. 现在我想在lvm级别上做一个快照(不是在btrfs级别). 但每次我创建LVM快照时,btrfs都会将挂载的块设备更改为快照,就像我使用某种–bind挂载选项一样. 情况: # mount | grep libvirt /dev/dm-4 on /var/lib/libvirt/images type btrfs (rw,relatime,space_cachE)
我在LVM上有一个btrf卷.
现在我想在lvm级别上做一个快照(不是在btrfs级别).
但每次我创建LVM快照时,btrfs都会将挂载的块设备更改为快照,就像我使用某种–bind挂载选项一样.

情况:

# mount | grep libvirt
/dev/dm-4 on /var/lib/libvirt/images type btrfs (rw,relatime,space_cachE)
# ls -l /dev/mapper | grep dm-4
lrwxrwxrwx 1 root root       7 Mär 17 01:18 system-vm_disks -> ../dm-4
# lvcreate -s /dev/system/vm_disks -n vm_BACkup -L 32G
  Logical volume "vm_BACkup" created
# mount | grep libvirt
/dev/dm-5 on /var/lib/libvirt/images type btrfs (rw,space_cachE)
# ls -l /dev/mapper | grep dm-5
lrwxrwxrwx 1 root root       7 Mär 17 01:18 system-vm_BACkup -> ../dm-5
# mount /dev/system/vm_BACkup /mnt/test
# touch /mnt/test/touchME
# ls -l /var/lib/libvirt/images/touchME
-rw-r--r-- 1 root root 0 Mär 17 01:26 /var/lib/libvirt/images/touchME

当我删除快照时:

# umount /mnt/test
# lvremove /dev/system/vm_BACkup 
Do you really want to remove active logical volume vm_BACkup? [y/n]: y
  Logical volume "vm_BACkup" successfully removed
# mount | grep libvirt
/dev/dm-4 on /var/lib/libvirt/images type btrfs (rw,space_cachE)
# ls -l /dev/mapper | grep dm-4
lrwxrwxrwx 1 root root       7 Mär 17 01:21 system-vm_disks -> ../dm-4
# ls -l /var/lib/libvirt/images/touchME
-rw-r--r-- 1 root root 0 Mär 17 01:26 /var/lib/libvirt/images/touchME

我希望我的快照是一个真正的快照而不是像–bind mount.
我正在使用LVM快照通过rsync将一致的系统状态备份到我们的备份服务器.
我不想出于各种原因使用btrfs快照:

>我想备份vm_disks LV中的每个子卷和每个btrfs快照(我不知道存在多少和哪些快照/子卷)
>我的备份策略不应该依赖于文件系统.理想情况下,在/ var / lib / libvirt / images中更改文件系统时,不需要更改任何其他内容

我的系统

# uname -a
Linux laPTOP 3.12-1-amd64 #1 SMP Debian 3.12.9-1 (2014-02-01) x86_64 GNU/Linux
# lvm version
  LVM version:     2.02.104(2) (2013-11-13)
  Library version: 1.02.83 (2013-11-13)
  Driver version:  4.26.0
# btrfs --version
Btrfs v3.12

我必须使用至少内核3.9或更新,因为我使用Linux 3.9或更新版本提供的IPv6 NAT功能(是的,我知道你不应该使用NAT与IPv6,但这是另一个故事).

谢谢你的帮助!

编辑:

我使用dd和loop设备做了一些实验.
此行为根本不是LVM特有的.

测试:

# mkfs.btrfs /dev/loop0
[...]
# mount /dev/loop0 original
# touch original/original_file
# ls -l original
-rw-r--r-- 1 root root 0 Mar 28 21:42 original_file
# dd if=/dev/loop0 of=/dev/loop1
509312+0 records in
509312+0 records out
260767744 bytes (261 MB) copied,1.76431 s,148 MB/s
# mount /dev/loop1 clone
# touch clone/expected_clone_file
# ls -l clone
-rw-r--r-- 1 root root 0 Mar 28 21:44 expected_clone_file
-rw-r--r-- 1 root root 0 Mar 28 21:42 original_file
# ls -l original
-rw-r--r-- 1 root root 0 Mar 28 21:44 expected_clone_file
-rw-r--r-- 1 root root 0 Mar 28 21:42 original_file
# umount clone
# umount original
# mount /dev/loop1 clone
# ls -l clone
-rw-r--r-- 1 root root 0 Mar 28 21:42 original_file
# umount clone
# mount /dev/loop0 original
# ls -l original
-rw-r--r-- 1 root root 0 Mar 28 21:44 expected_clone_file
-rw-r--r-- 1 root root 0 Mar 28 21:42 original_file

因此,每当您尝试使用克隆的btrfs文件系统安装新设备时,最终都会使用旧的已安装设备(但mount的输出中没有任何内容正确指示这一点,正如您在上面的LVM实验中所见).
因此,所有请求最终都使用旧设备.
在卸载原始fs之前无法安装克隆的fs(并且在安装克隆的fs时无法安装原始fs).

我现在的问题是:如何将克隆的btrfs的uuid更改为一些新的未使用的uuid.在那之后,我可以将克隆设备与原始设备一起安装,我怀疑.

解决方法

我没有大量看到这个但是btrfs,因为文件系统适用于磁盘组,而不是单个设备.

我怀疑当发生挂载时,btrfs无法区分挂载的快照和真正挂载的文件系统.事实上,可以看到底层子卷的UUID,假设它是原始卷的镜像并同时写入两个卷.

如果能够解决大多数意图和目的btrfs快照取代LVM快照,我会感到惊讶.

大佬总结

以上是大佬教程为你收集整理的btrfs卷的LVM快照更改已挂载的设备全部内容,希望文章能够帮你解决btrfs卷的LVM快照更改已挂载的设备所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。