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

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

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

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

기본적으로 질문의 첫 번째 문장에서 대답하셨습니다. 예, 할 수 있습니다. 그러나 사용자 정의 파일 시스템 드라이버를 작성해야 합니다. 파일 시스템 개체로 간주되는 경우 일정 수준에서 커널에 의해 처리되어야 합니다(여기에는 다음이 포함됩니다).퓨즈). 드라이버는 표준 파일 시스템 syscall API stat()( open()검색 포함 등) 에 대한 백엔드를 제공해야 합니다 . 사용자 공간에서 완전히 수행할 수는 없습니다(적어도 모놀리식 커널의 경우는 아니지만 마이크로커널의 경우에도 일반 사용자 공간 프로세스로 실행되기는 하지만 여전히 파일 시스템 드라이버를 제공해야 합니다).

관련 정보