¿Cómo puedo hacer que vfs fruit de Samba funcione con atributos extendidos de macOS grandes en un kernel de Linux?

¿Cómo puedo hacer que vfs fruit de Samba funcione con atributos extendidos de macOS grandes en un kernel de Linux?

Tengo un cliente macOS (12.6.7) con un sistema de archivos APFS que admite atributos extendidos grandes (un valor de atributo supera los 68 MB en una prueba).

Tengo un servidor NAS con Ubuntu Server 22.04.2 LTS con sistema de archivos ZFS y Samba Versión 4.15.13-Ubuntu.

ZFS tiene xattr=sa configurado. Por lo tanto, los atributos extendidos están habilitados en el NAS.

Configuré Samba para que se ejecutara vfs fruitasí:

ea support = yes
vfs objects = catia fruit streams_xattr
fruit:resource = stream
fruit:metadata = stream

Con esta configuración pude escribir atributos extendidos más pequeños y bifurcaciones de recursos (menos de 64 KB) en el recurso compartido NAS.

Pero con atributos extendidos más grandes y bifurcaciones de recursos (más de 64 KB) no funcionó.

Después de muchos hilos, páginas de manual y código, me topé con este pequeñonotaen la página de manual de zfs:

xattr = activado | apagado | sa

El valor predeterminado de habilita atributos extendidos basados ​​en directorios. Este estilo de atributo extendido no impone ningún límite práctico ni en el tamaño ni en el número de atributos que se pueden establecer en un archivo. Aunque en Linux las llamadas al sistema getxattr(2) y setxattr(2) limitan el tamaño máximo a 64K.

Es genial que tengamos un ZFS en Linux "sin límite práctico", solo el Kernel de Linux (algo práctico) limita el tamaño de los atributos extendidos en la práctica.

Ok, no puedo solucionarlo ni en el lado de ZFS ni en el lado de Linux.

El siguiente paso fueSambaespecíficamente.

Debido a la limitación de tamaño de los atributos extendidos, necesitaba un almacenamiento alternativo para ellos. Para las bifurcaciones de recursos hay una configuración para escribirlos en archivos:

fruit:resource = file

Al tener esto habilitado, puedo escribir grandes bifurcaciones de recursos en el recurso compartido.

Pero Fruit no tiene la opción de escribir otros metadatos (como atributos extendidos) en un archivo complementario:

fruta:metadatos = [corriente | netatalk]

  • netatalk (predeterminado): use xattr compatible con Netatalk
  • flujo: pasa el flujo al siguiente módulo en la pila VFS

streamno funciona porque streams_xattr intenta escribirlo en un atributo extendido.

netatalkno funciona porque Fruit intenta escribirlo en un atributo extendido denominado compatible con netatalk.

¿Por qué tampoco existe la opción de escribir metadatos en archivos?

Esto haría que Samba fuera más independiente del sistema de archivos subyacente proporcionado (incluso si no tiene ningún atributo extendido).

Mi solución actual es utilizar:

ea support = no

Esto obliga a los clientes de macOS a crearAppleDoble archivospor sus bifurcaciones de recursos y atributos extendidos.

Con esto se mantienen la bifurcación de recursos y los atributos extendidos del cliente.

Por supuesto, esto es incompatible con los clientes de Windows, lo cual está bien para mí en este momento, pero es una limitación significativa de cómo puedo usar este cuadro.

También porque vfs fruitlo necesito ea support = yes, no puedo usarlo. Por lo que leí sobre la fruta, esto significa ralentizar el rendimiento del NAS y tampoco consigo configurar Time Machine fácilmente. Ni siquiera sé las otras consecuencias. Fruit parece implementar la capacidad FULLSYNC (ver fruit:time machine). Desde eldocumentos heredados de Applese lee como si fuera necesario para una copia de seguridad limpia de Time Machine en caso de un corte de energía.

También pensé en escribir las transmisiones en una base de datos, pero eso hace que arreglar las cosas sea mucho más difícil si algo sale mal con este objeto vfs (para más informaciónver). Tenga en cuenta "No utilice este módulo en producción".

Cambiar a un sistema operativo sin limitación de atributos extendidos para que Samba funcione no es una opción... al menos por ahora.

¿Existe otra opción para admitir completamente las bifurcaciones de recursos de macOS y los atributos extendidos en sistemas Linux sin deshabilitar los atributos extendidos en el recurso compartido de samba (y por lo tanto en vfs fruit)?

información relacionada