我正在尝试挂载 ZFS zvol 的快照。zvol 上应该有一个 ext2 分区(如 CentOS VM 所示,zvol 当前通过 iSCSI 共享到该 VM):
[root@test-vm ~]# file - < /dev/sdb
/dev/stdin: x86 boot sector; partition 1: ID=0x83, starthead 4, startsector 256, 6291200 sectors, code offset 0xb8
[root@test-vm ~]# file - < /dev/sdb1
/dev/stdin: Linux rev 1.0 ext2 filesystem data (mounted or unclean) (large files)
但是,mount 总是返回Invalid argument
:
[root@freenas] /dev/zvol/vol01# ls
./ zvol01 zvol01@backups1 zvol01@manual-20140521s1 zvol01@manual-20140522s1
../ zvol01@backup zvol01@manual-20140521 zvol01@manual-20140522
[root@freenas] /dev/zvol/vol01# file - < zvol01
/dev/stdin: x86 boot sector; partition 1: ID=0x83, starthead 4, startsector 256, 6291200 sectors, code offset 0xb8
[root@freenas] /dev/zvol/vol01# file - < zvol01@backup
/dev/stdin: x86 boot sector; partition 1: ID=0x83, starthead 4, startsector 256, 6291200 sectors, code offset 0xb8
[root@freenas] /dev/zvol/vol01# file - < zvol01@backups1
/dev/stdin: data
[root@freenas] /dev/zvol/vol01# mkdir /tmp/zvol01
[root@freenas] /dev/zvol/vol01# mount -t ext2fs -r /dev/zvol/vol01/zvol01@backup /tmp/zvol01
mount: /dev/zvol/vol01/zvol01@backup: Invalid argument
[root@freenas] /dev/zvol/vol01# mount -t ext2fs -r /dev/zvol/vol01/zvol01@backups1 /tmp/zvol01
mount: /dev/zvol/vol01/zvol01@backups1: Invalid argument
我认为这zvol01@backups1
是正确的目标(即块设备上的第一个分区zvol01@backup
),无论如何都会返回Invalid argument
。
我在这里遗漏了什么?
编辑
zfs list
根据要求,和的输出zfs get all
......
[root@freenas] ~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vol01 25.6G 358G 232K /mnt/vol01
vol01/.system 1.44M 358G 244K /mnt/vol01/.system
vol01/.system/cores 209K 358G 209K /mnt/vol01/.system/cores
vol01/.system/samba4 506K 358G 506K /mnt/vol01/.system/samba4
vol01/.system/syslog 517K 358G 517K /mnt/vol01/.system/syslog
vol01/ds01 784M 358G 784M /mnt/vol01/ds01
vol01/zvol01 24.9G 382G 113M -
[root@freenas] ~# zfs get all vol01/zvol01
NAME PROPERTY VALUE SOURCE
vol01/zvol01 type volume -
vol01/zvol01 creation Wed May 21 20:29 2014 -
vol01/zvol01 used 24.9G -
vol01/zvol01 available 382G -
vol01/zvol01 referenced 113M -
vol01/zvol01 compressratio 1.00x -
vol01/zvol01 reservation none default
vol01/zvol01 volsize 24G local
vol01/zvol01 volblocksize 4K -
vol01/zvol01 checksum on default
vol01/zvol01 compression lz4 inherited from vol01
vol01/zvol01 readonly off default
vol01/zvol01 copies 1 default
vol01/zvol01 refreservation 24.8G local
vol01/zvol01 primarycache all default
vol01/zvol01 secondarycache all default
vol01/zvol01 usedbysnapshots 215K -
vol01/zvol01 usedbydataset 113M -
vol01/zvol01 usedbychildren 0 -
vol01/zvol01 usedbyrefreservation 24.8G -
vol01/zvol01 logbias latency default
vol01/zvol01 dedup off inherited from vol01
vol01/zvol01 mlslabel -
vol01/zvol01 sync standard default
vol01/zvol01 refcompressratio 1.00x -
vol01/zvol01 written 221K -
vol01/zvol01 logicalused 74.4M -
vol01/zvol01 logicalreferenced 74.3M -
[root@freenas] ~# zfs get all vol01/zvol01@backup
NAME PROPERTY VALUE SOURCE
vol01/zvol01@backup type snapshot -
vol01/zvol01@backup creation Thu May 22 1:48 2014 -
vol01/zvol01@backup used 215K -
vol01/zvol01@backup referenced 113M -
vol01/zvol01@backup compressratio 1.00x -
vol01/zvol01@backup devices on default
vol01/zvol01@backup exec on default
vol01/zvol01@backup setuid on default
vol01/zvol01@backup xattr on default
vol01/zvol01@backup nbmand off default
vol01/zvol01@backup primarycache all default
vol01/zvol01@backup secondarycache all default
vol01/zvol01@backup defer_destroy off -
vol01/zvol01@backup userrefs 0 -
vol01/zvol01@backup mlslabel -
vol01/zvol01@backup refcompressratio 1.00x -
vol01/zvol01@backup written 113M -
vol01/zvol01@backup clones -
vol01/zvol01@backup logicalused 0 -
vol01/zvol01@backup logicalreferenced 74.3M -
[root@freenas] /dev/zvol/vol01# gpart show
=> 63 16777153 da0 MBR (8.0G)
63 1930257 1 freebsd [active] (942M)
1930320 63 - free - (31k)
1930383 1930257 2 freebsd (942M)
3860640 3024 3 freebsd (1.5M)
3863664 41328 4 freebsd (20M)
3904992 12872224 - free - (6.1G)
=> 0 1930257 da0s1 BSD (942M)
0 16 - free - (8.0k)
16 1930241 1 !0 (942M)
=> 34 286749421 da1 GPT (136G)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 282555023 2 freebsd-zfs (134G)
=> 34 286749421 da2 GPT (136G)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 282555023 2 freebsd-zfs (134G)
=> 34 286749421 da3 GPT (136G)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 282555023 2 freebsd-zfs (134G)
=> 34 286749421 da4 GPT (136G)
34 94 - free - (47k)
128 4194304 1 freebsd-swap (2.0G)
4194432 282555023 2 freebsd-zfs (134G)
=> 63 50331585 zvol/vol01/zvol01@backup MBR (24G)
63 193 - free - (96k)
256 6291200 1 linux-data (3G)
6291456 44040192 - free - (21G)
=> 63 50331585 zvol/vol01/zvol01-clone-backup MBR (24G)
63 193 - free - (96k)
256 6291200 1 linux-data (3G)
6291456 44040192 - free - (21G)
编辑#2
在 dmesg 中发现这些:
ext2fs: zvol/vol01/zvol01@backup: wrong magic number 0 (expected 0xef53)
ext2fs: zvol/vol01/zvol01@backups1: wrong magic number 0 (expected 0xef53)
ext2fs: zvol/vol01/zvol01-clone-backup: wrong magic number 0 (expected 0xef53)
ext2fs: zvol/vol01/zvol01-clone-backups1: wrong magic number 0 (expected 0xef53)
在安装块设备之前我还需要对其进行其他操作吗?
答案1
您是否尝试将导出到 Linux VM 的 zvol 安装到基于 FreeBSD 的 FreeNAS?!?
如果是,你需要检查几件事。请发布zfs list
和的输出zfs get all poolname/filesystem
。
首先,zvol 快照的可见性可能未正确设置。这是通过snapdev
ZFS 属性完成的。但这是一个全有或全无的解决方案。如果您有大量 zvol 快照,最好将其禁用。
使用 zvol 快照的另一种方法是克隆文件系统。例如:
zfs clone vol01/zvol01@backups1 vol01/temporaryname
这将基于快照创建一个新的 zvol。将创建一个相应的块设备,您可以使用 ext2fs mount 命令挂载该设备。类似命令fdisk -l
将显示真实的设备名称。
编辑:
我经常在带有 ZFS 的 Linux 中执行此操作。
zfs clone vol0/pprovol@april vol0/april # clone the zvol snapshot to new filesystem
# fdisk -l shows a new block device at /dev/zd16p1
mount -t xfs -o nouuid /dev/zd16p1 /restore # Mount filesystem using new block device
答案2
您应该听一下错误。
您正在尝试安装带有分区表的磁盘作为 ext2 卷。这样不行。
您需要创建一个 geom 设备,该设备使用偏移量为 256 个扇区的 zvol01 并将其挂载到设备中。
至于如何做到这一点……就留给读者去练习吧:)
答案3
此外,在这种情况下,不要忘记查找 zfs contribute。
也许还会在此处的上下文中添加一些好处。
例如。http://www.machine-unix.com/promoting-a-zfs-file-system/
这并不是传统意义上的完整克隆,而是切换快照的方向。
因此 A => A@snapshot => snapshot@clone
xfs 删除 A@snapshot..错误(有一个依赖的克隆)。
zfs 提升快照@克隆...
zfs 删除 A@snapshot..错误(有一个依赖克隆,现在是 A 而不是 snapshot@clone)。
它很有用,因为可以更轻松地在状态之间切换。据我所知,拥有完整、独立的克隆仍然需要某种形式的复制。
(我基本上是对上述 ewwhite 的帖子进行了一些扩展)。
哦,作为参考,我认为制作这种复制的一个例子是例如。
zfs send -R pool/A{,snapshot} | zfs accept pool/B (或者如果你不想重复,就只用 A两个都卷和快照)
我在 Linux 上测试了这个。
答案4
正如 MikeyB 所说,您无法将包含分区的磁盘安装为分区本身。您需要使用允许直接访问磁盘内分区的程序。
我不太熟悉 FreeBSD,但如果是 Linux,我会使用
# kpartx -a /dev/zvol/vol01/zvol01-clone-backup
将卷拆分成多个分区,如下所示 /dev/zvol/vol01/zvol01-clone-backup1
然后您就可以使用该设备进行安装,就像之前尝试的那样。
完成后,执行以下操作:
# kpartx -d /dev/zvol/vol01/zvol01-clone-backup
这样您就回到了标准 zvol。
希望有帮助!