Linux

在 Linux 上將文件連接到虛擬文件

  • September 13, 2021

在 Linux 系統上,有沒有辦法將一系列文件連接到一個公開的文件中進行讀寫,同時又不佔用另外 N 字節的磁碟空間?我希望通過 loopback/devmapper 安裝這些文件來完成此操作。

我有一個問題,其中有可能變得非常大的拆分二進製文件。我不想通過大量磁碟 IO 使我的空間需求翻倍,只是通過將這些文件cat全部合併到一個巨大的文件中來臨時讀取/寫入這些文件的內容。

我在這裡找到了這個項目,但它似乎有一個非常具體的案例,並且還依賴於 perl

由於“一切都是文件”,您可以通過組合循環設備和設備映射器來做到這一點。但有一個限制:文件大小無法更改(因為您無法通過寫入塊設備來增加它們)。因此,如果要附加數據,則必須創建更大的塊設備並覆蓋附加的虛擬數據。

# for testing, Create 4 files
echo foo | dd of=block0 cbs=512 conv=block
echo bar | dd of=block1 cbs=512 conv=block
echo bat | dd of=block2 cbs=512 conv=block
echo baz | dd of=block3 cbs=512 conv=block
# Create a loop device for each of the 4 files
losetup /dev/loop0 block0
losetup /dev/loop1 block1
losetup /dev/loop2 block2
losetup /dev/loop3 block3
# Create a device map named "test" using those loop devices
(
   echo "0 1 linear /dev/loop0 0"
   echo "1 1 linear /dev/loop1 0"
   echo "2 1 linear /dev/loop2 0"
   echo "3 1 linear /dev/loop3 0"
) | dmsetup create test
$EDITOR /dev/mapper/test # use overwrite mode only

為了擴展文件,您可以創建一個大的稀疏文件並將其用作附加設備。

引用自:https://serverfault.com/questions/487670