On Linux, we must use 'kpartx' after partitioning the raw disk file
to create a loop device with partitions (partitioning a raw disk file
does not create the parition files/devices).
+ In Linux, the 'disk part' is called a 'partition' and is labeled
  with a '<device>p<nr>' instead of '<device>s<nr>' (slice).
+ Overwrite some variables defined in the config file.
+  Cleanup (reorder/'prettify') the definition of the META_* variables.
+ In Linux we create a ext2 filesystem by default, not ufs.
* Some tests works on Linux but fail on BSD. Use log_{must,mustnot} appropriately.
* Replace a == with a != to verify a failure.
Since Linux don't have 'coreadm', we use the procedure used on Linux instead.
+ This means using the /proc filesystem and ulimit.
* In setup_snap_env(), support 'newfs' on Linux (really mke2fs) which behave a little different
* In cleanup_env(), look for any mounted zvols - !!!NEEDS BSD VERIFICATION!!!
The Linux equivalence of 'mount -F zfs' is 'mount -t zfs'.
+ The 'dev' ('devices') option never show up in a mount list
  Test this by trying to create a 'zero' device.
unshare doesn't exist on Linux, instead exportfs is used. But it have
quite different usage. And can't run as normal user...
Remove leading slash to disk images in TESTDIR (ended up with double
which made the test fail).
The expected return value from 'mmap_exec' on Linux is 22, not 13.
Change hardcoded '/dev/{dsk,rdsk' to variable 'DEV_{DSK,RDSK}DIR'.
Linux does not separate them and puts everything in '/dev'.
In Linux, we need to add the '-d $TEST_BASE_DIR' to 'zpool import' for it to find the raw disk files.
sleep 1 - On Linux, we need to add a 'sleep 1'
+ between creating a ZVOL and accessing it to make sure udevd have had time to create the device node.
+ just before destroying a pool in the loop.
  This so the system have time to keep up - othervise, we get a "device is busy" from umount2.
  (Because Linux doesn't honor the force - can't force unmount something that is in use).
Use /usr/bin/env to load bash, instead of hardcoding the hash-bang to /usr/bin/bash.
!!! SCRIPTS STILL NEEDS TO BE PORTED !!!
'mount -p' doesn't exist on Linux. Just remove the option.
Add '-p' to mkdir to make sure it doesn't fail just because the dir exist
(which it does for me for some reason).
The dd option 'oseek' corresponds to 'seek' on Linux.
The Linux commands swapon/swapoff can be used for everything that 'swap' is used for.
But with slightly different options and usage.
Make sure to pkill mkbusy in cleanup(). Just in case...
* In zero_partitions(), don't create eight empty partition, just
  call set_partition() with slice=0, start=NULL, size=0 and it will
  just write an empty disklabel to the disk/file.
  + Update set_partition() and get_endslice() to take advantage of this.
  + Create a GPT partition, which makes creating partitions easier
    (no need for primary/extended/logical etc).
* Don't skip partition 2 on Linux - parted with a GPT label can create
  multiple partitions in row.
* Use '/etc/init.d/nfs-kernel-server status' to get NFSd status.
* When using SHARE (exportfs), use the '-i' option.
  + To get share options with 'exportfs', we need to use the '-v' option.
* Extract the get_physical_device() part from is_physical_device().
  Need it else where...
* Add a wrapper for updating loop back partition mappings using kpartx.
  The '-u' option doesn't remove non-existing/old partition mappings.
  So instead, first delete the/all mappings, then add them again.
* Sleep 1 after creating the ZVOL (to make sure udevd catches up).
* Setting bootfs to a snapshot is allowed on Linux.
Don't create a sparse file.