ファイルシステムのスペースを使用せずにファイルを一緒にリンクします。

ファイルシステムのスペースを使用せずにファイルを一緒にリンクします。

ファイルシステムのスペースを使わずにLinuxで2つのファイルを結合(接続)したいと思います。できますか?

A + B = AB

ファイルはファイルシステムのABセクタまたはセグメントを使用しますABこれは可能ですか?

両方のファイルをコピーせずに(遅いプロセスです)gparted新しいファイルとして認識できますか?AB

答え1

私はあなたが大きなファイルに分割された非常に大きなディスクイメージを持っていて、そのf1ディスクイメージのパーティションを変更したいとします。その後、すべてのファイルのサイズが512の倍数であると仮定すると、rootとしてこれを実行できます。f2f3

offset=0
for f in f1 f2 f3; do
   loop=$(losetup -f --show -- "$f")
   size=$(blockdev --getsz "$loop")
   printf '%s\n' "$offset $size linear $loop 0"
   offset=$(( offset + size ))
done | dmsetup create myimg

その後、後で作成されたパーティションを実行、フォーマット、およびgparted /dev/mapper/myimgマウントすることもできます。

デバイスを取り外すには:

  • すべてのファイルシステムやその他のリソースがマウント解除/解除されていることを確認してください。
  • dmsetup remove myimg
  • losetup -dすべてのループデバイスで実行されます。

答え2

プロセスの置き換え複数のファイルをリンクして、1つのプロセスの1つのファイルのように見せることができますsome_program <(cat A B)

gpartedしかし、入力ファイルを変更するように設計された他のプログラムと一緒に使用することは意味がありません。これは実際のファイルではなく、FIFO、匿名パイプ、一時ファイルです。生成された「ファイル」は<()読み取り専用であり、検索することはできません(つまり、順番にのみ読み取ることができます)。

プロセスの交換にはstdoutをプロセスにリダイレクトすることも含まれますが、実際のブロックデバイスまたはディスクイメージファイルを期待する>()この方法はまだ役に立ちません。gparted

関連情報