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.