Czy w systemie Linux istnieje sposób na połączenie serii plików w jeden odsłonięty plik do odczytu i zapisu, nie zajmując w rzeczywistości kolejnych N bajtów miejsca na dysku? Miałem nadzieję na coś takiego jak zamontowanie tych plików przez loopback / devmapper, aby to osiągnąć.
Mam problem z podzielonymi plikami binarnymi, które mogą być dość duże. Nie chcę podwoić wymagań dotyczących miejsca dzięki ogromnemu dyskowi IO tylko po to, aby tymczasowo odczytać / zapisać zawartość z tych plików, cat
łącząc je wszystkie w jeden ogromny plik.
Znalazłem ten projekt tutaj , ale wydaje się, że ma on bardzo specyficzny przypadek użycia i zależy również od perla
Odpowiedzi:
Możesz to zrobić, łącząc urządzenia pętlowe z maperem urządzeń, dzięki „wszystko jest plikiem”. Ale z jednym ograniczeniem: Rozmiar pliku nie może zostać zmieniony (ponieważ nie można zwiększyć urządzeń blokowych, pisząc do nich). Więc jeśli chcesz dołączyć dane, musisz utworzyć większe urządzenie blokowe i zastąpić dołączone dane fikcyjne.
Aby rozszerzyć plik, możesz utworzyć duży plik rzadki i użyć go jako dodatkowego urządzenia.
źródło
Można to zrobić za pomocą nazwanego potoku w systemie Linux.
Załóżmy, że masz nazwane pliki
file0, file1, file2, file3, file4, file5
W C programowo możesz to zrobić
Następnie użyj, a następnie użyj mojego nowego pliku, tak jak my czytalibyśmy z normalnego pliku.
mój nowy plik to plik FIFO
źródło
Do czytania możesz użyć
less
wielu plików, a następnie użyć opcji:n
i,:p
aby je przejrzeć.Do pisania bez bezpośredniego dostępu do plików nie będziesz mógł do nich pisać.
Możesz również
vim
wiele plików, a on po prostu przejdzie w kolejności, w jakiej zostały wywołane (tj.vim fileA fileB fileC
- plik B otwarty po zamknięciu pliku A, plik C otwarty po zamknięciu pliku B).źródło