Montowany system plików, który automatycznie dzieli pliki


4

Czy istnieje [wirtualny-] system plików, który może automatycznie dzielić pliki w pamięci, ale prezentować je użytkownikowi jako pojedyncze pliki?

Na przykład:

The user sees: /user/files/10TBfile
But it is stored as: /backingstorage/user/files/10TBfile.{1..100}

Zasadniczo tak samo działa podzielone archiwum, ale w czasie rzeczywistym. Wydaje mi się, że powinno to być możliwe, ponieważ zasadniczo przechowuje każdy blok dysku wirtualnego jako osobny plik, ale nie znam żadnych istniejących rozwiązań.

Jeśli jesteś ciekawy, celem końcowym może być coś podobnego do tego pytania: Podziel pliki lokalne na różne serwery o ograniczonej przestrzeni za pomocą rsync, z wyjątkiem tego, że mam pojedyncze duże pliki, które należy podzielić, a pliki należy zaktualizować w czasie rzeczywistym -czas, więc codzienne cron / rsync i split tar nie wchodzą w rachubę. Mam już podłączone dyski zdalne, więc potrzebuję tylko sposobu podzielenia pliku i przedstawienia go jako pojedynczy plik użytkownikowi.

Dzięki!


1
Najlepszym rozwiązaniem jest prawdopodobnie napisanie własnego przy użyciu FUSE .
jjlin

Zastanowiłem się nad tym, zastanawiam się, czy istnieją jakieś istniejące rozwiązania, zanim zacznę
tworzyć

Odpowiedzi:


6

Co chcesz chunkfs:

ChunkFS jest systemem plików opartym na BEZPIECZENIU, który umożliwia podłączenie dowolnego pliku lub zablokowanie urządzenia jako drzewa katalogów plików, z których każdy reprezentuje określony przez użytkownika rozmiar zamontowanego pliku.

Został napisany w tym samym celu, co twój:

ChunkFS został pierwotnie napisany do tworzenia energooszczędnych przyrostowych kopii zapasowych zaszyfrowanych obrazów systemu plików przy użyciu rsync. Korzystając z opcji --link-dest programu rsync, możesz tworzyć przyrostowe kopie zapasowe z obrazu zamontowanego w ChunkFS, gdzie każdy fragment, który nie zmienił się od czasu ostatniej kopii zapasowej, będzie twardym łączem do odpowiedniego fragmentu z poprzedniej kopii.


Wydaje się być dokładnie tym, co pisałem. Zabawne, ponieważ faktycznie mam już prawie taką samą funkcjonalność tylko do odczytu, ale obecnie pracuję nad pisaniem. Dzięki za wskazanie mi czegoś, co już działa!
arcyqwerty

1

Znalazłem odpowiedź tutaj: https://unix.stackexchange.com/a/67995/6226

Tworzysz kilka plików kontenerów, łączysz je jako urządzenie, formatujesz je za pomocą systemu plików, montujesz ten system plików i umieszczasz w nim duży plik.


1
wygląda na to, że działałoby to dobrze, ale dla dużej liczby fragmentów wymaga wielu urządzeń pętlowych (wyobraź sobie montaż kilku dużych plików jednocześnie)
arcyqwerty

0

Nie jestem pewien, ale myślę, że możesz użyć rozbierania (czyli techniki segmentowania logicznie sekwencyjnych danych, takich jak plik) na przykład w LVM.

Oto kilka informacji na ten temat z RedHat:

2.3.2 Paski woluminy logiczne Podczas zapisywania danych na woluminie logicznym LVM system plików rozdziela dane w obrębie podstawowych woluminów fizycznych. Możesz kontrolować sposób zapisywania danych w woluminach fizycznych, tworząc wolumin logiczny rozłożony. W przypadku dużych sekwencyjnych odczytów i zapisów może to poprawić wydajność operacji we / wy danych. Striping poprawia wydajność, zapisując dane do określonej liczby woluminów fizycznych w okrągły sposób. Dzięki rozłożeniu wejścia / wyjścia można wykonywać równolegle. W niektórych sytuacjach może to spowodować prawie liniowy wzrost wydajności dla każdej dodatkowej objętości fizycznej w pasku. źródło

Dodatkowe informacje tutaj


Czy dane mogą być przechowywane w plikach?
Podejrzewam,

0

Zazwyczaj robiłbyś to na poziomie bloku. Niektóre rozwiązania tego obejmują:

  • Rajd 0
  • DRBD (bardziej dla kopii lustrzanej, sieć OK)
  • ZFS (wyższy poziom abstrakcji)

Z perspektywy systemu plików:

  • Ręcznie przechowuj połowę pliku w jednym systemie plików, a połowę w drugim, a następnie prezentuj to w niestandardowym systemie plików FUSE (Pomyśl o skomplikowanym niestandardowym kodzie).
  • Większość rozwiązań systemu plików koncentruje się na synchronizacji, a nie na partycjonowaniu danych.
  • Hadoop (dzielenie danych, nie tradycyjny FS)

Pierwszy punkt jest mniej więcej tym, czego szukam, jeśli istnieją jakieś istniejące rozwiązania.
arcyqwerty
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.