在本地装载ZFS zvol快照会给出“无效参数”

我正在尝试装载ZFS zvol的快照。 zvol应该有一个ext2分区(如当前由iSCSI共享zvol的CentOS VM所certificate的):

[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) 

但是,挂载总是返回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 listzfs get all的输出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中find这些:

 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) 

在安装之前还有其他事情需要处理吗?

您是否试图将导出到Linux VM的zvol安装到基于FreeBSD的FreeNAS上?

如果是这样,你需要检查几件事情。 请张贴zfs listzfs get all poolname/filesystem的输出zfs get all poolname/filesystem

首先,zvol快照的可见性可能设置不正确。 这是通过snapdev ZFS属性完成的。 但这是一个全有或无解的解决scheme。 如果您有很多zvols的快照,最好将其禁用。

另一种使用zvol快照的方法是克隆文件系统。 就像是:

 zfs clone vol01/zvol01@backups1 vol01/temporaryname 

这将基于快照创build新的zvol。 将会创build一个对应的块设备,您可以使用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 

你应该听听这个错误。

你正试图用一个分区表作为ext2卷来挂载一个磁盘 。 这是行不通的。

您需要创build一个geom设备,将具有256个扇区偏移量的zvol01消耗到设备中并加载该设备。

你究竟是怎么做的……作为练习留给读者:)

此外,在这种情况下,不要忘记查找zfs推广。

这里可能还会增加一些好处。

例如。 http://www.machine-unix.com/promoting-a-zfs-file-system/

这不是传统意义上的完整克隆,而是切换人们可以说的快照的方向。

所以A => A @ snapshot => snapshot @ clone

xfs删除@快照..错误(在其上有一个依赖的克隆)。

zfs提升快照@克隆…

zfs删除@快照..错误(有一个相关的克隆,NOW A而不是快照@克隆)。

从某种意义上说,可以更容易地切换状态。 就我所能想到的,拥有一个完整的独立克隆还需要某种forms的拷贝。

(我基本上在ewwhite的post上面扩展了一下)。

噢,作为参考,我认为这样一个副本的例子是例如。

zfs发送-R池/ A {,快照} | zfs接收池/ B(或只是A,如果你不想复制音量和快照),

我在linux上testing了这个。

正如MikeyB所说,你不能将一个包含分区的磁盘作为一个分区来挂载。 您需要使用允许直接访问磁盘中的分区的程序。

我对FreeBSD不太熟悉,但是我会用Linux

# kpartx -a /dev/zvol/vol01/zvol01-clone-backup将vol分割# kpartx -a /dev/zvol/vol01/zvol01-clone-backup ,显示为/dev/zvol/vol01/zvol01-clone-backup1

那么你可以使用该设备来安装,就像你之前尝试的那样。

完成后,请执行:

# kpartx -d /dev/zvol/vol01/zvol01-clone-backup然后回到标准的zvol。

希望有所帮助!