包含其他文件串聯的虛擬文件

包含其他文件串聯的虛擬文件

有沒有一種方法可以建立類似此的檔案系統物件:

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()。您不能完全在用戶空間中完成此操作(至少不能使用整體內核 - 但即使使用微內核,您仍然需要提供檔案系統驅動程序,儘管作為常規用戶空間進程運行)。

相關內容