他のファイルの連結を含む仮想ファイル


13

これに似たファイルシステムオブジェクトを作成する方法はありますか?

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

しかし、それがまるで通常のファイルであるかのように、それを捜すことができるように?

回答:


18

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)。


8

誰かがヒューズソリューションに興味を持っている場合、今日ヒューズドライバを作成しました(上記のデバイスマッパーとnbd-solutionは、通常のファイルではなくブロックデバイスを作成します。ブロックデバイスから直接読み取る準備ができていないソフトウェアまたはその他のツール)

https://github.com/schlaile/concatfs


非常に教育的で使いやすいソースコード!作成して共有してくれてありがとう!
グジェゴシWierzowiecki

3

あなたは基本的に質問の最初の文で答えました:はい、できます。ただし、カスタムファイルシステムドライバーを作成する必要があります。ファイルシステムオブジェクトであると想定される場合は、何らかのレベル(FUSEを含む)でカーネルによって処理される必要があります。ドライバは、(標準のファイルシステムのシステムコールAPIのためのバックエンドを提供しなければならないstat()open()追求を含む、など)。完全にユーザー空間でそれを行うことはできません(少なくともモノリシックカーネルではできません-しかし、マイクロカーネルを使用しても、通常のユーザー空間プロセスとして実行されているにもかかわらず、ファイルシステムドライバーを提供する必要があります)。


それができることはかなり明白です。私が興味を持っているのは、標準のun * xパッケージを使用してこれを達成するためのクイックハック方法があるかどうかです。できればbashを使用して専用のカーネル空間ドライバーを作成する必要があります。
ウィティコ

1
ステファンの答えを参照してください-デバイスマッパーを完全に忘れてしまいました。
ペテルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.