Come posso memorizzare in modo trasparente qualsiasi directory o file system montato per le letture e le riscritture?


22

Supponiamo che monti un po 'di spazio di archiviazione cloud (Amazon Cloud Drive nel mio caso) con un client FUSE su /mnt/cloud. Ma poiché leggere e scrivere i file direttamente /mnt/cloudè lento perché deve passare su Internet, voglio memorizzare nella cache i file da cui sto leggendo e scrivendo sul cloud. Dal momento che potrei scrivere molti dati alla volta, la cache dovrebbe trovarsi sul mio disco e non nella RAM. Ma non voglio replicare l'intero archivio cloud sul mio disco, perché il mio disco potrebbe essere troppo piccolo.

Quindi voglio avere una vista cache in /mnt/cloudmontata su /mnt/cloud_cache, che utilizza un altro percorso, ad esempio /var/cache/cloudcome posizione di memorizzazione nella cache.

Se ora leggo /mnt/cloud_cache/file, voglio che accada quanto segue:

Controlla se fileè memorizzato nella cache /var/cache/cloud/file.

  1. Se memorizzato nella cache: la cache del check filein è aggiornata recuperando modtime e / o checksum da /mnt/cloud. Se è aggiornato, servi il file dalla cache, altrimenti vai a 2.
  2. Se non è memorizzato nella cache o cache è out-of-date: copia /mnt/cloud/fileper /var/cache/cloud/filee servire dalla cache.

Quando scrivo a /mnt/cloud_cache/file, voglio che questo accada:

  1. Scrivi /var/cache/cloud/filee registra in un diario che filedeve essere riscritto/mnt/cloud
  2. Attendere che la scrittura /var/cache/cloud/fileda fare e / o precedenti ripristini di valore per /mnt/cloudessere completati
  3. Copia /var/cache/cloud/filein/mnt/cloud

Ho i seguenti requisiti e vincoli:

  • Gratuito e open source
  • Possibilità di impostare la cache in un percorso cache arbitrario
  • Possibilità di memorizzare nella cache una posizione arbitraria (probabilmente un punto di montaggio FUSE)
  • La memorizzazione nella cache trasparente, ovvero l'utilizzo /mnt/cloud_cacheè trasparente al meccanismo di memorizzazione nella cache e funziona come qualsiasi altro file system montato
  • Tenere traccia di ciò che deve essere riscritto (la cache potrebbe ottenere molti dati che devono essere riscritti nella posizione di archiviazione originale nel corso dei giorni)
  • Cancellazione automatica dei file memorizzati nella cache che sono stati riscritti o ai quali non è stato possibile accedere da un po 'di tempo
  • La coerenza (ovvero il riflettere le modifiche esterne a /mnt/cloud) non è estremamente importante, poiché probabilmente avrò solo un client che accede /mnt/cloudalla volta, ma sarebbe bello avere.

Ho trascorso parecchio tempo a cercare soluzioni esistenti, ma non ho trovato nulla di soddisfacente.


2
Curioso se hai mai trovato una soluzione? Cercare un livello di cache simile con simili richiede i tuoi.
— SS44,

1
bitbucket.org/nikratio/s3ql fa praticamente quello che voglio. Tuttavia, sfortunatamente, non funziona particolarmente bene con Amazon Cloud Drive in particolare (principalmente colpa di ACD per mancanza di un buon client Linux)
— Flecto

Ho usato s3ql in passato, ma essermi trasferito su ACD per i miei file sembrava limitare l'utilizzo con quel provider. Si sono verificati problemi con la coerenza dei dati con s3ql quando raccolte di dati> 2 TB. RClone sembra promettente ma manca quel pezzo di cache vitale.
— SS44

Se sei seriamente interessato a questo, possiamo scriverlo in C ++, usando tmpfs e stat.
— GOST

Risposte:


3

Prova a usare catfs , un generico filesystem con memorizzazione nella cache dei fusibili su cui sto attualmente lavorando.


1
Da quello che sto vedendo fino ad ora funziona come un fascino. Molte grazie!
— Alfe,

2

È possibile utilizzare FS-Cache / CacheFS per memorizzare nella cache un sistema montato su un fusibile, aggiungendo una intersezione NFS tra: Se il supporto per fusibile è su / fusefs, quindi condividerlo su nfs scrivendo questo in / etc / exportfs:

/fusefs localhost(fsid=0)

Ora puoi farlo:

mount -t nfs -o fsc localhost:/fusefs /nfs systemctl start cachefilesd

e / nfs offriranno l'accesso nella cache a / fusefs.

Sto usando questo approccio con sshfs come back FS, funziona bene.

(Sfortunatamente, questo accelera solo l'accesso al contenuto dei file; i metadati dei file non sono memorizzati nella cache state opensono ancora lenti).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.