A few months ago I
published a modified zpool program to create pools with a higher ASHIFT value, suitable for disks with 4k sectors. I expected the program compiled on s10u8 to be upward compatible. Apparently, it isn't.
To compile "zpool" on s10u9, I used the sources from OpenSolaris b138.
The instructions how to compile are mostly unchanged from s10u8. The only required additional step is to compile and link against /usr/src/cmd/stat/common/timestamp.c. I am omitting further details.
For Solaris 11 Express, I used b147 as the basis. I was unable to find a complete on-src.tar.bz2 for this release, but had to pull the sources from hg.openindiana.org via
hg (mercurial). I then compiled with:
cd /tmp
mkdir -p usr/src
cd ~ftp/pub/OpenSolaris/hg.openindiana.org/onnv-gate/usr/src
find \
cmd/stat/common \
common/zfs \
cmd/zpool \
lib/libuutil/common \
lib/libdiskmgt/common \
| cpio -pmdv /tmp/usr/src
cd /tmp/usr/src/cmd/stat/common
gcc -O2 -DTEXT_DOMAIN='"en_US"' -c timestamp.c
cd /tmp/usr/src/cmd/zpool
ln -s /usr/lib/libuutil.so.1 libuutil.so
gcc -O2 \
-Dzpool_rewind_policy_t=zpool_load_policy_t \
-DZPOOL_REWIND_REQUEST=ZPOOL_LOAD_REWIND \
-DZPOOL_REWIND_POLICY=ZPOOL_LOAD_POLICY \
-DZPOOL_REWIND_REQUEST_TXG=ZPOOL_LOAD_REWIND_TXG \
-DZPOOL_NO_REWIND=ZPOOL_NORMAL_LOAD \
-DTEXT_DOMAIN='"en_US"' \
-I/tmp/usr/src/cmd/stat/common \
-I/tmp/usr/src/common/zfs \
-I/tmp/usr/src/lib/libuutil/common \
-I/tmp/usr/src/lib/libdiskmgt/common \
-c *.c
gcc -o zpool *.o ../stat/common/timestamp.o \
-L. \
-lzfs \
-lnvpair \
-ldevid \
-lefi \
-ldiskmgt \
-luutil \
-lumem \
-L/lib -lcryptoutil
The modification to zpool_vdev.c is always the same (at line 474/475):
--- zpool_vdev.c.orig 2011-01-11 16:01:14.906720955 +0100
+++ zpool_vdev.c 2011-01-11 16:39:00.334827548 +0100
@@ -471,6 +471,7 @@
verify(nvlist_add_string(vdev, ZPOOL_CONFIG_PATH, path) == 0);
verify(nvlist_add_string(vdev, ZPOOL_CONFIG_TYPE, type) == 0);
verify(nvlist_add_uint64(vdev, ZPOOL_CONFIG_IS_LOG, is_log) == 0);
+ verify(nvlist_add_uint64(vdev, ZPOOL_CONFIG_ASHIFT, 12) == 0);
if (strcmp(type, VDEV_TYPE_DISK) == 0)
verify(nvlist_add_uint64(vdev, ZPOOL_CONFIG_WHOLE_DISK,
(uint64_t)wholedisk) == 0);
For your convenience, I offer pre-compiled versions of the modified zpool program for
s10u8,
s10u9 and
Solaris 11 Express.