Obligar a zpool a usar / dev / disk / by-id en Ubuntu Xenial

16

Estoy probando el paquete OpenZFS en Ubuntu 16.04 Xenial.

Al crear grupos, siempre hago referencia a las unidades de sus series en /dev/disk/by-id/(o /dev/disk/gpten FreeBSD) para la resistencia. Las unidades no siempre están en el mismo orden /devcuando se reinicia una máquina, y si tiene otras unidades en la máquina, es posible que el grupo no se monte correctamente.

Por ejemplo, corriendo zpool statusen una caja 14.04 obtengo esto:

NAME                                  STATE     READ WRITE CKSUM
tank                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0

Pero cuando creo un nuevo grupo en 16.04 con esto (abreviado):

zpool create pool raidz \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]

Me sale esto con zpool status:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
  raidz1-0  ONLINE       0     0     0
    sdf     ONLINE       0     0     0
    sde     ONLINE       0     0     0
    sdd     ONLINE       0     0     0
    sda     ONLINE       0     0     0

Parece que zpool siguió los enlaces simbólicos, en lugar de hacer referencia a ellos.

¿Hay alguna manera de forzar a zpool en 16.04 a respetar las referencias de mi unidad al crear un grupo? O, alternativamente, ¿mis dudas sobre lo que está haciendo aquí están fuera de lugar?

Actualización: solución alternativa

Me encontré con un hilo de zfsonlinux en Github que sugirió una solución. Cree su zpool con /dev/sdXdispositivos primero, luego haga esto:

$ sudo zpool export tank
$ sudo zpool import -d /dev/disk/by-id -aN

Todavía preferiría poder hacer esto con la inicial, zpool createsi es posible.

Ruben Schade
fuente
No importa cómo los crees. Si vuelve a / dev / sd? nombres de dispositivo, zfs exporty zfs import -dfuncionará de todos modos. Por cierto, a menos que realmente necesite cada byte de espacio, use dos pares reflejados en lugar de raidz. El rendimiento de raidz es mejor que el de raid-5 pero aún mucho peor que el de los pares duplicados de raid-10 o zfs. también es más fácil expandir un grupo compuesto por pares reflejados, solo agregue dos discos a la vez ... con raidz, debe reemplazar cada una de las unidades con unidades más grandes, y solo cuando haya reemplazado todas ellas, su La piscina tiene más espacio disponible.
cas
Todavía tengo algunas piscinas raid-z, y lamento haberlas hecho. Cuando pueda comprar discos de reemplazo, crearé nuevos grupos con pares duplicados y los usaré zfs sendpara copiar mis datos a los nuevos grupos. En realidad, raid-z está bien para mi caja de mito, donde el rendimiento no es crítico a menos que esté ejecutando 6 u 8 trabajos de transcodificación a la vez. Cambiar a pares duplicados sería muy notable en el grupo donde /home vive mi directorio.
cas
2
La duplicación de ZIL es para que pueda salirse con la suya utilizando SSD baratos y ordinarios en lugar de los caros con condensadores grandes para protegerse contra la pérdida de energía. En mi opinión, la duplicación del ZIL no es opcional, sin importar qué tipo de SSD tenga: si su ZIL muere, pierde todos los datos aún por escribir y posiblemente corrompe su grupo. En cuanto a L2ARC, dije específicamente NO duplicarlos ... duplicar el caché L2ARC es una pérdida de tiempo, dinero y un buen espacio SSD (y no haría nada para evitar perder el caché, ¿de dónde sacaste esa idea?)
cas
1
:) Por cierto, mi cerebro no estaba funcionando bien cuando le expliqué la razón para reflejar ZIL. No es para protegerse contra la pérdida de energía, eso es un completo disparate y nunca debería haberlo dicho. Es para evitar fallas en la unidad ZIL. es decir, raid-1 espejo para el ZIL. Dos SSD a precios razonables son, en general, mejores que uno extremadamente caro (a menos que el SSD más caro tenga una interfaz mucho más rápida, como PCI-e vs SATA). y un UPS es esencial ... protección barata contra pérdida de energía.
cas
1
@cas Mirrored ZIL protege contra fallas del dispositivo SLOG al mismo tiempo que un apagado inesperado. En operaciones normales, el ZIL es de solo escritura y las escrituras en el almacenamiento persistente provienen de RAM (ARC). Si el sistema se apaga inesperadamente, el registro de intenciones (ZIL, SLOG) se utiliza para finalizar las escrituras que se interrumpieron. Solo si el apagado inesperado coincide con la falla de un dispositivo SLOG, necesita un SLOG reductor para recuperar las escrituras interrumpidas. Para la mayoría de las cargas de trabajo que no son del servidor (y muchos servidores), un SLOG es excesivo, ya que el ZIL realmente solo entra en juego con escrituras síncronas.
un CVn

Respuestas:

1

Uno de vez en cuando, zpool import -d /dev/disk/by-idno funciona.

He notado esto en más de un entorno. Tengo un script de importación que, más allá de hacer algo de lógica mágica y mostrar dispositivos ZFS conectados físicamente, también hace básicamente esto:

zpool import -d /dev/disk/by-id POOL
zpool export POOL
zpool import POOL

La segunda vez, incluso sin el -dinterruptor, importa por ID de dispositivo, incluso si no lo hizo la primera vez con el comando explícito.

Es posible que esto se deba a un error de ZFS durante algunas semanas o meses (hace un año o dos), y esto ya no es necesario. Supongo que debería haber presentado un informe de error, pero fue trivial evitarlo.

Jim
fuente
1

Sé que este hilo es algo rancio, pero hay una respuesta. Necesita actualizar su archivo de caché después de importar. Este ejemplo muestra la ubicación predeterminada para el archivo de caché.

$> sudo zpool export POOL
$> sudo zpool import -d /dev/disk/by-id POOL
$> sudo zpool import -c /etc/zfs/zpool.cache
$> sudo zpool status POOL
NAME                                  STATE     READ WRITE CKSUM
POOL                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0
Steve O
fuente