다른 파일의 연결을 포함하는 가상 파일


13

이와 비슷한 파일 시스템 객체를 만드는 방법이 있습니까?

mknod files p
cat file1 file2 ... fileN > files

그러나 마치 일반 파일처럼 찾을 수 있도록?

답변:


18

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).


8

누군가 퓨즈 솔루션에 관심이 있다면 오늘 퓨즈 드라이버를 작성했습니다 (위의 nbd 솔루션뿐만 아니라 장치 매퍼는 일반 파일이 아닌 블록 장치를 생성합니다-결과 출력을 비디오 편집과 함께 직접 사용하려는 경우 중단됩니다) 블록 장치에서 직접 읽을 준비가되지 않은 소프트웨어 또는 기타 도구)

https://github.com/schlaile/concatfs


매우 교육적이고 사용하기 쉬운 소스 코드! 그것을 만들고 공유해 주셔서 감사합니다!
Grzegorz Wierzowiecki

3

당신은 기본적으로 질문의 첫 문장에서 대답했습니다 : 그렇습니다, 할 수 있습니다. 그러나 사용자 정의 파일 시스템 드라이버를 작성해야합니다. 파일 시스템 객체 인 경우 커널이 일부 수준 ( FUSE 포함 )에서 처리해야합니다. 드라이버는 (표준 파일 시스템 콜 API를위한 백엔드 제공 할 것 stat(), open()추구 등 포함). 사용자 공간에서 완전히 할 수는 없습니다 (적어도 모 놀리 식 커널은 아니지만 마이크로 커널조차도 일반 사용자 공간 프로세스로 실행하더라도 파일 시스템 드라이버를 제공해야합니다).


그것이 가능하다는 것은 명백합니다. 내가 궁금한 점은 표준 un * x 패키지를 사용하여이를 달성 할 수있는 빠른 해킹 방법이 있는지 여부입니다. 가급적이면 전용 커널 공간 드라이버를 작성할 필요없이 bash를 사용하는 것이 좋습니다.
Witiko

1
Stephane의 답변을 참조하십시오-장치 매퍼를 완전히 잊었습니다.
peterph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.