From e871a8f0584a3259c342f8e3e817159600302832 Mon Sep 17 00:00:00 2001 From: George Melikov Date: Wed, 24 Oct 2018 06:06:40 +0300 Subject: [PATCH] Allow use of pool GUID as root pool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's helpful if there are pools with same names, but you need to use only one of them. Main case is twin servers, meanwhile some software requires the same name of pools (e.g. Proxmox). Reviewed-by: Kash Pande Reviewed-by: Brian Behlendorf Signed-off-by: George Melikov Signed-off-by: Igor ‘guardian’ Lidin of Moscow, Russia Closes #8052 --- contrib/initramfs/scripts/zfs.in | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/contrib/initramfs/scripts/zfs.in b/contrib/initramfs/scripts/zfs.in index 18c8ca2ad..1b8160a6b 100644 --- a/contrib/initramfs/scripts/zfs.in +++ b/contrib/initramfs/scripts/zfs.in @@ -193,7 +193,7 @@ import_pool() # Verify that the pool isn't already imported # Make as sure as we can to not require '-f' to import. - "${ZPOOL}" status "$pool" > /dev/null 2>&1 && return 0 + "${ZPOOL}" get name,guid -o value -H 2>/dev/null | grep -Fxq "$pool" && return 0 # For backwards compatibility, make sure that ZPOOL_IMPORT_PATH is set # to something we can use later with the real import(s). We want to @@ -772,6 +772,7 @@ mountroot() # root=zfs:/ (uses this for rpool - first part, without 'zfs:') # # Option could also be + # Option could also be # ------------ # Support force option @@ -889,6 +890,14 @@ mountroot() /bin/sh fi + # In case the pool was specified as guid, resolve guid to name + pool="$("${ZPOOL}" get name,guid -o name,value -H | \ + awk -v pool="${ZFS_RPOOL}" '$2 == pool { print $1 }')" + if [ -n "$pool" ]; then + ZFS_BOOTFS="${pool}/${ZFS_BOOTFS#*/}" + ZFS_RPOOL="${pool}" + fi + # Set elevator=noop on the root pool's vdevs' disks. ZFS already # does this for wholedisk vdevs (for all pools), so this is only # important for partitions.