Odpowiedzi:
W systemach operacyjnych opartych na systemie Linux można to zrobić za pomocą bloków sieciowych lub urządzeń mapujących urządzenia. Otrzymany plik jest urządzeniem blokowym.
Z nbd
:
ln -s /path/to/first-file file.0
...
ln -s /path/to/last-file file.19
nbd-server -C /dev/null -m 127.0.0.1:12345 file
sudo nbd-client localhost 12345 /dev/nbd0
(konkatenacja jest /dev/nbd0
).
Z maperem urządzenia (rozmiary plików muszą być wielokrotnością 512):
sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
sudo dmsetup create mybundle
(konkatenacja jest /dev/mapper/mybundle
).
napisał dzisiaj sterownik bezpiecznika, jeśli ktoś jest zainteresowany rozwiązaniem bezpiecznika (maper urządzeń oraz powyższe rozwiązanie nbd utworzą urządzenia blokowe, a nie zwykłe pliki - które zepsują się, jeśli chcesz użyć wynikowego wyjścia bezpośrednio do edycji wideo oprogramowanie lub inne narzędzia, które nie są przygotowane do bezpośredniego odczytu z urządzenia blokowego)
Zasadniczo odpowiedziałeś na to w pierwszym zdaniu pytania: tak, można to zrobić. Będziesz jednak musiał napisać niestandardowy sterownik systemu plików. Jeśli ma to być obiekt systemu plików, musi być obsługiwany przez jądro na pewnym poziomie (w tym FUSE ). Kierowca będzie musiał dostarczyć backend dla standardowego systemu plików wywołań API ( stat()
, open()
itd., W tym poszukiwanie). Nie możesz tego zrobić całkowicie w przestrzeni użytkownika (przynajmniej nie z monolitycznym jądrem - ale nawet z mikrojądrem nadal będziesz musiał dostarczyć sterownik systemu plików, chociaż działa jako zwykły proces przestrzeni użytkownika).