split
ファイルを完全に同じ記憶領域を使用するチャンクに分割します(使用されているディスク容量の2倍)。
ln
ファイルをコピーせずに他の(ターゲット)ファイルのシンボリックリンクを作成できるため、ターゲットファイルスペースを2倍にしません。
記憶領域が不足しているため、大容量ファイルの特定のオフセットを指す参照/シンボル方式(つまり、仮想ファイルの分割)でファイルを分割することは可能ですか?
たとえば、2MB ファイルがある場合は、2 つの部分に分割します。ここでは、各部分は1MBの大きなファイルを参照します(シンボリックリンク操作と同じ)。各部分は次のことを行います。
- 他のフラグメントと重複しません(フラグメントは大容量ファイルの同じデータを参照しません)。
- 参照する大容量ファイルの一部と同じストレージサイズを使用しません。
piece_1.file -> 2mb.file 1st MB
piece_2.file -> 2mb.file 2nd MB
そして、各ブロックのストレージサイズは1MBよりはるかに小さいです。
答え1
記憶領域が不足しているため、大容量ファイルの特定のオフセットを指す参照/シンボル方式(つまり、仮想ファイルの分割)でファイルを分割することは可能ですか?
直接ではありません。 POSIXの事故では、ファイルはそのように動作しません。これはより独立して原子的なデータ単位です。
2つのオプション:
ループバックデバイス
これは走るつまり、オンディスクソリューションではありませんが、手動設定が必要です。これがメリットになったり、デメリットになることもありますよ!
freedesktopシステムメッセージバスと互換性のあるセッションマネージャを使用している場合(たとえば、グラフィカルにシステムにログインしてgnome、xfce4、kde ...を実行している場合)、ループバックデバイスを簡単に設定できます。
blksize=$((2**20))
udisksctl loop-setup -s $blksize -f /your/large/file
udisksctl loop-setup -s $blksize -o $blksize -f /your/large/file
- 最初のコマンドは以下を提供します。
/dev/loop
答え2
Linuxでは、デバイスを使用してこれらのタスクを実行できますloop
。
たとえば、
losetup --find --show --sizelimit=2M file
losetup --find --show --offset=2M --sizelimit=2M file
losetup --find --show --offset=4M --sizelimit=2M file
3つの2MiBチャンクを参照する3つのループデバイスへのパスを出力しますfile
。
答え3
私があなたを正しく理解しているなら、これはあなたの問題に非常に近いです。いいえ?
supu@devuan ~/TEST ❖ cat bigfile.txt 8:01
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖ split -n2 bigfile.txt
supu@devuan ~/TEST ❖ ls -l 8:00
insgesamt 12.288
-rw-r--r-- 1 supu supu 38 2023-03-14 07:59 bigfile.txt
lrwxrwxrwx 1 supu supu 3 2023-03-14 08:00 piece1 -> xaa
lrwxrwxrwx 1 supu supu 3 2023-03-14 08:00 piece2 -> xab
-rw-r--r-- 1 supu supu 19 2023-03-14 08:00 xaa
-rw-r--r-- 1 supu supu 19 2023-03-14 08:00 xab
supu@devuan ~/TEST ❖ cat piece? 8:00
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖ cat xa? 8:01
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖