プログラムがうまく書いたと思いますが、ディスクに何も書き込まないように欺くことは可能ですか?

プログラムがうまく書いたと思いますが、ディスクに何も書き込まないように欺くことは可能ですか?

ファイルの重複を取り除くことができるサードパーティ製のソフトウェアがありますが、ファイルをディスクにコピーしましたが、すでにディスクにファイルがあり、シンボリックリンクだけが必要なので、リモートサーバーからインポートしていないと思います。

/xフォルダを一種の書き込み可能な偽のファイルシステムにする方法はありますか?たぶんヒューズのようなものですか?

作成するソフトウェア/スクリプトを実行できる任意のフォルダを開きたいです。これは成功した書き込みを返しますが、実際には何も書きません。

それは可能ですか?実行例はtouch file正しく実行する必要がありますが、何も記録されません。

答え1

FUSEファイルシステム(ユーザースペースのファイルシステム)を使用すると、libfuseライブラリを使用してプログラムを作成してほとんどのファイル操作を実装できます。プログラムをディレクトリに効果的にマウントすると、そのディレクトリで実行されるすべての操作がカーネルを介して応答を提供するプログラムに渡されます。要件に合わせて簡単に変更できるサンプルプログラムを含むPerlおよびPythonパッケージがいくつかあります。

fuse-python特に、私が使用しているFedora 25の場合、サンプルプログラムを提供するrpmがあります。xmp.pyこれは、「単純に」マウントポイントで実行されたすべての操作を最初に指定した実際のディレクトリにコピーします。

たとえば、(rootではなく通常のユーザーとして)実行すると、

mkdir -p /tmp/myfs/under /tmp/myfs/write
xmp.py /tmp/myfs/write -o root=/tmp/myfs/under

これにより、マウントポイントの下のファイルで実行されたすべての操作が、/tmp/myfs/write実際の冗長「ルート」ディレクトリにも表示されます/tmp/myfs/under。例えば

echo abc >/tmp/myfs/write/file1

file1物理ディレクトリに作成されました。もちろんls /tmp/myfs/*/file1、ファイルが両方に表示されると、xmp.py実際のディレクトリも表示されます。

-rw-r--r-- 1  4 Aug  1 18:43 /tmp/myfs/under/file1
-rw-r--r-- 1  4 Aug  1 18:43 /tmp/myfs/write/file1

Pythonのサンプルコードを見ると、コードが非常に短いことがわかります。システムコールの実装を見ることができます。write() ここ:

    def write(self, buf, offset):
        self.file.seek(offset)
        self.file.write(buf)
        return len(buf)

ファイルへの実際の書き込みを抑制するには、単に3行目をコメントアウトするだけです。

    def write(self, buf, offset):
        self.file.seek(offset)
        # self.file.write(buf)
        return len(buf)

メルトダウンファイルシステムの削除

fusermount -u /tmp/myfs/write

その後、新しいファイルを実行するxmp.pyと、ファイルに書き込むと成功したように見えますが、デフォルトの物理ディレクトリにデータは書き込まれません。プログラムで偽の問題が発生する可能性があるため、ディレクトリの作成などの他のファイル操作を削除しないことをお勧めします。

xmp.py私はシステムにインストールされたパッケージに提供されているものを使用しました。 Githubコードへのリンクは表示専用です。ご使用のシステムに適したパッケージを見つけて使用する場合は、この実験を繰り返すことに問題はありません。 FUSEにはいくつかのPythonライブラリがあります。上記のサンプルコードを使用してこのバージョンをインストールしてください。


あなたのログインはグループになければなりませんヒューズこのプログラムを使用できます。コマンドの出力にこのリストを表示する必要がありますid。グループが存在しない場合は、グループを追加しsudo usermod -a -G fuse $USER(ここで$ USERはログイン名)、もう一度ログインしてください。

Ubuntuでは、パッケージがpython-fuse。例xmp.pyは変更されていません。ファイルは作成されますが記録されませんInvalid argument。これは、今回のバージョンとlibfuseバージョンの非互換のために発生するようです。xmp.py追加のデバッグオプションを実行すると-o debugエラーが表示されます。

AttributeError: 'XmpFile' object has no attribute 'direct_io'
AttributeError: 'XmpFile' object has no attribute 'keep_cache'

xmp.pyclass XmpFileこの問題を解決するために別の方法を試すこともできますが、私は関数に追加し、その行のdef __init__後に次の2行を追加することで欠落してself.fd = self.file.fileno()いる属性を追加しました。

self.direct_io = None
self.keep_cache = None

タブではなく空白のみを使用して、行がまったく同じにインデントされていることを確認してください。

関連情報