Freebsd – mounting ZFS zvol snapshot locally gives “Invalid argument”

freebsdmounttruenaszfs

I'm trying to mount a snapshot of a ZFS zvol. The zvol should have a ext2 partition on it (as evidenced by the CentOS VM to which the zvol is currently shared by iSCSI):

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

However, mount always returns 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

I presume that zvol01@backups1 is the correct target (i.e. the first partition under on the block device, zvol01@backup) — both return Invalid argument, regardless.

What am I missing here?

Edit

As requested, the output of zfs list and 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)

Edit #2

Found these in 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)

Is there something else I have to do to the block device before it will mount?

Best Answer

Are you trying to mount a zvol that was exported to a Linux VM to your FreeBSD-based FreeNAS?!?

If so, you need to check a few things. Please post the output of zfs list and zfs get all poolname/filesystem.

For one, the visibility of the zvol's snapshot may not set properly. This is done via the snapdev ZFS property. But that's an all-or-nothing solution. If you have lots of snapshots of zvols, it's best to leave this disabled.

The other approach to use a zvol snapshot is to clone the filesystem. Something like:

zfs clone vol01/zvol01@backups1 vol01/temporaryname 

This will make a new zvol based off of the snapshot. A corresponding block device will be created that you'll be able to mount using ext2fs mount command. Something like fdisk -l will show you the real device names.


Edit:

I do this in Linux with ZFS often.

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
Related Topic