Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

On a Linux system, is there any way to concatenate a series of files into one exposed file for reading and writing while not actually taking up another N bytes of disk space? I was hoping for something like mounting these files via loopback/devmapper to accomplish this.

I have a problem where there are split binary files that can get quite large. I don't want to double my space requirements with massive disk IO just to temporarily read / write contents from these files by cating them all together into one enormous file.

I found this project here, but it seems to have a very specific use case and also depends on perl

share|improve this question
    
I guess FUSE was invented to solve this kind of problem. Probably you have to write your own module but that should not be too difficult. –  Hauke Laging Mar 14 '13 at 5:09

2 Answers 2

up vote 8 down vote accepted

You can do that by combining loop devices and device mapper, thanks to "everything is a file". But with one limitation: The file size cannot be changed (as you cannot increase block devices by writing to them). So if you want to append data then you have to create a bigger block device and overwrite the appended dummy data.

# for testing
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
losetup /dev/loop0 block0
losetup /dev/loop1 block1
losetup /dev/loop2 block2
losetup /dev/loop3 block3
echo '0 1 linear /dev/loop0 0'$'\n''1 1 linear /dev/loop1 0'$'\n'\
  '2 1 linear /dev/loop2 0'$'\n''3 1 linear /dev/loop3 0' | dmsetup create test
$EDITOR /dev/mapper/test # use overwrite mode only

For extending the file you may create a big sparse file and use that as additional device.

share|improve this answer

For reading, you can less multiple files and then use the :n and :p options to go through them.

For writing, without accessing the files directly you will not be able to write to them.

You can vim multiple files as well, and it will just go through the order they were called (ie. vim fileA fileB fileC - fileB opened after fileA closed, fileC opened after fileB closed).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.