他のファイルへの接続を含む仮想ファイル

他のファイルへの接続を含む仮想ファイル

次のようなファイルシステムオブジェクトを作成する方法はありますか?

mknod files p
cat file1 file2 ... fileN > files

しかし、通常のファイルのように見つけることができますか?

答え1

Linuxベースのオペレーティングシステムでは、ネットワークブロックデバイスまたはデバイスマッパーデバイスを使用してこれを実行できます。あなたが得るファイルはブロックデバイスです。

そして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

(接続は/dev/nbd0)。

デバイスマッパーの使用(ファイルサイズは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

(接続は/dev/mapper/mybundle)。

答え2

誰かがヒューズソリューションに興味がある場合は、今日ヒューズドライバを書いています(上記のデバイスマッパーとnbdソリューションは通常のファイルではなくブロックデバイスを生成します。結果の出力をビデオ編集に直接使用したい場合は中断されます)準備ができていないソフトウェアやその他のツール)

https://github.com/schlaile/concatfs

答え3

質問の最初の文章では、基本的に次のように答えました。はい、できます。ただし、カスタムファイルシステムドライバを作成する必要があります。ファイルシステムオブジェクトと見なされる場合は、カーネルである程度処理する必要があります(含む)。ヒューズ)。ドライバは、標準ファイルシステムシステムコールAPI(照会を含むなど)のstat()バックエンドを提供する必要がありますopen()。これをユーザースペースで完全に実行することはできません(少なくともモノリシックカーネルではありませんが、マイクロカーネルを使用しても通常のユーザースペースプロセスとして実行されますが、それでもファイルシステムドライバを提供する必要があります)。

関連情報