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

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

다음과 유사한 파일 시스템 객체를 생성하는 방법이 있습니까?

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(). 이 작업을 사용자 공간에서 완전히 수행할 수는 없습니다(적어도 모놀리식 커널은 아니지만 마이크로커널을 사용하더라도 일반 사용자 공간 프로세스로 실행되기는 하지만 여전히 파일 시스템 드라이버를 제공해야 합니다).

관련 정보