我在LVM上有一个btrf卷.
现在我想在lvm级别上做一个快照(不是在btrfs级别).
但每次我创建LVM快照时,btrfs都会将挂载的块设备更改为快照,就像我使用某种–bind挂载选项一样.
现在我想在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.在那之后,我可以将克隆设备与原始设备一起安装,我怀疑.